Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

今年の確定申告が超楽だった件

去年会社を辞めたので自分で確定申告をしました

こうゆうのって自分でやって初めて分かる事が多い。
そして、会社って素晴らしいんだなと再実感。笑
やらなくていい苦労を全部請け負ってくれていた。それが会社。

用意するもの

去年までつとめていた会社から貰った源泉徴収票
生命保険に入っていれば、その控除証明書
国民健康保険の場合には、その証明書(?)。国民健康保険でないのであれば証明書はいらない

源泉徴収票が見つからなくて焦った。超探した。

やってみたらすごい楽だった

ここにいってポチポチするだけ、超簡単。
https://www.keisan.nta.go.jp/h26/ta_top.htm#bsctrl

終わったら印刷して税務署に持っていくだけ。
あらかじめ書類が出来上がっていれば特に並ばないですんだし。

今年はもっと大変だな。

今年からは、フリーランスの仕事がはいっているので、収入の計算やら経費の計算やら大変だな。
クラウドの会計ソフトを調べてみようかなー。

月1000PV突破したらしい

hatenaから通知がきて今月は1000PV突破したらしい

まあ非常にしょぼいんだけど、ブログ始めた時は月100とかもいってなかったから確実に進歩かな。

2015年に入ってから月10記事は書くようにしていた

このブログを始めたのは2012年で、
ちょうと仕事以外で趣味でandroidアプリを作り始めていた頃。
自分のエンジニアの端くれなのでブログでも書くかー的なテンションだったが、いま振り返ると2012年は6記事しかない。笑

まあ備忘録的に始めたのでそんなんでも良いのだけど、もうちょっとちゃんとやろうかと。
ということで、月10記事は書く事にしようかと。

で、最近は、毎日コードを書いていて毎日何かしらハマっているので小ネタでも更新するようにしている。

ブログを定期的に書いていると確かにアクセスが増える

これも大した数字ではないけど、定期的に記事を更新していると確かにアクセスは増えるようだ。
ブックマークやスターも少しだけど貰えるようにもなってきた。
ググると100記事くらいが目安でアクセスが増え始めるらしいので(記事内容にもよるし、100という数字には厳密に意味はないと思うけど)このまま続ければ人に言えるくらいのPVまで増えるのだろうか。

今月ピンチ

今月は一週間くらい休みを取っていたので、更新する内容がない!
このエントリをいれても今7記事!今日3/30日!

ハマった系のエントリ以外でも書いていこうと思う

ここ一年で、元いた会社を辞めて自分でサービス立ち上げたり、フリーランスエンジニアとして働いたりしているので、技術話だけでなく、広ーい意味でのエンジニアブログに出来たら良いかなと思っている。

こんな感じの。
kenjiszk.hatenablog.com
まあ、書く事が無くて月10達成むずかしくて苦肉の策で書いたわりには書いていて楽しかったので、普段考えているような事も書き出してしまおう、という感じ。

次は月10000PV目標で

年内にはいければ良いかな。
それくらいになったらhatena proにしよう。

vimをそろそろちゃんと使いこなしたい

vim歴長いわりに、すげえ素人

あまりvimでごりごりとコードを書く仕事はしてなかった関係でvimを全く使いこなしていない。
コメントとかいちいち手で打ってたりw

最近になって結構vimでコード書く機会が増えたり、仕事でしか関わらない人の前でvimを使ったりしていて自分のvimレベルが恥ずかしくなってきた。

神Qiita発見

ちょっとググったら初心者に最適なQiitaを発見。
qiita.com

これはすばらしい、ひとまずこれでvim小学生になろうと思う。


これ系の本も一冊くらいは買ってみようかなと。

[asin:B00IF83WEA:detail]

キングダムを読んでいてい閃いた、エンジニアタイプの見分け方

すごいエンジニアってどんな人?ってきかれる

特に、非エンジニアの方に。
特定の人を指して、この人は出来るか・出来ないか、は判断出来る気がする。
でも抽象的に説明するのって意外にむずかしいのかもと思った。
そもそもエンジニアとひとえに言っても色々なタイプがいるわけで。

キングダムを読んでいて閃いた

なんかこれは分かりやすいかも、と勝手に思っているので書いてみる。

CTO系

王騎タイプ。
いち兵士として最強。その上で、一国の兵を率いられる。
大王と夢を共有する。
やっぱり会社に一人欲しい存在。

スーパーエンジニア系

[asin:408877504X:detail]
羌瘣・龐煖タイプ。
神レベルに強い。
中華統一といった夢よりも、武に重きを置くタイプ。
(現実のスーパーエンジニアは本当にスーパーなので、技術に重きを置きつつもサービスや経営に関しても考えられちゃったりする。)
めちゃくちゃ詰まって悩んでた問題を投げると一発で解決してくれたりする。

中堅どころ

百人将~五千人将あたり。信とか。
現場を支える人たち。
ここは数が多い。

キングダムの場合には、信・蒙恬・王賁のようにCTO系(大将軍)を目指すタイプが多い(目立つ?)気がする。

エンジニア出身CEO

[asin:B009LHBWP0:detail]
李牧タイプ。
まあ、王様ではないけど。
軍師なのに武のにおいぷんぷん。

フリーランス、個人で面白いサービス立ち上げちゃうタイプ

[asin:4088794559:detail]
桓騎タイプ。
才能としては、将軍(エンジニア)の枠には収まらないタイプ。
好きなように生きるので、正社員だとしても企業への忠誠心は薄い。
意外に義理堅かったりもする。

まとめ

かなり個人的な意見で書いたけど、
面接に来たエンジニアさんをキングダムの登場人物に当てはめて、
誰タイプなのかなーと考えると出来る人かどうか、自社に必要な人かどうかがちょっとはわかるのかも。

将来どんなエンジニアになりたいかを考える時にもキングダムは参考になるかも。

UIPageViewControllerで現在のページを取得する場合の注意

複数のViewをページめくりの様にして使えるUIPageViewController

公式ドキュメント。

Apple Developer Documentation
多分ググればかなりの数が出てくる。

今何ページ目なのかが知りたい事はよくある

ページ番号を振るとか、ページごとに固有の処理をさせたいとか、UIPageControlのcurrentPageに設定する為とか、そんな目的で、今何ページ目かが知りたい事がよくある。

なぜか正しい値を示さない

以下のように、viewControllerAtIndexの中で描画されたページ(今のページ)のindexを記録するようにしたところ、返ってくる値がおかしい。
2ページ目なのに3とか返ってくる。

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
  currentPage = index; // currentPageに今何ページ目かをセットしてクラス内で使えるようにする
  /*
  ~~ 各ページ用のviewController作る ~~
  */
  return viewController;
}

UIPageViewControllerは今のページとその前後のページを先読みしているため

ドキュメントを見ると、どうもUIPageViewControllerは動きをサクサクさせる為に、今のページとその前後のページをあらかじめ作っておくらしい。
そのため、1ページ目から2ページ目にいく時に、裏では3ページ目もよんでいてcurrentPageに3が入ってしまっていた。
ちなみに、前後なので1ページ目も先読み対象になるけど、既に作成されているページは読み込まない。逆に言うと廃棄もしない。
廃棄されるのは3ページ目になった時。

今activeなページを取得する為には

で、色々調べた結果、以下のようなメソッドが使えるとの事。

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
  // ContentViewControllerはあらかじめ作っている各ページ用のクラス
  // ContentViewControllerにはcurrentIndexというプロパティを持たせていて、ページ作成時にセットするようにする
  ContentViewController *currentViewController = [pageViewController.viewControllers objectAtIndex:0];
  currentPage = currentViewController.currentIndex;
}

スクロールモーションが終わったタイミングをフックに、viewControllersを取得する。
viewControllersには今前面に出ているviewControllerとその親たちが入っているので先頭(子供)を取得する。


一瞬ハマりかけたけど、解決。

Images.xcassetsに置く画像の名前にドットを含むとエラーになった

シミュレータでは画像が出るのに実機では画像が出ないという症状に陥りました

エラーはこんな感じ。

2015-03-13 21:07:27.284 xxxx[229:60b] Could not load the "TopSlide03_3.5" image referenced from a nib in the bundle with identifier "xxx.xxx.xxx"

ファイル名にドットを入れると駄目らしい。

3.5inch用にTopSlide03_3.5という名前を付けていましたが、これが原因。
ドットを抜いて、TopSlide03_3_5としたら無事表示されました。

iOS7 or iPhone4sの問題??

この症状が発生したのは、iOS7のiPhone4sの実機のみでした。iOS7未満は実機が無いので未確認。
また、シミュレータ(iOS8ですが)でiPhone4sで試してみると正常に表示される事は確認できました。
ちょっと発生条件まで追えずじまいだけど、いずれにしてもドットはファイル名に使わない方が無難ぽい。


[asin:4800710707:detail]

MySQLでautocommitをONにしておかないとALTERがロック待ちで固まった

開発中の環境でALTERを打ったらロック待ちで固まって焦った

原因は、autocommitがOFFになっていたのと、他の作業者がMySQLに接続していたから。
autocommitがOFFだとMySQLに接続してクエリを発行したタイミングでトランザクションが開始される、そのためもう一つの接続先からALTERを打つとロック待ちになる、という現象でした。

こんなテーブルを作って。

mysql> create table test (id int, name varchar(10));


接続元1でselectを打つ

mysql> select * from test;
Empty set (0.00 sec)

autocommitがOFFの場合、このタイミングでトランザクションが開始され、テーブルor行にロックがかかる(インデックスが効いていれば行ロック)。
今まで勘違いしていたけど、更新処理開始時ではなくselectでもトランザクションが開始されるっぽい。
REPEATABLE READなので考えてみれば当たり前か。


ここで、接続元2からalterを打つ。

mysql> alter table test change column id id bigint;
(返ってこない。。。)

トランザクションによりロックがかかっているのでALTERが打てない感じになります。

autocommitはONが良い気がする

ということで、autocommitは基本的にONが良いと思います。
この場合、明示的にトランザクションを開始しないとロックがかからないのでALTERが固まる事は無いです。
ただし、直接MySQLにターミナルから繫いで手で更新処理を打つ場合には、BEGINしてトランザクションを開始しておいた方がオペミス時にrollbackが出来るので良いとは思います。

また、アプリケーション側のロジックでも明示的にトランザクションを使うところと使わないところを分けられるので、サーバー側の設定はONの方が色々と調整がうまく行きそうです。


[asin:4873116384:detail]
[asin:4797369450:detail]