コミケ告知

サークル活動の詳細は circle タグの記事へ。
2016年12月8日木曜日

転職したときの話を少々

転職 Advent Calendar 2016 8日目の記事です。

今年転職した人が多いだろうなーと思いつつ、何年か前に転職した人の話を書きます。細かい数字は覚えていなかったり若干意図的に揺らしてたりしますが、そのへんは大雑把に読んでいただければ。

概要

2010.09 前職退職 → 2011.05 現職。でかい企業(電機)→中企業(従業員2000人くらいのはず)。転職したのは29歳か。
元々終身所属する気は一切なく「でかい企業で人と金の使い方を見ておこう」というモチベーションによる入社でした。とはいえ実際就職してみると、年々「このままでいいか…」という気分は高まってきます。企業内・業界内の友人とばかり交流していくと、そうなる人は多いのでは?
しかしあるときフレックス制度が無くなって、所属する価値が激減。それをいい機会に昔の計画を思い出し、実行したというだけです。

空白期間

空白期間を置くことは当初から計画にあったので、急ぐことはしませんでした。ほとんど自らの手を動かさずに暮らしていたので、技術者として自分を鍛え直す必要を感じていました。開発部門にしては細部まで触らせてもらっていたはずですが、コードを書くどころかプログラムの設計までも手の届かないところにあり、仕様書まで。

と言いつつすごい勢いでゲームもしていたのですが(予想された展開)、時間が長く取れることを生かして、しっかりコーディングしたり、本を読んだり、平日に無料でやっているカンファレンスに行ったり、当時ぽつぽつ出始めた勉強会に行ったり…何とか実装力は取り戻したかなと思います。しかし当時MMOかソシャゲに手を出していたら人生終わっていたかも。

最終的に、7か月半くらい無職でした。半年の予定が若干伸びた理由のひとつは、阪神大震災です。二次以降の面接予定がバタバタとキャンセルになってもうどうなることかと。こんな大きな事件に限らず、もっと細かい事件で伸びたりキャンセルされたりはあるので、生活費ギリギリまで就活するのはやめましょう!


転職前後で変わったこと

精神的に健康になった

大事。
前職終盤ではメモ帳を呪いのフレーズで何ページも埋めてたり、上司に電波メール送ってたりしましたから。黒歴史として抹消せねばならぬ。
自分はヤバめになった段階で逃げ出したからよかったけど、周りを見ていたら、人間意外と、色々な原因で壊れるものですね。学生のときにはまったく想像もしなかった。

働くのが楽しい

大事。
「趣味を仕事にしてはいけない」なんて話が時折Twitterや人気ブログエントリとして流れてくるけど、好きなもの・詳しいものを扱った方が楽しいに決まっています。失敗談や攻撃的な話題はみんな喜んで広めるのに対し、平穏な話は広まらない、あるいはそもそも書かないのかなあ。



正社員化周りの話

契約更新され続けたのちに、少し前に正社員になりました。このとき、いくつか収入面で罠があります。みんな気を付けてね!
  • ボーナス1回分損する
上期ボーナス→12月、下期ボーナス→6月という感じだと思いますが、初回は出ませんよね。転職のときにボーナス周りのロスが出るのは認識していたのですが、正社員化のときにあるのは全く頭から抜けておりました…。
  • 年収が下がっている可能性がある
月額あるいは年俸契約していた状態から正社員月給に変換するときに、「ボーナスは年で4か月分あるから、年俸/16*12で据え置き月収ね♪」ってされるけど実は近年実績として平均で4か月分も出ていない!というケース。


最後に

特に一般化せず、自分の経験を書きました。就業関係って、絶対一人の活動で十分にカバーしきれるものではないので、割り切って一例として残す以外ないかなと思いまして。何か参考になれば幸いでございます。



転職 Advent Calendar 2016

前日(7日目):後日更新
翌日(9日目):後日更新


2016年12月4日日曜日

Awesome ElixirがAwesomeかどうか確認してみた

Elixir Advent Calendar 2016 4日目の記事です。


Elixirの強力な情報源のひとつに、Awesome Elixirというリンク集がありまして…
見てくださいこのリンクの数。1000以上あるみたいです。

リンクがたくさんあるのは良いのですが、過去何度か「辿ってみたが既に死んだプロジェクトだった」ことがありまして。リンク集にはありがちですよね。とくに善意で集めたものだと、削除がしづらかったり、把握しきれなかったり。ここでふと気になって、どれくらい新しいのかを調べてみることにしました。

方法はシンプルで、README.mdに書いてあるリンクをバラして、その先を機械的に確認します。対象はGitHub上のプロジェクトのみにします(API経由で情報が取れるため)。9割以上がGitHubのプロジェクトです。

結果

  • 2013年 1
  • 2014年 62
  • 2015年 232
  • 2016年 724 


HTTPoisonでささっと作ったクローラー、GitHubなのに解析ミスってるものがぽつぽつあり(URL解析ミスかAPIリミットに引っかかったか)、本当はデバッグしないといけないのですが、大きな割合ではないので今日のところはご勘弁を。Excel製ヒストグラムもうまく月区切りに出来てませんが、ひとまずどちらも全体の傾向を見る上ではギリギリOKということで…。

雑感

Elixirの主なバージョンのリリース履歴は以下の通りです。
  • 2016年6月 v1.3
  • 2016年1月 v1.2
  • 2015年9月 v1.1
  • 2014年6月 v1.0
2015年以前のものは、v1.1系までで書いてあるということになります。動くのかな。もしこれらを全部「賞味期限切れ」とすると、全体の3割ほどがアウトということになるようです。
ちなみに無事拾えた情報中では、一番古いのは https://github.com/urbanserj/hsnif で、15 Jun 2013 とありました。



Elixir Advent Calendar 2016
前日(3日目):elixirができるまで
翌日(5日目):後日更新
2016年9月7日水曜日

Network Maniacs vol.6 電子版 ダウンロードについて

先のC90にて、電子書籍の形でも頒布させていただいた NetworkManiacs vol.6 ですが、現在配布に利用しているサービスの都合により、ダウンロードが出来ないようです。
ファイルが利用可能になるまでお待ちいただくか、あるいはTwitter@moccosに個別にご連絡いただければ、直接お送りいたします。ご迷惑をおかけいたします。

対面電書というサービス(新:https://taimen.jp/ 旧:https://densyo.jp/(すでに消滅))を利用しているのですが、なんと新システムへのデータ以降が済んでいないのに、旧Webサイトを閉じてしまったようです…
2016年8月21日日曜日

Cloudfrontの浸透問題

今晩、ウマ娘というソシャゲ関連の発表がありまして、発表後に公式サイトもリニューアルされたんですよ。 みんなそれを見てTwitterであーだこーだ言っているんですが、どうも我が家からは繋がらない…。「鋭意制作中」と表示されたホームページは見られるものの、みんながリンクを貼っているキャラクター紹介ページが見られない…!


キャッシュか?と疑ったものの、他のブラウザでも同じ、また他の端末でも同じなのでその説はなし。

試しにイーモバイル端末を起動したら、そちらは繋がりました。つまり、経路上になにか問題があります。何かよくない挙動をするキャッシュがある可能性をまず考えましたが、もしそうなら打つ手がないので、その説は後回し。ではDNSか?いやしかし、トップページには繋がるんですよね…。ですが、結果としてはDNSでした。



最初のローカルDNSサーバーは、普通に上位のOCNサーバーを見に行っているはずです。GoogleのPublic DNSにした結果、異なるIPアドレスが返り、最新のWebサイトに繋がったので、いわゆる"DNS浸透系"の問題ですね。(この言葉使うと怒られるんだけども、原理と言葉が合っているかを別にすると、現象を表す言葉としては通っていて難しい)

今回は古いコンテンツがAWS上のサーバー、新しいものはCloudfront(CDN)のようです。古い方もコンテンツが消えたわけではないので、そちらのIPアドレスを引いてしまえば引き続き繋がったのですね。
2016年8月15日月曜日

C90 お疲れ様でした

夏コミ、無事終了しました。
当サークルに足を運んでくださった皆様、ありがとうございました。

新刊完売はだいぶ遅い時間になりましたし、予備の電子版もあったので、部数については今回はうまく運べたかなと思います。ただ体力尽きて、ソロ店番なのに時々寝落ちしてましたが…。すいません。

あとがきにも書いたとおり、冬コミは申し込みません。もしネタが見込めるようなら、復帰することもあるでしょう。先の予定は未定です。お仕事的にはOSS公開するようなところではなく、また趣味コーディングは長らく自分専用ツールばかりやっていたので、GitHub力が貧弱なのを、どうにかしたいと考えています。少なくとも2016年は、そっち方面で。
2016年8月7日日曜日

C90 新刊情報

新刊


Network Maniacs vol.6

新刊は、「シリアライズ」「プッシュ型通信・プル型通信」の二本立てです。また今回も地味なトピックですが、もうそういう芸風なので仕方ありません。
  • シリアライズ
メモリ上のデータをバイトストリームに変換したり戻したりするシリアライズです。電子回路で用いるシリアル・パラレル変換とは違います。バイトストリームにしたあと、ネットワーク経由で送受信したり、ファイルにsave/loadしたりします。

  • プッシュ型通信・プル型通信
この世のあらゆる通信をざっくり二分できる分類概念のひとつです。既存のプロトコル・フレームワークの選択や挙動理解にも役に立ちますし、ネットワーク越しにデータをやり取りするアプリケーション・サーバーのバックエンドシステムなど、何かしらデータの受け渡しの設計をする際にも、きっと役に立つのではないかと思います。

既刊

Network Maniacsの「vol.1+2」と「vol.3」を持ち込みます。
Vol.4と5の再編成は今回はならず…。

Network Maniacs vol.1+2

  • TCPの高速化手法
    • 基本的な話からLinux3系の新実装まで、TCPの高速化に使われている方法の解説。
  • ネットワークバッファとパケットロス
    • パケットロスとは何で、ネットワークバッファは何をしているのか?
  • QUIC
    • Googleの実験用プロトコルQUICの概要と試用方法

Network Maniacs vol.3

  • TCP受信プログラミング
    • サンプルコードでは説明されない罠がたくさん
  • ネットワーク向けコマンドラインツール紹介
2016年7月9日土曜日

Mesosの今後が不安な話

Apache Mesosの開発に大きく貢献している企業にMesosphereがあります。開発者の一人である Benjamin Hindman 氏が筆頭に居て、商用サポートなどやっている企業です。よくあるパターンですね。

そのMesosphereは最近、DC/OSというソリューションに注力しています。ドキュメントのOverview -> Architectureから全体図が確認でき…るかと思いきや、抽象的な図でいまいちわかりませんが、これはMesosとその他いくつかのコンポーネントを組み合わせた上位パッケージのようです。

気になっているのは、MesosphereがMesos単体の便利ツールを放棄していることです。mesos-cliとかplaya-mesosとか、どちらも「DC/OS版に移行せよ」と書き残して取り潰しです。オープンソースなので、引き継いでメンテすりゃいいというのは真理だけども…
単にMesosからDC/OSに名前が変わっただけならそれで良いですが、これらは別ものです。日本語の紹介記事をみたところ、無料使用可能なバージョン(Community Edition)はAWSでしか動かないとのこと。いずれAWS以外にも多少は拡張されるのでしょうが、とにかく制限のついたソフトウェアであり、ツールがDC/OS用に移行してしまうのは困ります。Community EditionとかEnterprise Editionとかの記載、今公式を見に行ったらなかなか見つからなくて、現在の状況もよくわかりません。

Spark周りのジョブ管理をどうしようか迷っているなかで、MesosにするかYARNにするかという選択で迷っています。Mesosの方が機能面ではいけている感じがするのですが、周辺の状況が不安。どうしようかなあ。

2016/07/25追記:
めんどくさい制限エディション制はなくなって、いまは機能制限なしのOSS版とそれの有償サポートという、ありがちな形に落ち着いているそうです。先の紹介記事を書かれた方に、July Tech Festa 2016で直接お聞きしました。ライセンスや機能制限方向については、不安に思わなくてもよいようです。
2016年7月4日月曜日

さよならFiddlerCore

.NET環境で通信をキャプチャするのに便利だったFiddlerCoreですが…
http://www.telerik.com/purchase/fiddlercore

いつのまにかフリー版のライセンス表記が変わって「Personal&Educational」なんて名前になっていて、しかも説明文を見るとEducationalに相当する文章しかない…!



ライセンス文章を確認すると、やはりPersonalとは名ばかりで、Educationalのみを対象とする模様です。2.1 Personal and Educational Licenseより

If You are not a professor or student enrolled at an academic institution who is using the software solely for educational/training purposes, You must obtain a commercial license from Telerik.
現状は、実態をアカデミックライセンスにすり替えていく過程、といったところでしょうか。

もはやオープンソースの界隈では価値はありません。艦これ補助ツールの類でFiddler使っていたものがなかったっけ、と少し検索してみたところ、Nekoxyに移行しているのがちらほらと見られますね。Fiddlerは一番手軽ではあったものの、唯一無二というわけではなかったので、もう忘れてしまいましょう。
2016年7月2日土曜日

Boothに技術系同人誌の電子版を用意

イベントで必要な冊数を完璧にそろえるのは困難であり、いつか電子書籍版を用意せねばと思いつつも先延ばしにしていたのですが、ようやく準備ができました。

https://moccos.booth.pm/

ひとまずは、先日の技術書典で頒布した2冊です。よろしくお願いします。

電子化に必要だった作業

入稿時に使ったPDFがあるから楽勝、と思いきや、そんなことはありませんでした。
  • 入稿時設定の600dpiは過剰なので、解像度を変換
  • 入稿時には表紙/裏表紙はTIFF形式かつ、表1~背表紙~表4まで一体なのを、単一ページに変換
  • 白紙ページは入稿時に用意していないが、ページ番号合わせのためそれも合わせてPDF化
  • 紙用の原稿は、綴じしろの都合で奇数ページと偶数ページで左右余白設定が異なる (今回は同人誌クオリティということで修正せず…)
これとアカウント作成、必要な元ファイルの捜索等々まで含めて、2時間くらいかかりました。

今後は、電子版に向けた最適化もいくつか考えながら原稿を作っていこうかと思います。電子版については、前述の項目の他にも、表紙カラーにする・ハイパーリンクを有効にする・図をカラーにする 等々が可能なので、それを念頭に原稿を作っていく必要がありそうです。
それから、紙にするときにはページ数を4の倍数にする必要があり、また印刷費の都合でページ数を減らしたい都合により、余白を少なくしたり、文字・図表を小さくしたり、目次を端折ったりすることがあります。今後はそういう都合によるレイアウトもやめていかないとなー、と。
2016年6月25日土曜日

技術書典 お疲れ様でした

技術書典 https://techbookfest.org/ A-31 浜風もっこすで参加しました。頒布内容は前記事参照。

頒布物について

持ち込んだ二種類とも、14時すぎに完売となりました。購入してくださった方、見に来てくださった方、ありがとうございます。完売後にいらっしゃった方、申し訳ありませんでした。言い訳はあれどイベントの中間地点あたりで切らしてしまったのは痛恨です。
しかしこれでも、夏コミ分と合算した数量を印刷したつもり、つまり適性数の倍くらい刷ったつもりだったのです。予想の3倍刷っていくというのはかなり無理な話であり、どう思い直してもこれ以上は持って行けなかったなと…。
電子書籍販売や店舗委託・通販委託などに手を出したことはなかったのですが、これを機にまとめて検討を始めています。

イベントについて 

大盛況でしたし、欠席サークルもほとんどなく、またほとんどのサークルに人だかりが出来ていて、主催・出展側ともすばらしいイベントだったのではないでしょうか。入場規制がかかった上に、終盤おそらく完売ばかりだったので、一般参加の皆様からするとそのあたり不満があったのではないかと思いますが、こんなに盛況になるのを読むのは難しかったかなと。次回以降、規模を拡大しての開催も、おおいに期待したいです。
唯一、時々端の方でスポンサー公演(?)やじゃんけん大会(??)があったらしいけども、会話の邪魔なだけだったので、あれには不満があります。そもそも何なのか全然わからないまま始まってたのが一番の問題かも。
2016年6月24日金曜日

出展情報: 技術書典/C90

技術書典

https://techbookfest.org/
A-31 です。よろしくお願いします。 (なんで書展ではなく典なのだろう)

新刊は二つ考えたのですが、どうも面白いものにならなかったので没です。すいません。既刊 のうちvol. 1+2(ネットワークバッファ・パケロス・TCP高速化・QUIC等) と vol. 3 (TCPプログラミング・コマンドラインツール)を増刷したので持っていきます。
Vol.4と5はいったん廃刊にして、部分的に再利用できるものはどこか総集編的なもので採録にしたいと考えています。なぜ新しいほうがそういう扱いになったかというと、中途半端に新鮮味(時事性)のあるものを書いてしまったために、さっさと賞味期限が切れたということです。根本的な技術ネタと、時事的なものとをどう扱っていくべきか。

C90

◎貴サークル「浜風もっこす」は、日曜日 西地区“f”ブロック-33a に配置されました

珍しくサークルカットの予定通り、次のテーマはシリアライズ周りの予定です。SerDesではなくSerDeのほうです(わかりづらい表現)。ProtocolBuffer等々。
2016年3月24日木曜日

Elixirでattributeを用いたコンパイル時分岐

C/C++でいう#ifdef DEBUG 的なことを、moduleのattributeを使って行おうとしたところ、dialyzerさんに文句を言われてしまいました。if (@flag)のような記述が展開され、if(true) とか if(false) とかになって、欠陥のあるパターンマッチ記述として検出されるわけですね。
そこで、ただコンパイルの前にtrue/falseが判定されるだけのマクロを書いて対処しました。

上記のソースコードをdialyzerにかけた結果はこうなります。(dialyxir使用)
% mix dialyzer
Starting Dialyzer
dialyzer --no_check_plt --plt C:\Users\moccos/.dialyxir_core_18_1.2.3.plt (オプション略)
  Proceeding with analysis...
hoge.ex:8: The pattern 'false' can never match the type 'true'
 done in 0m1.31s
done (warnings were emitted)

# 最初に書いたバージョンに間違いがあったので、2016/03/28に修正しました。
# Elixir1.3系で動かなかったので2016/06/24に再度修正
2016年3月5日土曜日

Cowboyの使い始めではまったところメモ (privとは何ぞや)

ElixirでWebサーバーといえばPhoenixですが、既存のElixirアプリケーションにちょっとWebサーバーの機能を足すだけの場合にはちょっと大規模すぎたので、PhoenixよりもコンパクトなCowboyを使うことにしました。Phoenixのサーバーコア部分はCowboyなので、比してコンパクトという表現は実はちょっとおかしいですね。

ソースコードのexamples以下には、いくつもサンプルプロジェクトがあり、それをそのまま動かすのも、参考にして動かすのも簡単です。ドキュメントもErlangなのに十分にあり、必要なハンドラを定義して差し込むだけで動きの把握もしやすく、素晴らしいライブラリですね。

ただしひとつだけ罠があり、それはサンプルで用いられるファイル読み出し指定が priv_dir や priv_file であることです。例えばstatic_worldのサンプルでは…

Dispatch = cowboy_router:compile([
 {'_', [
  {"/", cowboy_static, {priv_file, static_world, "index.html"}},
  {"/[...]", cowboy_static, {priv_dir, static_world, "", 以下略
 ]}
]),
Elixirで書くとこんな感じ:
dispatch = :cowboy_router.compile([
  {:_, [
      {"/", :cowboy_static, {:priv_file, :static_world, "index.html"}},
      {"/[...]", :cowboy_static, {:priv_dir, :static_world, ""}, 以下略}
  ]}
])

これをiexで走らせると動いて安心していたのですが、escriptにしたりアプリケーションとしてリリースしようとしたりすると全然動かない。index.htmlなどのファイルが見つからないときの挙動をする…。 どこに置いてもindex.htmlなどのファイルをアプリケーションが見つけてくれない。
同様にpriv方面ではまっている英語の記事があり、そちらではそのまま力技で解決していましたが、そんなに頑張らなくても、単にprivディレクトリを使う指定をやめればOKでした。

dispatch = :cowboy_router.compile([
  {:_, [
      {"/", :cowboy_static, {:file, "web/index.html"}},
      {"/static/[...]", :cowboy_static, {:dir, "web/static"}}
  ]}
])

実コードから引っ張ってきたので若干パス指定が違いますが、要点は:priv_fileではなく:file、:priv_dirではなく:dirを使うこと。アプリケーションからの相対位置で無事読めました。privディレクトリがErlang的に特別なものらしいのです。ぐぐるとほとんど情報がないなかに、ユーザーズガイド邦訳から以下の説明が見つかります。

アプリケーション固有のファイルの格納に使用されます。例えば、Cの実行ファイルがここに置かれます。code:priv_dir/1関数を使用すると、このディレクトリにアクセスすることができます。

単にprivという名前のディレクトリではないことはわかりました。Cの実行ファイルを格納するようなところに、Webのリソースを置くのはなんか違うんじゃないかなという感覚があるのですが…

# 2016/04/20追記
公式のMix.Tasks.Escript.Buildの項目に
Note: escripts do not support projects and dependencies that need to store or read artifacts from the priv directory.

とありました。
2016年1月22日金曜日

一時ファイルのサイズはどこまで許容されるのか

ここで一時ファイルとしているのは、linuxなら/tmp、Windowsなら%TMP%および%TEMP%のことです。特にWindowsだと、GetTempPathのように安直にパスを得られて、気軽に使えます。

遭遇した問題 

昔かなり遊んでいた音楽ゲームにbeatmania IIDXというものがありまして、そのクラウドバージョン、PC上でプレイできる beatmania IIDX Infinitasというサービスが始まりました。トライアル版が無事動いたので、さっそく製品版を遊んでみようと思ったんですが、インストール中にエラーが出るんです。
何度やっても同じところで停止。そんな重大不具合ならば騒ぎになるはずですが、Twitterで検索してもそんな話は出てこない。つまり、こちらの環境の問題である可能性が極めて高くなりました。インストーラーの動作中にディスクの書き込みを監視すると、どうやら一時ディレクトリに書き込んでいる…
そのサイズ、3GB弱。マジか。明らかに曲データが入っているでしょうから、今後サービスが継続していくにつれ、どんどん大きくなっていく可能性もあります。うちのメインPCでは、テンポラリはRAMディスクに割り当てているので、こんな大きなサイズは入りませんでした。

# 追記: 本件はset %TMP%して実行することで回避は可能っぽいけども、エラーが発生しました!としか出ないので、そこそこ詳しい人でないと解決できなそう。

一時ディレクトリは何GBあればよいのか

デフォルトではWindowsではシステムドライブ、Linuxも律儀に分けていなければ、/binや/usrなどと同じパーティションになるのではないかと思います。HDDにどかんと置いている場合には問題にならないでしょうが、うちのようにRAMディスクを割り当てている場合、システムSSD+HDD構成でシステムドライブの容量が限られている場合などは問題になる可能性がありそうです。
果たして一時ディレクトリにどのくらいまで置いていいのか、という議論は、あまり見たことがありません。適当にGoogleで検索すると、ユーザー側の対処がたくさん引っかかって難しい。はたして、どれくらいまで置いてよいものでしょうね?

さらに追記