日常茶飯事 factory-g Hatena::Blog hatenablog://blog/17680117127148982400 procket/examples/sendmsg_recvmsg_echo.erl 動かしてみた hatenablog://entry/17680117127148982437 2019-01-20T16:16:44+09:00 2019-05-20T06:00:06+09:00 結果から書くと、動いた?となる。まず、自身の現時点の知識だと、何故動いているのか、理解していない。だから、ここで、理屈を書く事はできない。あくまでも、動いたソースの保存として書いておく。将来何かで実装するときは、こう書かないかも知れない。 -module(sample). -export([start/0]). -define(PORT, 8854). -define(SIZEOF_SOCKADDR, sizeof(sockaddr)). start() -> {ok, FD} = procket:socket(inet, dgram, udp), io:format("SIZEOF_SOCK… <p>結果から書くと、動いた?となる。</p><p>まず、自身の現時点の知識だと、何故動いているのか、理解していない。</p><p>だから、ここで、理屈を書く事はできない。</p><p>あくまでも、動いたソースの保存として書いておく。</p><p>将来何かで実装するときは、こう書かないかも知れない。</p> <pre class="code lang-erlang" data-lang="erlang" data-unlink><span class="synStatement">-module</span>(<span class="synConstant">sample</span>). <span class="synStatement">-export</span>(<span class="synSpecial">[</span>start<span class="synStatement">/</span><span class="synConstant">0</span><span class="synSpecial">]</span>). <span class="synPreProc">-define</span>(<span class="synPreProc">PORT</span>, <span class="synConstant">8854</span>). <span class="synPreProc">-define</span>(<span class="synPreProc">SIZEOF_SOCKADDR</span>, sizeof(<span class="synConstant">sockaddr</span>)). start() <span class="synStatement">-&gt;</span> <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">FD</span><span class="synSpecial">}</span> <span class="synStatement">=</span> procket:socket(<span class="synConstant">inet</span>, <span class="synConstant">dgram</span>, <span class="synConstant">udp</span>), io:format(<span class="synConstant">&quot;SIZEOF_SOCKEADDR: </span><span class="synSpecial">~p~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synPreProc">?SIZEOF_SOCKADDR</span><span class="synSpecial">]</span>), <span class="synConstant">ok</span> <span class="synStatement">=</span> procket:setsockopt(<span class="synIdentifier">FD</span>, <span class="synConstant">'SOL_SOCKET'</span>, <span class="synConstant">'SO_REUSEPORT'</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">1</span>:<span class="synConstant">32</span><span class="synStatement">&gt;&gt;</span>), <span class="synIdentifier">Family</span> <span class="synStatement">=</span> procket:family(<span class="synConstant">inet</span>), io:format(<span class="synConstant">&quot;inet family </span><span class="synSpecial">~p~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synIdentifier">Family</span><span class="synSpecial">]</span>), <span class="synIdentifier">SA</span> <span class="synStatement">=</span> <span class="synStatement">&lt;&lt;</span>(procket:sockaddr_common(<span class="synConstant">inet</span>, <span class="synConstant">16</span>)):<span class="synConstant">2</span><span class="synStatement">/</span><span class="synType">bytes</span>, <span class="synPreProc">?PORT</span>:<span class="synConstant">16</span><span class="synStatement">/</span><span class="synType">integer-unsigned-big</span>, <span class="synConstant">192</span>, <span class="synConstant">168</span>, <span class="synConstant">0</span>, <span class="synConstant">1</span>, <span class="synConstant">0</span>:<span class="synConstant">64</span><span class="synStatement">&gt;&gt;</span>, io:format(<span class="synConstant">&quot;SA: </span><span class="synSpecial">~p~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synIdentifier">SA</span><span class="synSpecial">]</span>), <span class="synConstant">ok</span> <span class="synStatement">=</span> procket:bind(<span class="synIdentifier">FD</span>, <span class="synIdentifier">SA</span>), loop(<span class="synIdentifier">FD</span>). loop(<span class="synIdentifier">FD</span>) <span class="synStatement">-&gt;</span> <span class="synComment">%% recv a packet up to 512 bytes long, along with 512 bytes of control</span> <span class="synComment">%% data</span> <span class="synStatement">case</span> procket:recvmsg(<span class="synIdentifier">FD</span>, <span class="synConstant">512</span>, <span class="synConstant">0</span>, <span class="synConstant">512</span>, <span class="synPreProc">?SIZEOF_SOCKADDR</span>) <span class="synStatement">of</span> <span class="synSpecial">{</span><span class="synConstant">error</span>, <span class="synConstant">eagain</span><span class="synSpecial">}</span> <span class="synStatement">-&gt;</span> loop(<span class="synIdentifier">FD</span>); <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">Buf</span>, <span class="synIdentifier">Flags</span>, <span class="synIdentifier">CtrlData</span>, <span class="synIdentifier">From</span><span class="synSpecial">}</span> <span class="synStatement">-&gt;</span> io:format(<span class="synConstant">&quot;Buffer </span><span class="synSpecial">~p</span><span class="synConstant">, From </span><span class="synSpecial">~p</span><span class="synConstant">, Ctrldata </span><span class="synSpecial">~p</span><span class="synConstant"> Flags </span><span class="synSpecial">~p~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synIdentifier">Buf</span>, <span class="synIdentifier">From</span>, <span class="synIdentifier">CtrlData</span>, <span class="synIdentifier">Flags</span><span class="synSpecial">]</span>), <span class="synComment">%% echo the packet back, but set the destination address to the</span> <span class="synComment">%% 'from' of the previous packet, and send the previous message's</span> <span class="synComment">%% control data so that the source address is set to the</span> <span class="synComment">%% destination address of the previous packet</span> <span class="synConstant">ok</span> <span class="synStatement">=</span> procket:sendmsg(<span class="synIdentifier">FD</span>, <span class="synIdentifier">Buf</span>, <span class="synConstant">0</span>, <span class="synIdentifier">CtrlData</span>, <span class="synIdentifier">From</span>), loop(<span class="synIdentifier">FD</span>) <span class="synStatement">end</span>. sizeof(<span class="synConstant">sockaddr</span>) <span class="synStatement">-&gt;</span> <span class="synStatement">case</span> os:type() <span class="synStatement">of</span> <span class="synSpecial">{</span><span class="synConstant">unix</span>,<span class="synConstant">sunos</span><span class="synSpecial">}</span> <span class="synStatement">-&gt;</span> <span class="synConstant">32</span>; <span class="synSpecial">{</span><span class="synConstant">unix</span>,<span class="synIdentifier">_</span><span class="synSpecial">}</span> <span class="synStatement">-&gt;</span> <span class="synConstant">28</span> <span class="synStatement">end</span>. </pre><p>検索しまくっていろいろブックマークをしまくったけど、大半、知識不足で理解できなかった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p><a href="https://github.com/msantos/procket/issues/27">https://github.com/msantos/procket/issues/27</a></p><p>どうも、procketの作者さん自身が答えてくれているらしいが、IP4での接続周りは、これで解消できました。</p><p>あとは、あんまり弄ってません。でも、2日掛かりました。</p><p>さて、自分が分かってない部分。</p><p>SAの変数で扱っている関数、procket:sockaddr_common、0:64</p><p>recvmsg, sendmsgの詳しい動き、sockaddrとかいうアトムとか・・・</p><p>'SOL_SOCKET', 'SO_REUSEPORT'とか、ちんぷんかんぷん。<br /> <a href="http://umezawa.dyndns.info/wordpress/?p=2609">http://umezawa.dyndns.info/wordpress/?p=2609</a><br /> より、ヒントをもらって、書いたけど、分かってないです。</p><p>(´ヘ`;)ウーム…情けない。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/TCP">TCP</a>周りは、ちゃんと勉強しないと駄目ですな。</p> factory-g mongodb-erlang + cowboy 情報なさ過ぎ hatenablog://entry/17680117127148982567 2018-12-16T16:47:19+09:00 2019-05-20T06:00:07+09:00 題名の通り。不人気言語は分かるけど、海外のサイトでも見つからんとか、どうなってんの。と言うことで、いろいろ分かった備忘録。まずは、Erlangとmongodbのドライバは、今の所mongodb-erlangがグーグル様での人気上位らしい。 https://github.com/comtihon/mongodb-erlangその他もあって、嘗て、mongopoolを使っていたのだけれど、更新をやってないらしく、諦める。 https://github.com/hachreak/mongopool後者は、SQLのJoinぽい事が簡単にできた記憶があるのだが、仕方ない。そして、Google様ご推奨の方… <p>題名の通り。</p><p>不人気言語は分かるけど、海外のサイトでも見つからんとか、どうなってんの。</p><p>と言うことで、いろいろ分かった備忘録。</p><p>まずは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>とmongodbのドライバは、今の所mongodb-<a class="keyword" href="http://d.hatena.ne.jp/keyword/erlang">erlang</a>がグーグル様での人気上位らしい。<br /> <a href="https://github.com/comtihon/mongodb-erlang">https://github.com/comtihon/mongodb-erlang</a></p><p>その他もあって、嘗て、mongopoolを使っていたのだけれど、更新をやってないらしく、諦める。<br /> <a href="https://github.com/hachreak/mongopool">https://github.com/hachreak/mongopool</a></p><p>後者は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>のJoinぽい事が簡単にできた記憶があるのだが、仕方ない。</p><p>そして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>様ご推奨の方はというと、これまたReadmeがしょぼくて、上手く動かない。取り敢えず、以下のようにしないと動かない。</p> <pre class="code lang-erlang" data-lang="erlang" data-unlink> <span class="synIdentifier">MongoConfig</span> <span class="synStatement">=</span> <span class="synSpecial">[</span> <span class="synSpecial">{</span><span class="synConstant">auth_source</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;test&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synComment">%% ソースを見るとこれがdatabase</span> <span class="synSpecial">{</span><span class="synConstant">database</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;test&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synComment">%% ← ソースだとadminに固定?</span> <span class="synSpecial">{</span><span class="synConstant">login</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;mongo_user&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">password</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;password&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">w_mode</span>, <span class="synConstant">safe</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">host</span>, <span class="synConstant">&quot;host_name&quot;</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">port</span>, <span class="synConstant">27017</span><span class="synSpecial">}</span> <span class="synSpecial">]</span>, <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">Connection</span><span class="synSpecial">}</span> <span class="synStatement">=</span> mc_worker_api:connect(<span class="synIdentifier">MongoConfig</span>), <span class="synIdentifier">Collection</span> <span class="synStatement">=</span> <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;users&quot;</span><span class="synStatement">&gt;&gt;</span>, <span class="synIdentifier">Selection</span> <span class="synStatement">=</span> <span class="synSpecial">{}</span>, <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">Userdata</span><span class="synSpecial">}</span> <span class="synStatement">=</span> mc_worker_api:find(<span class="synIdentifier">Connection</span>, <span class="synIdentifier">Collection</span>, <span class="synIdentifier">Selection</span>), <span class="synIdentifier">Result</span> <span class="synStatement">=</span> mc_cursor:rest(<span class="synIdentifier">Userdata</span>), mc_cursor:close(<span class="synIdentifier">Userdata</span>), io:format(<span class="synConstant">&quot; users data </span><span class="synSpecial">~p</span><span class="synConstant"> </span><span class="synSpecial">~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synIdentifier">Result</span><span class="synSpecial">]</span>), </pre><p>auth_sourceって何よ!酷いよ。</p><p>次に、mongopool見たいな使い方だけど、Readmeを読むとmongocというライブラリを使えと来ている。素直に従うと、ちっとも動かない。結局以下のようにしないと、動かなかった。</p> <pre class="code lang-erlang" data-lang="erlang" data-unlink> <span class="synIdentifier">Seeds</span> <span class="synStatement">=</span> <span class="synSpecial">{</span><span class="synConstant">single</span>, <span class="synConstant">&quot;hostname:27017&quot;</span><span class="synSpecial">}</span>, <span class="synIdentifier">Options</span> <span class="synStatement">=</span> <span class="synSpecial">[{</span><span class="synConstant">name</span>, <span class="synConstant">mongopool</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">register</span>, <span class="synConstant">mongotopology</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">pool_size</span>, <span class="synConstant">2</span><span class="synSpecial">}</span>,<span class="synSpecial">{</span><span class="synConstant">rp_mode</span>, <span class="synConstant">primary</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">rp_tags</span>, <span class="synSpecial">[{</span><span class="synConstant">tag</span>,<span class="synConstant">1</span><span class="synSpecial">}]}]</span>, <span class="synIdentifier">WorkerOptions</span> <span class="synStatement">=</span> <span class="synSpecial">[</span> <span class="synSpecial">{</span><span class="synConstant">auth_source</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;test&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synComment">%% ソースを見るとこれがdatabase </span> <span class="synSpecial">{</span><span class="synConstant">database</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;test&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synComment">%% 将来切り替わるはず(今は、auth_source) </span> <span class="synSpecial">{</span><span class="synConstant">login</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;mongo_user&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">password</span>, <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;password&quot;</span><span class="synStatement">&gt;&gt;</span><span class="synSpecial">}</span>, <span class="synSpecial">{</span><span class="synConstant">w_mode</span>, <span class="synConstant">safe</span><span class="synSpecial">}</span> <span class="synSpecial">]</span>, <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">Topology</span><span class="synSpecial">}</span> <span class="synStatement">=</span> mongoc:connect(<span class="synIdentifier">Seeds</span>, <span class="synIdentifier">Options</span>, <span class="synIdentifier">WorkerOptions</span>), <span class="synIdentifier">Collection</span> <span class="synStatement">=</span> <span class="synStatement">&lt;&lt;</span><span class="synConstant">&quot;users&quot;</span><span class="synStatement">&gt;&gt;</span>, <span class="synIdentifier">Selection</span> <span class="synStatement">=</span> #<span class="synSpecial">{}</span>, <span class="synIdentifier">Projector</span> <span class="synStatement">=</span> #<span class="synSpecial">{}</span>, <span class="synSpecial">{</span><span class="synConstant">ok</span>, <span class="synIdentifier">Userdata</span><span class="synSpecial">}</span> <span class="synStatement">=</span> mongo_api:find(<span class="synIdentifier">Topology</span>, <span class="synIdentifier">Collection</span>, <span class="synIdentifier">Selection</span>, <span class="synIdentifier">Projector</span>), <span class="synIdentifier">Result</span> <span class="synStatement">=</span> mc_cursor:rest(<span class="synIdentifier">Userdata</span>), mc_cursor:close(<span class="synIdentifier">Userdata</span>), io:format(<span class="synConstant">&quot; users data </span><span class="synSpecial">~p</span><span class="synConstant"> </span><span class="synSpecial">~n</span><span class="synConstant">&quot;</span>, <span class="synSpecial">[</span><span class="synIdentifier">Result</span><span class="synSpecial">]</span>), </pre><p>Seedsは、Readmeだと複数設定しか書いていない。また、リストの方を一つにしても動かない。</p><p>mongoc:connectじゃないとgen_serverが起動しない。mongo_<a class="keyword" href="http://d.hatena.ne.jp/keyword/api">api</a>:connectは罠?</p><p>mongo_<a class="keyword" href="http://d.hatena.ne.jp/keyword/api">api</a>:findは、アリティが4しかない。最後の引数の説明が何処にもない。何これ?取り敢えず、エラーメッセージからマップ型と判断されたので、それをセット。何コレ?</p><p>Optionでnameを使っているが、何処で使うのか不明。Topologyと言う変数には、Pidが帰ってくるが、コレを保持しないとcowboyで使えない。何コレ。</p> factory-g erlydtl コンパイル erlydtl_preparser.hrl: no such file or directory hatenablog://entry/17680117127148982899 2018-12-02T17:36:18+09:00 2019-05-20T06:00:10+09:00 Procketの話題は、また別の機会に。erlydtlってのは、Django風のビューテンプレートって事らしい。https://github.com/erlydtl/erlydtlErlyDTL compiles Django Template Language to Erlang bytecode.と書いているが、実は、以前に使った事あり。しかし、どうしたことか、rebar.configに書いただけだと、コンパイルが通らない。ちなみにHexにあるのが、以下のような簡単な記述 {erl_opts, [debug_info]}. {deps, [ : {erlydtl, "0.12.1"}, :… <p>Procketの話題は、また別の機会に。</p><p>erlydtlってのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>風のビューテンプレートって事らしい。</p><p><a href="https://github.com/erlydtl/erlydtl">https://github.com/erlydtl/erlydtl</a></p><p>ErlyDTL compiles <a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a> Template Language to <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a> bytecode.</p><p>と書いているが、実は、以前に使った事あり。しかし、どうしたことか、rebar.configに書いただけだと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>が通らない。</p><p>ちなみにHexにあるのが、以下のような簡単な記述</p> <pre class="code lang-config" data-lang="config" data-unlink>{erl_opts<span class="synSpecial">,</span> <span class="synSpecial">[</span>debug_info<span class="synSpecial">]</span>}. {deps<span class="synSpecial">,</span> <span class="synSpecial">[</span>     : {erlydtl<span class="synSpecial">,</span> <span class="synConstant">&quot;0.12.1&quot;</span>}<span class="synSpecial">,</span>     : </pre><p>だけど、これじゃ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>エラーがでる。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>_build/default/plugins/erlydtl/src/include/erlydtl_preparser.hrl: no such file or directory <span class="synStatement">===&gt;</span> Compiling _build/default/plugins/erlydtl/src/erlydtl_parser.yrl failed </pre><p>結論から言うと、src/include/erlydtl_parser.yrl を作り、以下のページからソースをコピペする。</p><p><a href="https://github.com/erlydtl/erlydtl/blob/master/include/erlydtl_preparser.hrl">https://github.com/erlydtl/erlydtl/blob/master/include/erlydtl_preparser.hrl</a></p><p>なんでやろ?issueにも上がってないし、あっしの特有の問題でしょうかね。</p> factory-g Procket エコーサンプル 動いた でも、これじゃ駄目 hatenablog://entry/17680117127148983106 2018-11-24T14:44:20+09:00 2019-05-20T06:00:11+09:00 この内容は、実は、コンパイルが通った次の日に書いたもの。 なかなか、順風満帆な書きっぷりだが、実は、このサンプルは、将来に渡って使えないサンプルになります。 事前に知っていて、直ぐに解決できるわ!フフン♪とか思っていたのですが、そんなに甘くはなかったのでした。 ErlangでProcketを使っているのは、以下のブログがあったからgen_udp/tcp:send がボトルネックなときにやることさて、昼飯食ってウトウトしつつ、以下のサンプルを転記でて動かす。https://github.com/msantos/procket/blob/master/examples/echo.erlここで、問題… <p>この内容は、実は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>が通った次の日に書いたもの。<br /> なかなか、順風満帆な書きっぷりだが、実は、このサンプルは、将来に渡って使えないサンプルになります。<br /> 事前に知っていて、直ぐに解決できるわ!フフン♪とか思っていたのですが、そんなに甘くはなかったのでした。</p><br /> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>でProcketを使っているのは、以下のブログがあったから</p><p><a href="https://qiita.com/mururu/items/9b77e49b5b8a2815ceb6">gen_udp/tcp:send &#x304C;&#x30DC;&#x30C8;&#x30EB;&#x30CD;&#x30C3;&#x30AF;&#x306A;&#x3068;&#x304D;&#x306B;&#x3084;&#x308B;&#x3053;&#x3068;</a></p><p>さて、昼飯食ってウトウトしつつ、以下のサンプルを転記でて動かす。</p><p><a href="https://github.com/msantos/procket/blob/master/examples/echo.erl">https://github.com/msantos/procket/blob/master/examples/echo.erl</a></p><p>ここで、問題が発生する。基本通り、Supervisor経由で起動すると、gen_<a class="keyword" href="http://d.hatena.ne.jp/keyword/udp">udp</a>:openでコケてしまう。エラーログも、crash reportも何を訴えているのか異次元の主張。仕方無くググってみるが、これまた<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%C0%E8%C0%B8">Google先生</a>が無言に。</p><p>仕方無いので、shellから直接、コマンド叩いて起動する。</p><p>すんなり起動。</p><p>・・・・・アレ?</p><p>これ、どうやってテストすんの?<a class="keyword" href="http://d.hatena.ne.jp/keyword/telnet">telnet</a>できんの?最近調子が悪い<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%C0%E8%C0%B8">Google先生</a>に再び質問すると、ncとかいうツールを紹介される。</p><p>・・・・同じ端末だと、ポート競合するでしょ!</p><p>と言うことで、数ヶ月ぶりにFusionの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>を起動。</p><p>ncコマンドなんて入ってねー。</p><p>と言うことで以下のHPを参考にncを導入。</p><p><a href="http://www.gadgets-today.net/?p=3041">yum &#x3067; CentOS &#x306B; nc(netcat) &#x3092;&#x3055;&#x304F;&#x3063;&#x3068;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3059;&#x308B;&#x624B;&#x9806;</a></p><p>それじゃ、遠慮無くコマンドを入力して、エコーチャットをしてみると、おお、出来るじゃないですか。と言うことで第一段階はクリア?と言うことで。</p> factory-g Procket コンパイルできた 自己解決 hatenablog://entry/17680117127148983296 2018-11-09T23:22:55+09:00 2019-05-20T06:00:12+09:00 仕事中に、こそこそGoogle先生に聞いてみる。兎に角Procketのインストール関連の話が出てこない。仕方無いので、エラーログでGoogle先生に問い合わせる。すると、次のページにぶち当たる。Unable to compile on OS X El Captain 10.11.6 #1531Makefileの中身を変えろって事らしい。んで、今し方中身を確認。 UNAME_SYS := $(shell uname -s) ifeq ($(UNAME_SYS), Darwin) CC ?= cc CFLAGS ?= -O3 -std=c99 -arch x86_64 -finline-funct… <p>仕事中に、こそこそ<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%C0%E8%C0%B8">Google先生</a>に聞いてみる。</p><p>兎に角Procketのインストール関連の話が出てこない。仕方無いので、エラーログで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%C0%E8%C0%B8">Google先生</a>に問い合わせる。すると、次のページにぶち当たる。</p><p><a href="https://github.com/esl/MongooseIM/issues/1531">Unable to compile on OS X El Captain 10.11.6 #1531</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>の中身を変えろって事らしい。んで、今し方中身を確認。</p> <pre class="code lang-c" data-lang="c" data-unlink><span class="synStatement">UNAME_SYS</span> := $(shell uname -s) ifeq ($(UNAME_SYS), Darwin) CC ?= cc CFLAGS ?= -O3 -std=c99 -arch x86_64 -finline-functions -Wall -Wmissing-prototypes CXXFLAGS ?= -O3 -arch x86_64 -finline-functions -Wall LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress </pre><p>さっきのページそのまま。テンプレなんですかな。</p> <pre class="code lang-c" data-lang="c" data-unlink><span class="synStatement">UNAME_SYS</span> := $(shell uname -s) ifeq ($(UNAME_SYS), Darwin) CC ?= cc CFLAGS += -O3 -std=c99 -arch x86_64 -finline-functions -Wall -Wmissing-prototypes CXXFLAGS += -O3 -arch x86_64 -finline-functions -Wall LDFLAGS += -arch x86_64 -flat_namespace -undefined suppress </pre><p>そのまま?を+にする。</p> <pre class="code shell" data-lang="shell" data-unlink>$ rebar3 shell ===&gt; Verifying dependencies... ===&gt; Compiling procket /Applications/Xcode.app/Contents/Developer/usr/bin/make -f /Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/c_src/Makefile.ancillary make[1]: Nothing to be done for `all&#39;. cc -m64 -g -Wall -o /Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/priv/procket -L/Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/c_src procket_cmd.c -lancillary cc /Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/c_src/procket.o -L/usr/local/opt/openssl/lib -arch x86_64 -flat_namespace -undefined suppress -shared -L/Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/c_src -lancillary -L /Users/&lt;user_name&gt;/kerl/installs/21.1/lib/erl_interface-3.10.4/lib -lerl_interface -lei -o /Users/&lt;user_name&gt;/&lt;project_name&gt;/erlang/nanisyon/_build/default/lib/procket/c_src/../priv/procket.so ===&gt; Compiling jsone ===&gt; Compiling nanisyon Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] Eshell V10.1 (abort with ^G)</pre><p>あっさり、出来ちゃいマスタ。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/XCode">XCode</a>疑って済みません。本当に(o_ _)o</p><p>結局64bitのライブラリ?オブジェクト?が読み込めない?or見つからないというエラーなんだろうかね。</p> factory-g Procket コンパイルできねぇ 俺 困憊る hatenablog://entry/17680117127148983604 2018-11-08T00:27:09+09:00 2019-05-20T06:00:14+09:00 一通り、広く浅く、ネットワーク周りの知識を漁ったので、UDPを使った、デスクトップチャットでも作ろうかと考える。ここ最近、本ばかり読んで頭でっかち、いざ手を動かそうとすると、それまで出来ていた事が、すっぽり抜けて、なかなか前に進めない。とは言え、まずは、開発環境を整える事とした。サーバ側は、勿論Erlangでやってみるぞ、コノヤローと一人いきんで、rebar3をアップデート、さらに、Erlangの21.1を入れておく。久々のkerlだが、勿論、覚えているわけが無く、昔のログを見ながら何とか成功。備忘録最高。さて、取り敢えず、プロジェクトが無いと始まらないので、適当な名前でプロジェクトを作成。こ… <p>一通り、広く浅く、ネットワーク周りの知識を漁ったので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a>を使った、デスクトップチャットでも作ろうかと考える。ここ最近、本ばかり読んで頭でっかち、いざ手を動かそうとすると、それまで出来ていた事が、すっぽり抜けて、なかなか前に進めない。とは言え、まずは、開発環境を整える事とした。</p><p>サーバ側は、勿論<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>でやってみるぞ、コノヤローと一人いきんで、rebar3をアップデート、さらに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の21.1を入れておく。久々のkerlだが、勿論、覚えているわけが無く、昔のログを見ながら何とか成功。備忘録最高。</p><p>さて、取り敢えず、プロジェクトが無いと始まらないので、適当な名前でプロジェクトを作成。ここまでは、何とかなった。</p><p>問題は、ここから。rebar.configの中を以下のように編集。</p> <pre class="code shell" data-lang="shell" data-unlink>{deps, [ {jsone, {git, &#34;https://github.com/sile/jsone.git&#34;, {tag, &#34;master&#34;}}}, {procket, &#34;0.9.3&#34;} ]}.</pre><pre class="code shell" data-lang="shell" data-unlink>$ rebar3 shell ===&gt; Verifying dependencies... ===&gt; Compiling procket /Applications/Xcode.app/Contents/Developer/usr/bin/make -f /Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src/Makefile.ancillary make[1]: Nothing to be done for `all&#39;. cc -m64 -g -Wall -o /Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/priv/procket -L/Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src procket_cmd.c -lancillary cc /Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src/procket.o -L/usr/local/opt/openssl/lib -shared -L/Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src -lancillary -L /Users/&lt;user_name&gt;/kerl/installs/21.1/lib/erl_interface-3.10.4/lib -lerl_interface -lei -o /Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src/../priv/procket.so Undefined symbols for architecture x86_64: &#34;_enif_alloc_binary&#34;, referenced from: _nif_accept in procket.o _nif_read in procket.o _nif_ioctl in procket.o 〜 略 〜 ... &#34;_enif_release_binary&#34;, referenced from: _nif_read in procket.o _nif_recvmsg in procket.o _nif_recvfrom in procket.o &#34;_enif_release_resource&#34;, referenced from: _nif_alloc in procket.o &#34;_erl_errno_id&#34;, referenced from: _nif_fdrecv in procket.o _nif_close in procket.o _nif_accept in procket.o _nif_bind in procket.o _nif_connect in procket.o _nif_getsockname in procket.o _nif_getsockopt in procket.o ... ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [/Users/&lt;user_name&gt;/&lt;project_name&gt;/_build/default/lib/procket/c_src/../priv/procket.so] Error 1 ===&gt; Hook for compile failed!</pre><p>ちょっと、何コレ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%C0%E8%C0%B8">Google先生</a>も、何も答えてくれない。何故、どうして、こうなる。</p><p>怪しいのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/XCode">XCode</a>のmake当たりか?最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/XCode">XCode</a>のバージョン上がったし、疑わざるを得ない。</p><p>誰かぁ!ご存じの方いたら、優しく教えて下さい。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>: Mojave 10.14<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/XCode">XCode</a> 10.1<br /> rebar3 3.7.0-rc2+build.4175.ref83d01b52 on <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>/OTP 21 Erts 10.1<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/erlang">erlang</a> 21.1</p><p>ちなみに、jsoneは、「入るかな?」のお試しです。此方は、問題なく入るのに。</p><p>英語が分かれば、直でissue出したいけど、無理っす。</p> factory-g Stun Turn と諸々 hatenablog://entry/17680117127148983827 2018-10-08T15:14:08+09:00 2019-05-20T06:00:15+09:00 あ〜またもや数ヶ月。しかし、この間劇的な進展があったので、備忘録も含めて更新。まず、Erlang周りが大分解決。勿論、オールクリアなんて事は、ありません。・Socket通信 TCP通信 https://www.ymotongpoo.com/works/lyse-ja/ja/26_buckets_of_sockets.html#tcp 作者、訳とも凡人には、わかりにくい校正ながら、サンプルで何度も、反芻して何とか、いや何となく解決。 gen_tcpからgen_serverに発展とか、素人には、ウルトラ難しい。【参考】https://dmathieu.com/articles/developmen… <p>あ〜またもや数ヶ月。しかし、この間劇的な進展があったので、備忘録も含めて更新。</p><p>まず、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>周りが大分解決。勿論、オールクリアなんて事は、ありません。</p><p>・Socket通信 <a class="keyword" href="http://d.hatena.ne.jp/keyword/TCP">TCP</a>通信<br /> <a href="https://www.ymotongpoo.com/works/lyse-ja/ja/26_buckets_of_sockets.html#tcp">https://www.ymotongpoo.com/works/lyse-ja/ja/26_buckets_of_sockets.html#tcp</a><br /> 作者、訳とも凡人には、わかりにくい校正ながら、サンプルで何度も、反芻して何とか、いや何となく解決。<br /> gen_<a class="keyword" href="http://d.hatena.ne.jp/keyword/tcp">tcp</a>からgen_serverに発展とか、素人には、ウルトラ難しい。</p><p>【参考】<a href="https://dmathieu.com/articles/development/erlang-tcp-server/">https://dmathieu.com/articles/development/erlang-tcp-server/</a><br /> つーか、これなかったら、全く分からんかった。</p><p>これから、Swift4へつないで、チャットサンプル作成。こちらは、また纏めて備忘録作成。</p><p>・Socket通信 <a class="keyword" href="http://d.hatena.ne.jp/keyword/udp">udp</a>通信<br /> 何となく、分かった気がしたけど、NAT越えをしないと、普通は使えない事が分かる。しらんかったのか!と驚く事なかれ。しらんかったのです。この年で、ちょっとだけ、脳に皺増えました。ありがとうございます。</p><p>WebRTC <a href="https://gist.github.com/voluntas/975bfa230e513d146965">https://gist.github.com/voluntas/975bfa230e513d146965</a></p><p>ベクトルがぶっ飛び過ぎ!普通にNAT越え調べたら、こればっかり。</p><p>本買った。時雨堂さんって凄いのね。尊敬します。時雨堂さんご推奨本+α</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4897979587/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51MQpeRqFjL._SL160_.jpg" class="hatena-asin-detail-image" alt="WebRTC ブラウザベースのP2P技術" title="WebRTC ブラウザベースのP2P技術"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4897979587/hatena-blog-22/">WebRTC ブラウザベースのP2P技術</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Alan">Alan</a> B. Johnston,Daniel C. Burnett,内田直樹(監訳)</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%C3%A5%AF%A5%C6%A5%EC%A5%B3%A5%E0">リックテレコム</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/12/12</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4897979587/hatena-blog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873116767/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51x2sA8N%2BTL._SL160_.jpg" class="hatena-asin-detail-image" alt="ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化" title="ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873116767/hatena-blog-22/">ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> Ilya Grigorik,和田祐一郎,株式会社プログラミングシステム社</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A5%B8%A5%E3%A5%D1%A5%F3">オライリージャパン</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/05/16</li><li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li><li><a href="http://d.hatena.ne.jp/asin/4873116767/hatena-blog-22" target="_blank">この商品を含むブログ (4件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873118042/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51QmXZytvLL._SL160_.jpg" class="hatena-asin-detail-image" alt="Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術" title="Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873118042/hatena-blog-22/">Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 渋川よしき</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A5%B8%A5%E3%A5%D1%A5%F3">オライリージャパン</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2017/06/14</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4873118042/hatena-blog-22" target="_blank">この商品を含むブログ (4件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>高度過ぎて、「なるほど分からん状態」</p><p>但し、StunとTurnは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>で組んであるものを発見。</p><p>●STUN and TURN library for <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a> / Elixir <br /> <a href="https://github.com/processone/stun">https://github.com/processone/stun</a></p><p>rebar3でも動かせた。</p><p>あとは、コレをどうやって通信で使えば良いのか、サンプルを探しております。ヘッダーだけ、stunで取得したものを織り込んで、あとは、そのまま送りつけるの?カスタムヘッダーが云々あるけど、指定するんだろうかね。</p><p>(´ヘ`;)ウーム… 使いこなすには、まだ長い道のりが・・・。</p><p>●WebRTC<br /> lambdaclass/webrtc-server<br /> <a href="https://github.com/lambdaclass/webrtc-server">https://github.com/lambdaclass/webrtc-server</a></p><p>How to set up MongooseICE (ICE/TURN/STUN server)<br /> <a href="https://www.erlang-solutions.com/blog/how-to-set-up-mongooseice-ice-turn-stun-server.html">https://www.erlang-solutions.com/blog/how-to-set-up-mongooseice-ice-turn-stun-server.html</a></p><p>単純にWebRTCを実現するなら、上記の物でも良い?のかも。</p><p>したのは、有名なものらしい。</p> factory-g Cowboy REST hatenablog://entry/17680117127148984140 2018-07-30T23:35:10+09:00 2019-05-20T06:00:17+09:00 RESTのCRUDをどうやって作るか、そんな場合に見つけたのココ。https://github.com/dkuhlman/cowboy_rest_crudこの解説ページがあったのだけど、失念_| ̄|○これと、CowboyのUser's Guideで、なんとか動かせたっす。忘れそうなノウハウは、別口でまたカキコする予定。 <p>RESTの<a class="keyword" href="http://d.hatena.ne.jp/keyword/CRUD">CRUD</a>をどうやって作るか、そんな場合に見つけたのココ。</p><p><a href="https://github.com/dkuhlman/cowboy_rest_crud">https://github.com/dkuhlman/cowboy_rest_crud</a></p><p>この解説ページがあったのだけど、失念<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>これと、CowboyのUser's Guideで、なんとか動かせたっす。</p><p>忘れそうなノウハウは、別口でまたカキコする予定。</p> factory-g 浦島太郎 hatenablog://entry/17680117127148984304 2018-07-30T23:30:28+09:00 2019-05-20T06:00:18+09:00 ヤバイ Swift忘れてる。 しかも、Swift4って何?それから、持っているSwiftの本が全て陳腐化_| ̄|○ 買い直しですわ。それにしても、一年触ってないと、こんなにも、置いていかれるとは・・・。ここら当たりは、揃えるかなぁ。高いなぁ・・・。詳解 Swift 第4版作者: 荻原剛志出版社/メーカー: SBクリエイティブ発売日: 2017/12/26メディア: 単行本この商品を含むブログ (1件) を見る本気ではじめるiPhoneアプリ作り Xcode 9.x+Swift 4.x対応 (「ヤフー黒帯」シリーズ)作者: 西磨翁出版社/メーカー: SBクリエイティブ発売日: 2017/12/1… <p>ヤバイ<br /> Swift忘れてる。<br /> しかも、Swift4って何?</p><p>それから、持っているSwiftの本が全て陳腐化<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> 買い直しですわ。</p><p>それにしても、一年触ってないと、こんなにも、置いていかれるとは・・・。</p><p>ここら当たりは、揃えるかなぁ。高いなぁ・・・。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797395184/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51XOLbU0ujL._SL160_.jpg" class="hatena-asin-detail-image" alt="詳解 Swift 第4版" title="詳解 Swift 第4版"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797395184/hatena-blog-22/">詳解 Swift 第4版</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 荻原剛志</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SB%A5%AF%A5%EA%A5%A8%A5%A4%A5%C6%A5%A3%A5%D6">SBクリエイティブ</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2017/12/26</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4797395184/hatena-blog-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797394188/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51taAj6SNjL._SL160_.jpg" class="hatena-asin-detail-image" alt="本気ではじめるiPhoneアプリ作り Xcode 9.x+Swift 4.x対応 (「ヤフー黒帯」シリーズ)" title="本気ではじめるiPhoneアプリ作り Xcode 9.x+Swift 4.x対応 (「ヤフー黒帯」シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797394188/hatena-blog-22/">本気ではじめるiPhoneアプリ作り Xcode 9.x+Swift 4.x対応 (「ヤフー黒帯」シリーズ)</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 西磨翁</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SB%A5%AF%A5%EA%A5%A8%A5%A4%A5%C6%A5%A3%A5%D6">SBクリエイティブ</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2017/12/14</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li><li><a href="http://d.hatena.ne.jp/asin/4797394188/hatena-blog-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> factory-g Cowboyなら知っておくべき? hatenablog://entry/17680117127148984631 2018-07-03T14:05:17+09:00 2019-05-20T06:00:20+09:00 ●Erlang.org website Source code for the Erlang.org website. https://github.com/erlang/erlang-orgここには、夢が詰まっている・・・。勉強になったこと(素人丸出し) HTMLのミックスイン erlydtl ファイルのインクルード mixer src内のディレクトリ管理は、自由過ぎるぐらい自由 詳細は、気がむいたら <p>●<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>.org <a class="keyword" href="http://d.hatena.ne.jp/keyword/website">website</a><br /> Source code for the <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>.org <a class="keyword" href="http://d.hatena.ne.jp/keyword/website">website</a>.<br /> <a href="https://github.com/erlang/erlang-org">https://github.com/erlang/erlang-org</a></p><p>ここには、夢が詰まっている・・・。</p><p>勉強になったこと(素人丸出し)</p> <ul> <li>HTMLのミックスイン erlydtl</li> <li>ファイルのインクルード mixer</li> <li>src内の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ管理は、自由過ぎるぐらい自由</li> </ul><p>詳細は、気がむいたら</p> factory-g 備忘録注意事項 hatenablog://entry/17680117127148984788 2018-07-03T11:53:39+09:00 2019-05-20T06:00:21+09:00 さて、前回から二ヶ月。相変わらずの更新遅延。 飯喰うための仕事が、やたら忙しく当に、忙殺される日々、食中毒にやられ、足を捻挫し、スーツパンツを二本やられて、全くもって今年前半は、いろんな不幸に襲われた半年でした。(´ヘ`;)ウーム…本当に、不幸のオンパレードだった。さて、本日は、取引先にも出向かず、自宅のPCからまったり書き込みでございます。ここ、数ヶ月やってきたErlang備忘録を挙げて行こうかと思っております。それに先立ち、更新方針おば。まず、誰かにレクチャーするとか、チュートリアルとか、そんな気はさらさらござんせん。加えて、思いつき、思い込み、間違った解釈のオンパレードとなること請け合い… <p>さて、前回から二ヶ月。相変わらずの更新遅延。<br /> 飯喰うための仕事が、やたら忙しく当に、忙殺される日々、食中毒にやられ、足を捻挫し、スーツパンツを二本やられて、全くもって今年前半は、いろんな不幸に襲われた半年でした。</p><p>(´ヘ`;)ウーム…本当に、不幸のオンパレードだった。</p><p>さて、本日は、取引先にも出向かず、自宅のPCからまったり書き込みでございます。ここ、数ヶ月やってきた<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>備忘録を挙げて行こうかと思っております。</p><p>それに先立ち、更新方針おば。</p><p>まず、誰かにレクチャーするとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>とか、そんな気はさらさらござんせん。加えて、思いつき、思い込み、間違った解釈のオンパレードとなること請け合いです。見つけられた方は、優しくコメントして下さい。厳しい言葉で書かれると、おっさん、落ち込みます。</p><p>備忘録は、あくまで、私のノート代わりでございます。過大な期待はしないで見て下さい。</p> factory-g 追記 hatenablog://entry/17680117127148985065 2018-05-03T11:40:50+09:00 2019-05-20T06:00:22+09:00 アクセスカウンターが14万超えてる(゚д゚)! なに、何があった? 書き手が何もしてないのに、周りが動いているのね。 多分、iOSのマップアイコンの記事かなぁ。 また、Swift周りも弄りたいなぁと思っております。予定は、未定 なのです。 <p>アクセスカウンターが14万超えてる(゚д゚)!<br /> なに、何があった?<br /> 書き手が何もしてないのに、周りが動いているのね。<br /> 多分、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>のマップアイコンの記事かなぁ。<br /> また、Swift周りも弄りたいなぁと思っております。</p><p>予定は、未定 なのです。</p> factory-g 更新開始 hatenablog://entry/17680117127148984943 2018-05-03T11:30:55+09:00 2019-05-20T06:00:22+09:00 久々更新させて貰います。最近は、以下の通り 仕事に忙殺される いろいろ停滞 前回Elixirやるって書いて、半年塩漬け 無駄に年をとる やっと、客観的にまわりが見えて来た。スマン(o_ _)o、Erlangちょっとづつ、頑張ってみてた。何故か、諦められんかった。 頭が悪い事を再認識した。 でも、本当に、しつこく、やってた。 アホで、しつこい、最悪の組み合わせ。 でも、いろいろちょっと、分かる部分が出てきた。なんで、Erlangの備忘録を残す為に、またアップしていきます。 <p>久々更新させて貰います。最近は、以下の通り</p> <ul> <li>仕事に忙殺される</li> <li>いろいろ停滞</li> <li>前回Elixirやるって書いて、半年塩漬け</li> <li>無駄に年をとる</li> </ul><p>やっと、客観的にまわりが見えて来た。</p><p>スマン(o_ _)o、<span class="deco" style="font-weight:bold;"><span class="deco" style="color:#FF0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>ちょっとづつ、頑張ってみてた</span></span>。</p><p>何故か、諦められんかった。<br /> 頭が悪い事を再認識した。<br /> でも、本当に、しつこく、やってた。<br /> アホで、しつこい、最悪の組み合わせ。<br /> でも、いろいろちょっと、分かる部分が出てきた。</p><p>なんで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の備忘録を残す為に、またアップしていきます。</p> factory-g そして、Elixirへ hatenablog://entry/17680117127148985189 2017-07-24T21:31:12+09:00 2019-05-20T06:00:23+09:00 またもや、久々の更新。 ちょっと、寄り道の仕事が、いつの間にか二年目となり、ほぼサラリーマン状態に。 やっとこさ、最近、自宅仕事と半々にできて、こうやって愚痴と反省文を書いております。さて、表題についてですが、実は、前回更新時は、4月だから、ずっと、ずっとErlangで粘ったんですが、ソケット周りで、ついに挫折、Elixirに乗り換えますた。 Erlangの何に挫折したかと言うと、Socket.ioのような、room処理やnamespaceとか、出来そうで出来ない_| ̄|○ ところが、Elixirだと、Channelという仕組みで、似たような事がサクッとできちまう。あっさり、本当にあっさり出来… <p>またもや、久々の更新。<br /> ちょっと、寄り道の仕事が、いつの間にか二年目となり、ほぼサラリーマン状態に。<br /> やっとこさ、最近、自宅仕事と半々にできて、こうやって愚痴と反省文を書いております。</p><p>さて、表題についてですが、実は、前回更新時は、4月だから、ずっと、ずっと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>で粘ったんですが、ソケット周りで、ついに挫折、Elixirに乗り換えますた。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の何に挫折したかと言うと、Socket.ioのような、room処理やnamespaceとか、出来そうで出来ない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> ところが、Elixirだと、Channelという仕組みで、似たような事がサクッとできちまう。</p><p>あっさり、本当にあっさり出来ました。多分<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>でも、出来るのでしょうが、日本語以外の説明を理解するのは、時間が掛かりすぎるっす。</p><p>と言うことで、Elixirで、これから、アップしていきます。</p> factory-g 結局理解できたのは、アレのおかげでした hatenablog://entry/17680117127148985315 2017-04-01T18:14:52+09:00 2019-05-20T06:00:24+09:00 またもや、更新間隔があきました。 rebar3の続きの備忘録書こうとしたんですが、ちょっと寄り道します。すごいErlangゆかいに学ぼう!作者: Fred Hebert,山口能迪出版社/メーカー: オーム社発売日: 2014/07/04メディア: 単行本(ソフトカバー)この商品を含むブログ (10件) を見るで、gen_serverなり、gen_fsmなり、gen_eventの説明があり、それこそ、何度読んでも???な部分でしたが、 http://erlangworld.web.fc2.com/otp/gen_server.html を仕事中によんだら、簡単に理解できました。 迷書なので、「お… <p>またもや、更新間隔があきました。<br /> rebar3の続きの備忘録書こうとしたんですが、ちょっと寄り道します。<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274069125/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51lkQxVnXXL._SL160_.jpg" class="hatena-asin-detail-image" alt="すごいErlangゆかいに学ぼう!" title="すごいErlangゆかいに学ぼう!"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274069125/hatena-blog-22/">すごいErlangゆかいに学ぼう!</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> Fred Hebert,山口能迪</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%E0%BC%D2">オーム社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/07/04</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4274069125/hatena-blog-22" target="_blank">この商品を含むブログ (10件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>で、gen_serverなり、gen_fsmなり、gen_eventの説明があり、それこそ、何度読んでも???な部分でしたが、<br /> <a href="http://erlangworld.web.fc2.com/otp/gen_server.html">http://erlangworld.web.fc2.com/otp/gen_server.html</a><br /> を仕事中によんだら、簡単に理解できました。<br /> 迷書なので、「おまえの理解力がない」といわれると、「はぁそうですね(棒)」と言うほかないんですが、私のように理解力にない人間には、超難解本ですわ。</p><p>さて、前回の続きですが、ちょっと以下の点で、変更をしました。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/PostgreSQL">PostgreSQL</a>のコネクションプールですが、沢山のOTPがあって、いろいろ試して見ました。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a> Postgres Connection Pool with Episcina<br /> devinus/poolboy<br /> epgsql/pgapp<br /> くるしんで、全部ためしたのですが、その内の一つの備忘録を次回に。</p> factory-g Erlangとrebar3と読み込まれないsys.config hatenablog://entry/17680117127148985489 2017-03-12T23:55:17+09:00 2019-05-20T06:00:26+09:00 昨日は、夕方からの飲み、Erlangの学習が、ちっとも進まない_| ̄|○というか、兎に角、情報がない。 いや、正確にいうと、書いて有る事をやっても動かない。 もっと正確にいうと、なにか知識が足りない_| ̄|○ 堂々巡りを数日繰り返し、絶望と希望を行ったり来たり、はや、前回更新から一ヶ月、遠回りにも程がある。 愚痴を含めて書きたいけど、ここは、備忘録のみ。 rebar3 Erlang チーム開発 rebar3でOTPアプリの雛型を作る ありがとう、当に救いの主でございました。 $ rebar3 new release name=アプリケーション名 author_name="作者" release… <p>昨日は、夕方からの飲み、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の学習が、ちっとも進まない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>というか、兎に角、情報がない。<br /> いや、正確にいうと、書いて有る事をやっても動かない。<br /> もっと正確にいうと、なにか知識が足りない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> 堂々巡りを数日繰り返し、絶望と希望を行ったり来たり、はや、前回更新から一ヶ月、遠回りにも程がある。<br /> 愚痴を含めて書きたいけど、ここは、備忘録のみ。</p> <div class="section"> <h4>rebar3</h4> <p><a href="http://qiita.com/haminiku/items/a78816c9e88cf46a0853">Erlang &#x30C1;&#x30FC;&#x30E0;&#x958B;&#x767A; rebar3&#x3067;OTP&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x96DB;&#x578B;&#x3092;&#x4F5C;&#x308B;</a><br /> ありがとう、当に救いの主でございました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ rebar3 new release <span class="synIdentifier">name</span>=アプリケーション名 <span class="synIdentifier">author_name</span>=<span class="synStatement">&quot;</span><span class="synConstant">作者</span><span class="synStatement">&quot;</span> </pre><p>releaseがミソ、何がミソって、config/sys.config、config/<a class="keyword" href="http://d.hatena.ne.jp/keyword/vm">vm</a>.args が出来る。<br /> releaseを付けないと、出来ない。前者のconfig/sys.configが、出来ないのが、ずーーーと謎だった。</p> </div> <div class="section"> <h4>実行</h4> <p>学習したのは、2つの方法。</p> <div class="section"> <h5>releaseを動かす</h5> <pre class="code lang-sh" data-lang="sh" data-unlink>$ rebar3 compile $ rebar3 release $ <span class="synStatement">cd</span> _build/default/rel/アプリケーション名 $ ./bin/アプリケーション名 <span class="synStatement">start</span> $ ./bin/アプリケーション名 <span class="synStatement">stop</span> </pre><p>但し、自分の環境では、上手くいきませんでした。多分この辺は、<br /> <a href="http://qiita.com/mookjp/items/366b5b646b2d7b1ac150">rebar3&#x3067;&#x74B0;&#x5883;&#x6BCE;&#x306E;&#x5909;&#x6570;&#x8A2D;&#x5B9A;&#x3092;&#x9069;&#x7528;&#x3059;&#x308B;</a><br /> が、関係しそうな感じ。後ほど、気力がもどったら、検証しますわ。</p> </div> <div class="section"> <h5>erlから動かす</h5> <pre class="code lang-sh" data-lang="sh" data-unlink>$ erl <span class="synSpecial">-pa</span> ebin _build/default/lib/*/ebin <span class="synSpecial">-s</span> アプリケーション名 <span class="synSpecial">-noshell</span> %% config/sys.configを読む必要があるなら↓ $ erl <span class="synSpecial">-pa</span> ebin _build/default/lib/*/ebin <span class="synSpecial">-s</span> アプリケーション名 <span class="synSpecial">-noshell</span> <span class="synSpecial">-config</span> config/sys.config </pre><p>この二段目が、全然かららんかった。<br /> どこかのページにあったのに、失念(つд⊂)エーン<br /> なぜ、sys.configに拘るかというと、lagerや<a class="keyword" href="http://d.hatena.ne.jp/keyword/postgresql">postgresql</a>のコネクションプールのモジュール設定を書かないといけないからでした。そう、以下のモジュールのせいです。<br /> <a href="http://blog.erlware.org/erlang-postgres-connection-pool-with-episcina/">Erlang Postgres Connection Pool with Episcina</a><br /> 次回は、一ヶ月、苦しめ続けた、↑のモジュールについて、怒りの備忘録。</p> </div> </div> factory-g Erlang rebar3とcowboyと学ばない私 hatenablog://entry/17680117127148985700 2017-02-12T23:53:49+09:00 2019-05-20T06:00:27+09:00 土日があっちゅうまにすぎっちまいました。 やった事纏め rebar3のインストール https://www.rebar3.org/docs/getting-started このまんま。 但し、PATHは、 $ ./rebar3 local install に出てくる、所にちゃんと通すこと。これ忘れると、動きませぬ。 Cowboyを動かす rebar3のページには、cowboyの組み込み方だけ、書いてあって、動かすサンプルは、無い模様。 ここで、数時間消費。 以下のページをはっケーン http://qiita.com/yu-sa/items/c33e9c155177a7e01f48#rebar3… <p>土日があっちゅうまにすぎっちまいました。</p> <div class="section"> <h4>やった事纏め</h4> <p>rebar3のインストール<br /> <a href="https://www.rebar3.org/docs/getting-started">https://www.rebar3.org/docs/getting-started</a><br /> このまんま。<br /> 但し、PATHは、</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ ./rebar3 <span class="synStatement">local</span> install </pre><p>に出てくる、所にちゃんと通すこと。これ忘れると、動きませぬ。</p> </div> <div class="section"> <h4>Cowboyを動かす</h4> <p>rebar3のページには、cowboyの組み込み方だけ、書いてあって、動かすサンプルは、無い模様。<br /> ここで、数時間消費。<br /> 以下のページをはっ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B1%A1%BC%A5%F3">ケーン</a><br /> <a href="http://qiita.com/yu-sa/items/c33e9c155177a7e01f48#rebar3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">http://qiita.com/yu-sa/items/c33e9c155177a7e01f48#rebar3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6</a><br /> まず、先のrebar3のサンプルの延長で作成すると、何をどうやっても動かない。</p> <ul> <li>cowboyのバージョンが違うのはけーん</li> </ul><p>rebar.configを修正。これでも、うごかない。</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>のバージョンがサンプルと違うのはけーん</li> </ul><p>といっても、使っているは、19.1、普通大丈夫だろ、と思いつつも、先のHPのバージョン17.5をインストール。<br /> 動かぬ。しかも、mapが云々という。<br /> どうも、バージョンは、18以降でないと駄目らしい。</p><p>18.3をインストールする。</p><p><span class="deco" style="font-weight:bold;">それでも、動かぬ。(;^ν^)<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%B0%A4%CC%A4%CC">ぐぬぬ</a>…</span><br /> 先のページのサンプルが<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>にあるというので、クローンして実行してみる。</p><p><span class="deco" style="font-weight:bold;">動く、こいつ動くぞ。</span></p><p>真似して、書き換えても動かぬ。以下のようなエラーになる。</p> <pre class="code" data-lang="" data-unlink>=ERROR REPORT==== 12-Feb-2017::17:33:10 === Ranch listener http had connection process started with cowboy_protocol:start_link/4 at &lt;0.159.0&gt; exit with reason: {[{reason,undef},{mfa,{myapp_handler,init,3}},.....</pre><p>もう、17:33とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> 飯喰ってくる。<br /> <span class="deco" style="font-size:x-large;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/WRC">WRC</a>見る。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E8%A5%BF">トヨタ</a>おめでとう!!イェ━━━━━ヽ( ゚Д゚)人(゚Д゚ )ノ━━━━━━イ!!</span></p><p>ほろ酔いで、再度、rebar3で、新しいプロジェクトを作成する。</p><p>動いた。</p> </div> <div class="section"> <h4>結論</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>すると、いろいろロックファイルが出来たり、ビルドファイルが出来たり、なんやかんや、ややこしい風になるらしい。散々、_build<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを削除してやってみたけど、結局、プロジェクトから作り直しが、正解みたい。<br /> 面倒だ。</p><p>本の内容で、スーパーバイザーなど、うっすらした記憶にあるものが、出てきたけど・・・、まだ、雲をつかむ感じ。<br /> もあ、サンプル。</p> </div> factory-g すごいErlangゆかいに学ぼう! 読了 hatenablog://entry/17680117127148985873 2017-02-05T14:25:28+09:00 2019-05-20T06:00:28+09:00 アーなんつーかそのーわし、頭悪いんで、これ読んで、なんか作れる人、尊敬します。まぁ、海外本というか、外人が書いた本って、文字だらけで、表や図にまとめる意識を、なはから放棄してるので、頭の悪いワシには、超難解です。 なんせ、数十ページ前の定義の一文が、なんの説明もなく使われるもんで(simple_one_for_oneやら他多数)、輪を掛けて難解にさせます。 いやぁ、頭の良い人っつーのは、こういうのが入門本なんですなぁ、尊敬します。「もっと大事な事おしえろ!!」(Y.O)私の感想でございました。とはいえ、Erlangでの、開発方法や、どんな書き方があるのかは、わかりますた。 ネットでサンプル漁っ… <p>アーなんつーかそのー</p><p><span class="deco" style="color:#FF0000;font-size:x-large;">わし、頭悪いんで、これ読んで、なんか作れる人、尊敬します。</span></p><p>まぁ、海外本というか、外人が書いた本って、文字だらけで、表や図にまとめる意識を、なはから放棄してるので、頭の悪いワシには、超難解です。<br /> なんせ、数十ページ前の定義の一文が、なんの説明もなく使われるもんで(simple_one_for_oneやら他多数)、輪を掛けて難解にさせます。<br /> いやぁ、頭の良い人っつーのは、こういうのが入門本なんですなぁ、尊敬します。</p><p><span class="deco" style="color:#0000FF;font-size:xx-large;">「もっと大事な事おしえろ!!」(Y.O)</span></p><p>私の感想でございました。</p><p>とはいえ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>での、開発方法や、どんな書き方があるのかは、わかりますた。<br /> ネットでサンプル漁って、いよいよ、何か作ってみようかと。</p><p>HTTP系だと、Cowboyっていうのが有るみたいですね。それとrebar3っていうツールも必須みたいですし。<br /> これから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の備忘録だらけになる悪寒。</p> factory-g Erlang ちっとも進まない件について hatenablog://entry/17680117127148985988 2016-12-27T01:12:37+09:00 2019-05-20T06:00:29+09:00 前の記事から三ヶ月。 以下の本を購入すごいErlangゆかいに学ぼう!作者: Fred Hebert,山口能迪出版社/メーカー: オーム社発売日: 2014/07/04メディア: 単行本(ソフトカバー)この商品を含むブログ (10件) を見るプログラミングErlang作者: Joe Armstrong,榊原一矢出版社/メーカー: オーム社発売日: 2008/02/23メディア: 単行本(ソフトカバー)購入: 8人 クリック: 284回この商品を含むブログ (97件) を見る外人が書く、本は答えが遠いっす。訳者が天才なのか、カスなのか、兎に角くどい。常人なら、本とっくに破り捨てるレベルです。ただ… <p>前の記事から三ヶ月。<br /> 以下の本を購入<div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274069125/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51lkQxVnXXL._SL160_.jpg" class="hatena-asin-detail-image" alt="すごいErlangゆかいに学ぼう!" title="すごいErlangゆかいに学ぼう!"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274069125/hatena-blog-22/">すごいErlangゆかいに学ぼう!</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> Fred Hebert,山口能迪</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%E0%BC%D2">オーム社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/07/04</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4274069125/hatena-blog-22" target="_blank">この商品を含むブログ (10件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067149/hatena-blog-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51bZh24YhqL._SL160_.jpg" class="hatena-asin-detail-image" alt="プログラミングErlang" title="プログラミングErlang"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067149/hatena-blog-22/">プログラミングErlang</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> Joe Armstrong,榊原一矢</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%E0%BC%D2">オーム社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2008/02/23</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><span class="hatena-asin-detail-label">購入</span>: 8人 <span class="hatena-asin-detail-label">クリック</span>: 284回</li><li><a href="http://d.hatena.ne.jp/asin/4274067149/hatena-blog-22" target="_blank">この商品を含むブログ (97件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div>外人が書く、本は答えが遠いっす。訳者が天才なのか、カスなのか、兎に角くどい。常人なら、本とっくに破り捨てるレベルです。ただ、オライ●ーで鍛えられた、強靱な私の精神は、負けませぬ・・・って、本当に折れそうです。もう本当重要なことだけ書いてくれよっカーッ(゚Д゚≡゚д゚)、ペッ!<br /> 手強い(´ヘ`;)ウーム… 本が!</p> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/Emacs">Emacs</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>の備忘録</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%B7%A5%E3">スペシャ</a>ルサンクス!!<br /> <a href="http://qiita.com/Satoshi_Hara/items/8071a6dbf708373a2253">http://qiita.com/Satoshi_Hara/items/8071a6dbf708373a2253</a><br /> 環境は、<br /> <a href="http://qiita.com/tatsuya6502/items/f15da8ea6e793c5038a2">http://qiita.com/tatsuya6502/items/f15da8ea6e793c5038a2</a><br /> <a href="http://www.lambdacat.com/post-modern-emacs-setup-for-erlang/">http://www.lambdacat.com/post-modern-emacs-setup-for-erlang/</a></p><p>環境構築時は、バージョンを 18.x にすべし。19.x は、エラーになる。</p><p>やっとこさ、命令の補完とか出来るようになった。<br /> それにしても、やっぱ、日本でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>ガッツリやってる人沢山いますね。<br /> 凄いっす。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>とかのお手軽感ゼロ、goのような割り切り感ゼロ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JAVA">JAVA</a>のような何でもかんでも取込まっせ感もなし。<br /> なんもかも、新鮮で難解でございます。<br /> 頑張ります。</p> </div> factory-g Erlang インストール hatenablog://entry/17680117127148986127 2016-10-29T22:32:50+09:00 2019-05-20T06:00:31+09:00 訳あってErlangを弄らねばならなくなった。 なので、インストール備忘録。以下のページを参考にした。 OSX 10.10 に kerl で Erlang 17.5 をインストールし, crypto:start/0 を成功させる基本的に、↑のページの内容で大丈夫。 gccとopensslを必ず新しいものを入れていないと、マジでコンパイルがこけます。 それと、コンパイルが、めちゃめちゃ長い。 何回も失敗すると、それだけで1時間ぐらい簡単に吹っ飛びます。一カ所だけ気をつけるのは、 $ kerl kerl install 17.5 /path/to/erlang/17.5 ↓ $ kerl inst… <p>訳あって<a class="keyword" href="http://d.hatena.ne.jp/keyword/Erlang">Erlang</a>を弄らねばならなくなった。<br /> なので、インストール備忘録。</p><p>以下のページを参考にした。<br /> <a href="http://qiita.com/cooldaemon/items/685b1ef71978614ba7a2">OSX 10.10 &#x306B; kerl &#x3067; Erlang 17.5 &#x3092;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3057;, crypto:start/0 &#x3092;&#x6210;&#x529F;&#x3055;&#x305B;&#x308B;</a></p><p>基本的に、↑のページの内容で大丈夫。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/gcc">gcc</a>とopensslを必ず新しいものを入れていないと、マジで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>がこけます。<br /> それと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>が、めちゃめちゃ長い。<br /> 何回も失敗すると、それだけで1時間ぐらい簡単に吹っ飛びます。</p><p>一カ所だけ気をつけるのは、</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ kerl kerl install 17.5 /path/to/erlang/17.5 ↓ $ kerl install 17.5 /path/to/erlang/17.5 </pre><p>とkerlを一つ減らす事。</p><p>あとは、derenvと連動させる。<br /> <a href="http://joedevivo.com/2016/10/06/e-too-many-erlangs.html">ETOOMANYERLANGS: Kerl vs Erln8</a><br /> この下半分を参考にすること。<br /> 上半分を信じると、半日潰されるぞ!!(体験者)<br /> どうも、~/.kerlrcで設定すると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>のコンフィグが、上手く設定できないらしい<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>と言うことで、erlで起動確認できました。</p> factory-g MacOS Sierra に、GVM で go1.7.2 入れたった hatenablog://entry/17680117127148986263 2016-10-18T01:10:50+09:00 2019-05-20T06:00:32+09:00 久々の更新でございます。 仕事に忙殺されています。簡単な仕事っていったじゃん(つд⊂)エーンむくむくと、開発意欲湧いてます。 最近は、慣れないSwiftで、通信とかぶっこくプログラム書いたり、Expressで、ソケットしたり、エッジなんだけど、どうもノリが悪いっす。 まず、Swiftは、日が浅いので、手に付かない_| ̄|○ 調べる時間が八割。 Expressは、書いてて面白くないっす。非同期って節操なさすぎる(`ヘ´) プンプン。コーディング量が増えるばっか。やっぱ、Revelだよなぁ!!ってSocketでやられた事、棚に上げて、再び蒸し返そうとしております。 それで、半年ぐらいほっておいたら… <p>久々の更新でございます。<br /> 仕事に忙殺されています。簡単な仕事っていったじゃん(つд⊂)エーン</p><p>むくむくと、開発意欲湧いてます。<br /> 最近は、慣れないSwiftで、通信とかぶっこくプログラム書いたり、Expressで、ソケットしたり、エッジなんだけど、どうもノリが悪いっす。<br /> まず、Swiftは、日が浅いので、手に付かない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a> 調べる時間が八割。<br /> Expressは、書いてて面白くないっす。非同期って節操なさすぎる(`ヘ´) プンプン。コーディング量が増えるばっか。</p><p>やっぱ、Revelだよなぁ!!ってSocketでやられた事、棚に上げて、再び蒸し返そうとしております。<br /> それで、半年ぐらいほっておいたら、goのバージョン、鬼上がりしてました。<br /> go1.6だったのに、go1.7.2まで来てるではありませんか。</p><p>と言うことで、GVMから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%B3">インスコ</a>こいてみたら、入らん工エエェェ(´д`)ェェエエ工<br /> ッテナンデヤネン┌(`Д´)ノ)゚∀゚)<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B0%A5%B0%A4%EB">ググる</a>と、<br /> <a href="http://qiita.com/TO-ON_Kikaku/items/431ebdd8292cbfca999c">GO&#x8A00;&#x8A9E;&#x306E;1.6.3&#x3088;&#x308A;&#x524D;&#x306E;&#x30D0;&#x30FC;&#x30B8;&#x30E7;&#x30F3;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x4EBA;&#x306F; MacOS Sierra&#x306B;&#x30A2;&#x30C3;&#x30D7;&#x30B0;&#x30EC;&#x30FC;&#x30C9;&#x3057;&#x306A;&#x3044;&#x307B;&#x3046;&#x304C;&#x3044;&#x3044;&#x8A71;</a><br /> なにそれ、どうしてそうなった。</p><p>今のままじゃどうにもならんちゅうことかいな。<br /> んで、いろいろ試行錯誤して以下の方法で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%B3">インスコ</a>できたますた。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ gvm install go1.7.1 <span class="synSpecial">-B</span> $ gvm use 1.7.1 Now using version go1.7.1 $ gvm install go1.7.2 </pre><p>サクッと書いてますが、実際は、試行錯誤して、試行錯誤して、GVM消したりしてもう、環境クリーンになりすぎました。</p> <ul> <li>Bのスイッチで、バイナリのインストールとの事です。</li> </ul><p>疲れた(´Д`)ハァ…</p> factory-g 自転車 の 買い換えで聞いたこと、思ったこと hatenablog://entry/17680117127148986426 2016-07-31T23:35:11+09:00 2019-05-20T06:00:33+09:00 なんと2ヶ月ぶりの更新でございます。 いろいろ、書きたいのですが、夜は早くねて朝早く起きるとか、無駄に健康的なサイクルで仕事させられています。 自分プロジェクトっぽい事もはじめたので、それも追々書き足していこうかと思ってます。今日、自転車を買い換えました。 古い自転車は実に6年乗り続け、遂に後ろブレーキが、逝かれてしまい、ガッツリにぎっても、制動すらしない状態に。加えて前後のタイヤも取り替えすべきとのご指摘で、一万越えの修理と相成りました。 それで、新車を買うこと決意したんですが、そこで自転車屋のおっさんが衝撃的な話をしてくれて、それをちょっと書き留めておこうかと。 今回買った自転車は、いまま… <p>なんと2ヶ月ぶりの更新でございます。<br /> いろいろ、書きたいのですが、夜は早くねて朝早く起きるとか、無駄に健康的なサイクルで仕事させられています。<br /> 自分プロジェクトっぽい事もはじめたので、それも追々書き足していこうかと思ってます。</p><p>今日、自転車を買い換えました。<br /> 古い自転車は実に6年乗り続け、遂に後ろブレーキが、逝かれてしまい、ガッツリにぎっても、制動すらしない状態に。加えて前後のタイヤも取り替えすべきとのご指摘で、一万越えの修理と相成りました。<br /> それで、新車を買うこと決意したんですが、そこで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%AB%C5%BE%BC%D6%B2%B0">自転車屋</a>のおっさんが衝撃的な話をしてくれて、それをちょっと書き留めておこうかと。</p> <ul> <li>今回買った自転車は、いままで乗っていた自転車より値段は高いが、品質は劣る</li> <li>前乗っていたのは、純国産で、壊れない。</li> <li>今回買ったのは、メーカーは日本だが、パーツは、海外のもの</li> <li>3〜4年で寿命がくるよ</li> <li>今の自転車は、JIS規格の商品でない(パーツが多い)</li> <li>ハンドルは、重いか軽いのどちらか</li> <li>後ろブレーキは、高級品だけど、ロックしないよ(ずるずる滑る)</li> <li>多分絶対不満がでるよ 予め言っておくね</li> </ul><p>・・・・(´ヘ`;)ウーム…<br /> 確かに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%B1%BC%E7%C5%DE%C0%AF%B8%A2">民主党政権</a>時代に糞<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%DF%B9%E2">円高</a>やった影響で、国内ファブは海外に逃げたけど、こんなとこに影響?したんだろうかね。<br /> 何より衝撃的なのは、JIS規格でないパーツが増えたって所です。海外規格だからJISに合わせなくて良いという論理なんだろうけど、国内で乗るのだから、そこは規制しろよ!<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%D0%BB%BA%BE%CA">経産省</a>。そうすると、国内にファブ戻すでしょうに。<br /> JIS規格最強なんだから、国内製品に対しては優遇なり他規格は、規制しろって。</p><p>兎に角、自転車の品質は、あきれるほど、悪くなっているそうです。<br /> 錆が酷くて、直ぐ壊れて、クレームが絶えないとのことですよ。</p><p>さて、実際買い換えた自転車にのって、少し遠回りして家に帰りましたけど、なんか損した気分ですわ。<br /> 確かに後ろブレーキはロックせずズリズリ滑るし、なんか前の奴に比べると、ギャップ越えるとぐにゃぐにゃ感があって、これは壊れるわ的な感覚がありますね。</p><p>これなら、前の自転車を直した方がよかったのかなぁ・・・。</p><p>これって、JIS規格で出来た自転車だと、凄い価値がでるってことじゃ、無かろうか。<br /> こういう所ってちゃんと、市場あると思うんだよね。<br /> 俺は、国産のキチンとした自転車欲しいよ。<br /> がんばれ、自転車業界。<br /> 昔の自転車の方が品質良いとか、おかしいし、恥ずかしいぞ。</p> factory-g golang socket.io namespace hatenablog://entry/17680117127148986516 2016-05-29T00:54:36+09:00 2019-05-20T06:00:34+09:00 久々の更新が、敗者の弁みたいで非常に不本意なのですが、golangのsocket.ioが現状、こちらの要件に満たなかったと、現時点で申し上げておきましょう。私の貴重な時間を、丸呑みしたのは下記のモジュールです。 https://github.com/googollee/go-socket.ioまずは、新しいプロジェクトを立ち上げる前準備で、Socketのアプリの調査。どうせならgoで統一してやれと、以前から気になっていたgoのsocket.ioの調査に着手。まずは、サンプルまでは順調順調、redisによるスケールアップも目処付きそう、あとは、後は、アトハ、namespaceで処理をわければ。。… <p>久々の更新が、敗者の弁みたいで非常に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%CB%DC%B0%D5">不本意</a>なのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/golang">golang</a>のsocket.ioが現状、こちらの要件に満たなかったと、現時点で申し上げておきましょう。</p><p>私の貴重な時間を、丸呑みしたのは下記のモジュールです。<br /> <a href="https://github.com/googollee/go-socket.io">https://github.com/googollee/go-socket.io</a></p><p>まずは、新しいプロジェクトを立ち上げる前準備で、Socketのアプリの調査。どうせならgoで統一してやれと、以前から気になっていたgoのsocket.ioの調査に着手。まずは、サンプルまでは順調順調、redisによるスケールアップも目処付きそう、あとは、後は、アトハ、namespaceで処理をわければ。。。。</p><p>ところが、指示通りやってもウンともスンとも、言いやがらない。<br /> <a href="https://github.com/collinglass/socketio">https://github.com/collinglass/socketio</a><br /> ネットを探しまわると、以外にもissueに上がっている<br /> <a href="https://github.com/googollee/go-socket.io/issues/59">https://github.com/googollee/go-socket.io/issues/59</a><br /> ズンドコの英語力を<a class="keyword" href="http://d.hatena.ne.jp/keyword/google">google</a>様の力をかりて、読み進めると、どうもFixしたらしい。<br /> socket.goに追加しているらしいので確認。<br /> してんじゃないの(#゚Д゚)y-~~イライラ<br /> どーーして動かん!(#゚Д゚)ゴルァ!!<br /> って、最後の書き込みで、同じ問題が出てるとの報告。</p><br /> <p>折れました。実質二週間、家帰って眠い目をこすりながらやったのですが、折れました。<br /> 大変遺憾ながら、go socketは一端あきらめます。</p><p>これに伴いgo revelも一端、お蔵入り<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> 折角、コツコツノウハウためてたのに。</p><p>もう寝ます。</p> factory-g EmacsとGolangとGVM hatenablog://entry/17680117127148986631 2016-03-30T00:16:42+09:00 2019-05-20T06:00:35+09:00 まず、ヒントとなったスクリプト https://github.com/exu/emacs.d/blob/master/config/go.el Special thanks!! ここをみると、.gvmの指定してる♪ これを真似てPATHに自分のgvm、packagesetのパスを書き込む!! $ gvm pkgenv <package-name> にて、GVMで設定されているGO関連のパスがあるので、こちらから16行辺りのPATHをコピペ。 注意すべきは、〜は、認識されない。 フルパスで記載すること。ああ、これだけで幸せになれたとです。 ちゃーーんと、go-mode, go-flymake, … <p>まず、ヒントとなった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a><br /> <a href="https://github.com/exu/emacs.d/blob/master/config/go.el">https://github.com/exu/emacs.d/blob/master/config/go.el</a><br /> Special thanks!!<br /> ここをみると、.gvmの指定してる♪<br /> これを真似てPATHに自分のgvm、packagesetのパスを書き込む!!</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ gvm pkgenv <span class="synStatement">&lt;</span>package-name<span class="synStatement">&gt;</span> </pre><p>にて、GVMで設定されているGO関連のパスがあるので、こちらから16行辺りのPATHをコピペ。<br /> 注意すべきは、〜は、認識されない。<br /> フルパスで記載すること。</p><p>ああ、これだけで幸せになれたとです。<br /> ちゃーーんと、go-mode, go-flymake, go-eldoc 方々で紹介されているGO関連のパッケージがちゃんと動きました。</p><p>ただ、先にも書いたけど、プロジェクトが変わる度、この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を書き直さなければならない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>でも、それは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Atom">Atom</a>でも同じ!!</p><p>だったら、使い慣れた<a class="keyword" href="http://d.hatena.ne.jp/keyword/Emacs">Emacs</a>の方が、ワシには良いのじゃ。</p> factory-g Emacsに帰ってきた hatenablog://entry/17680117127148986781 2016-03-30T00:03:23+09:00 2019-05-20T06:00:36+09:00 またもや久々更新でございます。拘束される仕事をやってるために、なかなか自分のやりたい事ができず_| ̄|○ だんだんストレスが溜まりはじめております。 まぁ今年は我慢がつづきますな。 といっても、そろそろ種まきしとかないと。さて、AtomでGo言語のRevelとか書いていたんですが、矩形選択とか、置換とかキーボードによる行末移動とか、兎に角、こう言う小さい所が、面倒でどうにも慣れなかった_| ̄|○評判が良いからといって、自分に合うとは、かぎらんのですね。世の中。それで、先週末から、またもやEmacsでのGo言語環境を構築に再挑戦しておりました。 すると、なんとか、EmacsのGo言語環境揃えられ… <p>またもや久々更新でございます。</p><p>拘束される仕事をやってるために、なかなか自分のやりたい事ができず<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a><br /> だんだんストレスが溜まりはじめております。<br /> まぁ今年は我慢がつづきますな。<br /> といっても、そろそろ種まきしとかないと。</p><p>さて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Atom">Atom</a>でGo言語のRevelとか書いていたんですが、矩形選択とか、置換とかキーボードによる行末移動とか、兎に角、こう言う小さい所が、面倒でどうにも慣れなかった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>評判が良いからといって、自分に合うとは、かぎらんのですね。世の中。</p><p>それで、先週末から、またもや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Emacs">Emacs</a>でのGo言語環境を構築に再挑戦しておりました。<br /> すると、なんとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Emacs">Emacs</a>のGo言語環境揃えられました(つд⊂)エーン</p><p>懸案だったGVMの指定の仕方も何となくできましたよ。<br /> ただ、複数のプロジェクト同時に編集できないという制約がありますが。。。</p><p>でも、やっぱ、使いやすいぜ!!</p><p>いくつか、パッケージもいれたので、後ほど備忘録を含めてアップ。</p> factory-g gvm で go1.5.3 をインストール hatenablog://entry/17680117127148986903 2016-02-07T17:52:41+09:00 2019-05-20T06:00:37+09:00 $ gvm install go1.5.3 Installing go1.5.3... * Compiling... ERROR: Failed to compile. Check the logs at /Users/***/.gvm/logs/go-go1.5.3-compile.log ERROR: Failed to use installed version $ cat /Users/***/.gvm/logs/go-go1.5.3-compile.log ##### Building Go bootstrap tool. cmd/dist ERROR: Cannot find /U… <pre class="code lang-sh" data-lang="sh" data-unlink>$ gvm install go1.5.3 Installing go1.5.3... * Compiling... ERROR: Failed to compile. Check the logs at /Users/***/.gvm/logs/go-go1.5.3-compile.log ERROR: Failed to use installed version $ cat /Users/***/.gvm/logs/go-go1.5.3-compile.log <span class="synComment">##### Building Go bootstrap tool.</span> cmd/dist ERROR: Cannot <span class="synStatement">find</span> /Users/***/go1.4/bin/go. Set <span class="synPreProc">$GOROOT_BOOTSTRAP</span> to a working Go tree <span class="synStatement">&gt;=</span> Go 1.4. ./make.bash: line <span class="synConstant">121</span>: /Users/***/go1.4/bin/go: No such file or directory </pre><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%EF%A4%B1%A4%EF%A4%AB%A4%E1">わけわかめ</a>。</p><p>ググってると、以下のHPが<br /> <a href="https://github.com/moovweb/gvm/issues/155">https://github.com/moovweb/gvm/issues/155</a></p> <blockquote> <p>$ gvm install go1.4 <br /> $ gvm use go1.4 <br /> $ export GOROOT_BOOTSTRAP=$GOROOT <br /> $ gvm install go1.5.3</p> </blockquote> <p>すでに、1.4はあるのでexportから実行。</p><p>すんなりインストール完了。<br /> ありがたやぁ。</p> factory-g RevelでPipline SASSやCoffeeScriptやらちゃんと管理するらしいtrainとかいうやつ 設定編 hatenablog://entry/17680117127148987059 2016-01-26T00:09:37+09:00 2019-05-20T06:00:38+09:00 眠い https://github.com/revel/revel/issues/620project_name/init.go func init() { revel.Filters = []revel.Filter{ AssetsFilter, revel.PanicFilter, // Recover from panics and display an error page instead. revel.RouterFilter, // Use the routing table to select the right Action revel.FilterConfiguringFil… <p>眠い<br /> <a href="https://github.com/revel/revel/issues/620">https://github.com/revel/revel/issues/620</a></p><p>project_name/init.go</p> <pre class="code golang" data-lang="golang" data-unlink>func init() { revel.Filters = []revel.Filter{ AssetsFilter, revel.PanicFilter, // Recover from panics and display an error page instead. revel.RouterFilter, // Use the routing table to select the right Action revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters. revel.ParamsFilter, // Parse parameters into Controller.Params. revel.SessionFilter, // Restore and write the session cookie. revel.FlashFilter, // Restore and write the flash cookie. revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie. revel.I18nFilter, // Resolve the requested language revel.InterceptorFilter, // Run interceptors around the action. revel.CompressFilter, // Compress the result. revel.ActionInvoker, // Invoke the action. } train.ConfigureHttpHandler(nil) // これはトラップ // http.ListenAndServe(&#34;:3000&#34;, nil) revel.TemplateFuncs[&#34;javascript_tag&#34;] = train.JavascriptTag revel.TemplateFuncs[&#34;stylesheet_tag&#34;] = train.StylesheetTag } // Server /assets with [train] var AssetsFilter = func(c *revel.Controller, fc []revel.Filter) { path := c.Request.URL.Path if strings.HasPrefix(path, &#34;/assets&#34;) { train.ServeRequest(c.Response.Out, c.Request.Request) } else { fc[0](c, fc[1:]) } }</pre><pre class="code lang-sh" data-lang="sh" data-unlink>$ <span class="synStatement">mkdir</span> project_name/assets $ <span class="synStatement">mkdir</span> project_name/assets/javascripts $ <span class="synStatement">mkdir</span> project_name/assets/stylesheets </pre><p>リリースするまでは、trainコマンドは使わない。<br /> 使うと、public/assetsが出来て、productionモードになってうまく動かぬ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p> factory-g RevelでPipline SASSやCoffeeScriptやらちゃんと管理するらしいtrainとかいうやつ インストール編 hatenablog://entry/17680117127148987170 2016-01-20T00:15:52+09:00 2019-05-20T06:00:39+09:00 またもや久々更新。 なんせ、びっちり仕事でございます。 ですがっですがっ、なんとかこちらの方も、進めたい!まず、RevelでCoffeeScriptを使っているけど、自分でディレクトリほじってイマイチ管理出来ていない。 Railsのようにちゃんとディレクトリ管理したい。 とか、思って探してたら、Revel用に管理ツールがgitに公開されてたでござる。 しかも、Railsでイマイチ使い切れなかったPipelineまで提供しているらしい。https://github.com/shaoshing/trainRailsに掛けてるんだろうか?取り敢えず、インストールだけ $ go get github.… <p>またもや久々更新。<br /> なんせ、びっちり仕事でございます。<br /> ですがっですがっ、なんとかこちらの方も、進めたい!</p><p>まず、Revelで<a class="keyword" href="http://d.hatena.ne.jp/keyword/CoffeeScript">CoffeeScript</a>を使っているけど、自分で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リほじってイマイチ管理出来ていない。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>のようにちゃんと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ管理したい。<br /> とか、思って探してたら、Revel用に管理ツールがgitに公開されてたでござる。<br /> しかも、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>でイマイチ使い切れなかったPipelineまで提供しているらしい。</p><p><a href="https://github.com/shaoshing/train">https://github.com/shaoshing/train</a></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>に掛けてるんだろうか?</p><p>取り敢えず、インストールだけ</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ go get github.com/shaoshing/train <span class="synComment"># コマンドラインツールのビルド</span> $ go build <span class="synSpecial">-o</span> bin/train github.com/shaoshing/train/cmd $ sudo npm install <span class="synSpecial">-g</span> node-sass $ train diagnose <span class="synStatement">==</span> Diagnosing -- Great, your environment seems perfect <span class="synStatement">for</span> Train. </pre><p>あれっ何かnode-sassのバージョンが3.4.2で、HPで指定されてるバージョン2.0.1より遙かに高い。<br /> まぁ使ってみて不具合あったら変える方向で。</p><p>参考 npmのコマンド<br /> <a href="http://qiita.com/yoh-nak/items/8446bf12094c729d00fe">http://qiita.com/yoh-nak/items/8446bf12094c729d00fe</a></p><p>train 設定<br /> <a href="https://github.com/revel/revel/issues/620">https://github.com/revel/revel/issues/620</a></p> factory-g Revel HTML .変数名 と $変数名 hatenablog://entry/17680117127148987326 2015-12-26T18:29:19+09:00 2019-05-20T06:00:40+09:00 templateを入れ子にしたら、$変数名が読めない。 スコープが切れるみたい。 .変数名は、ちゃんと読める。・・・調べる。 .変数名は、c.Render(results) のRenderしたときの引数を、RenderArgsというmapに入れるそうです。 んで、 . = RenderArgs と言う意味で、そこにresultsがあるそうです。 なので、.resultsとするとアクセス出来るとの仕組みだそうです。今更知って_| ̄|○{{set . 変数名 値}} とすると、. = RenderArgs に変数名 = 値 と言う具合に追加するそうです。 フ━━━( ´_ゝ`)━━━ン!!{{$変… <p>templateを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FE%A4%EC%BB%D2">入れ子</a>にしたら、$変数名が読めない。<br /> スコープが切れるみたい。<br /> .変数名は、ちゃんと読める。</p><p>・・・調べる。<br /> .変数名は、c.Render(results) のRenderしたときの引数を、RenderArgsというmapに入れるそうです。<br /> んで、<br /> . = RenderArgs<br /> と言う意味で、そこにresultsがあるそうです。<br /> なので、.resultsとするとアクセス出来るとの仕組みだそうです。</p><p>今更知って<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a></p><p>{{set . 変数名 値}}<br /> とすると、. = RenderArgs に変数名 = 値 と言う具合に追加するそうです。<br /> フ━━━( ´_ゝ`)━━━ン!!</p><p>{{$変数名 := 値}}<br /> ただのローカル変数っぽいです。</p><p>テンプレートの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FE%A4%EC%BB%D2">入れ子</a>は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>と同じで、ローカル変数は引き継げないようです。</p><p>(  Д ) ゚ ゚</p> factory-g Revel HTMLでRailsのhelper関数っぽいことしたいけど_| ̄|○ hatenablog://entry/17680117127148987429 2015-12-23T17:07:55+09:00 2019-05-20T06:00:41+09:00 できん おわり http://qiita.com/rubytomato@github/items/638299aabb7922cbef59 とか、かなり詳しいのだけど、こちらがやりたい事とちょっと違う。結局app/helpersというディレクトリ作って、そこに空の構造体つくって、関数を入れ込んでやりもうした。 んで、そいつをコントローラーの該当インデックスで、宣言して、return に入れて、HTMLへ投げ込むという、妥協以外の何でも無い方法で、心底_| ̄|○ですわ。 くっそう、この辺、View辺りで共通で使える関数が定義できないもんでしょうかね。 revel.TemplateFuncs は、… <p>できん おわり</p><br /> <p><a href="http://qiita.com/rubytomato@github/items/638299aabb7922cbef59">http://qiita.com/rubytomato@github/items/638299aabb7922cbef59</a><br /> とか、かなり詳しいのだけど、こちらがやりたい事とちょっと違う。</p><p>結局app/helpersという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ作って、そこに空の構造体つくって、関数を入れ込んでやりもうした。<br /> んで、そいつをコントローラーの該当インデックスで、宣言して、return に入れて、HTMLへ投げ込むという、妥協以外の何でも無い方法で、心底<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A1%B2%7C%A1%B1%7C%A1%FB">_| ̄|○</a>ですわ。<br /> くっそう、この辺、View辺りで共通で使える関数が定義できないもんでしょうかね。<br /> revel.TemplateFuncs は、大げさ過ぎるし、いちいち定義書くの面倒臭い。</p> factory-g