ScrollViewとStackViewを組み合わせて使ってみる

最近、SwiftiOSアプリを作ろうと色々しています。

ScrollViewの上にStackViewを貼って、constraintを適切に設定しておいてあげると、中のviewのhiddenをtrueにしたりfalseにしたりするのに従って、ScrollViewの高さも調整してくれるんですなぁ。

f:id:ginkouno:20160506191429g:plain

便利便利。

なおconstraintは全てStoryBoard上で設定しています。

サンプルコードはこちら。

GitHub - ginkouno/ScrollViewTest1: ScrollViewとStackViewのサンプル

読んだ:オブジェクト指向でなぜつくるのか

Railsリファクタリング力を高めたいなぁと最近思っていたのですが、 その一環としてオブジェクト指向の復習がしたくなり、何冊か関連書籍を買って読んでおります。

その一冊がこれ

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

前提

  • オブジェクト指向を最初に勉強しようとしたのは15年前位
    • その頃は組み込みの仕事をしていた
    • C++を使い始めた時だった
    • いわゆる「哺乳類クラスと卵を生むクラスの多重継承がカモノハシクラスである」的な説明とかを読んだ気がする
    • メモリ上にどのように展開されるかとか、そういったことは興味を持って読んだ記憶があるが、だからこう設計するとよい的な事については確信的なものは得られなかった気がする
  • UMTPの一番簡単なやつ?は試験受けて合格した記憶がある

感想

  • 実装を通じて「methodや属性をまとめるための手法だよね」的な理解をしていたが、それはそれで間違ってなかったのだなぁと再確認できた
  • 「要件定義などのフェーズと実装のフェーズとでは、オブジェクト指向の文脈が異なるので注意」というのはなるほどと思った
  • オブジェクト指向的にコードが書かれてないとテストが書きにくくて仕方がないと思っていたが、「オブジェクト指向から生まれたTDD」なる説明があり、たしかにそういう側面はあるよなぁと思った
  • 「上流工程」「下流工程」という言葉には苦手意識が...

まとめ

オブジェクト指向でなぜつくるのか」という問いに対しては、「オブジェクト指向という練られた知恵とその周辺技術を使うことで、ソフトウェアの設計・開発がより品質高く効率的にできるから」ということでいいのかな? 良い総括と復習が出来たなぁという感じでした。

SQLを再度学習しようかなという話

Tokyu.rbの新年会で、 @joker1007 さんとRedshiftの話をした時に、ミックさんの本で勉強したということだったのですが、 自分が持ってて読んだのは古い本でした。

達人に学ぶ SQL徹底指南書

達人に学ぶ SQL徹底指南書

達人に学ぶDB設計 徹底指南書

達人に学ぶDB設計 徹底指南書

その時携わっていた業務ではとても役に立ったのですが、SQL業から離れた途端に読まなくなってしまっていたので、再度検索してみると...

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

おおお。新しいのが出てた。

@joker1007 さんはこれで勉強してRedshiftと格闘したという話だったので、自分も今日注文しました。 時間かかりそうだけどじっくり読もう。

iOSとSwiftの勉強をどうやろうかという話

2年ほど前よりiPhoneアプリの開発をほそぼそとやっていたのですが、 改めてiOSSwiftの基礎固め!ということで、ここ1ヶ月ほど、経験者に教えていただいた以下のコンテンツをやっておりました。 結論としてやってよかったなぁと感じており、色々自分でも作れそうだなぁと思っております。@kei_qさんに感謝。

swifteducation.github.io

駆け足(= 各Lesson末にあるModifications and Extensionsは飛ばす など)ですがLevel1から4まで一通り終えたので、その感想を記しておきます。

良かったこと

  • 基礎から一つ一つ学べる
  • XCodeの使い方とSwiftでの実装、両方学んでいける
  • 各レッスン一つ一つが短いので、短い空き時間でもきり良く進められる

気をつけたこと

  • 基本的に「Teaching App Develpment」なので、教える側向けの教材であることに注意
    • たとえば「ここで◯◯について説明すべし」なんていう部分があったりするので、それについては「俺が◯◯について調べるターン」に置き換えてドキュメントなどを自分で調べる
  • ものすごく稀に指示漏れとかがあって、書いてある通りにやっても動かなかったりすることがある
    • そういう場合は、今やっているところの次のLessonのXCode Projectを開いて現状との差分を見ると、なんとかなったりする
  • 英語なので、日本語と比較すると読解に時間がかかる
    • これは私の問題ですな...
    • どうにも意味が掴めない時は、Kindleとかで買った日本語の書籍を検索してみたりした

今後は実際に実装をしつつ、引き続き学習していこうと思っていますが、なにかオススメ教材などありましたら教えて下さい〜。 特に「Segueを使わずStoryBoardを分割して開発したい」「Model分けとかの設計の指針」などが今気になっております。

ヘルシープログラマはあんまり面白くなかったよという話

先日、「ヘルシープログラマ」の感想をちょこっと書いたのですが、

ヘルシープログラマを読んだ感想を少しと、個人的な健康維持活動について - とにかく何か書く

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

すみません。仲間内に話していた本音をまるっと省略していました。

これ通りにやっていれば確かに、普段プログラミングに没頭している人の健康は改善されるでありましょう。

と書いたのは確かにそうなのですが、書かなかった本音を続けると

でも面白くなさそうだよね。続くのかねぇ

という言葉を飛ばしていたのでした。すみません。なんか悶々としているので続き書きます。

ユニットテストをしようだとかアジャイルだとか、プログラマにヒットしそうな言葉がちりばめられていますが、「なんかこちらが面白くないと思いがちなことを、プログラマ的な文言を用いてやらせようとしているな」という作為的なものを感じて、一気に読む気をなくしたのでした。

昔イングリッシュアドベンチャーという英語教材があり、広告のキャッチが「面白いから続けられる!」的なものだったような記憶がありますが(今でもあるのかな)、初級編を始めたとたんにstory的に不自然な形で数字を読み上げるシーンが出てきて「あーこれは数字を覚えさせようとしているんだな」と思い、身構えてそれ以降やらなくなってしまったのを思い出しました。 (つまりは天邪鬼な自分が悪いということなのでしょう)

そもそも自分の周辺のプログラマの皆さんは、日々つらみのあるギョームをやっていたとしても、基本的にはプログラミングやソフトウェアエンジニアリングが面白いと思ってやっている風に見えます。

この書籍に書いてあるストレッチやトレーニングのような、本質的に面白みの無い作業を、「ヘルシープログラマになるため」実施するっていうことは、果たして続けられるものなのでしょうか。 (「続けられるぜ!」という人は是非続けてください、効果は絶大です!!) 自分はこの本だけでスポーツを継続的に行うようになるのは、まず想像できません。

ではどうしろというんだという事になりますが、できれば自分が楽しいと思う活動を1つだけでも見つけることが、一番効果的だと感じています。

その点巻末に紹介されているIngress、素晴らしいですね!ハマってる人が周囲にたくさん居られますが、何も運動していない時と比較すると、きっとすっきりとした頭でよりよいプログラミング生活(そして美味しいお酒生活)を送られているのではないかと想像致します。「やった、健康診断で全部Aになった」という人の話も耳にしました。

ボルダリングも素晴らしいです!熱中している間に筋肉つきそうですし、この体重ではアカンとダイエットへのモチベーションにも繋がるのではないでしょうか。ボルタリングやってた知人もそんな感じでしたし。

で、自分の場合はというと...

合気道

社会人になってはじめてみたものの、縦社会っぷりが「そんなの会社で充分っす」ってことで半年で挫折(へたれ

バドミントン

中学生の頃から7年位やっていた。自宅に居た頃は家から徒歩5分の体育館でやっていたので手軽に継続。就職後は会社にバドミントン部があったので続けたが、転職してからは合うクラブが地元に無くて挫折。

ランニング

走るだけってのは自分には合わないと、1ヶ月で挫折

フットサル

好きだったけど人が集まらないとなかなかできず、計画が立ったとしてもコートが遠かったりして面倒に...

バスケットボール

身長高め/手がそれ以上に長めの自分は自然とセンターでリバウンド取る役になるんだけど、突き指だらけで業務に支障。楽しいんだけどなぁ

Wii

はじめの一歩レボリューションをクリアして終わり

テニス

はじめて7年目位、未だに継続。他のスポーツと比べると、スクールなど初心者が教えてもらえる環境がたくさんあるのが良く、はじめてでも辛くなかった。なにより自分にとっては面白い。レベルに応じてスクールや遊び場所を選択できるのが、飽きずに続けられている原因かなと推測。

上達してゲームができるようになれば、 テニスオフネット - テニス仲間探しの新しい形。テニスしたい、うまくなりたい! などで数百円でゲームを楽しむ事ができて手軽。 また草トーナメント(アマチュア同士の小規模な試合)に出てから「フィジカル強化しないと勝てないな」と思うようになり、筋トレや食事管理、ストレッチもやるようになった。

67歳になる義父もテニス現役、筋トレ始めて「サーブ速くなった!」とかやっていて、あぁあの歳になっても楽しめるんだなぁとモチベーションに。

ということで、個人的なおすすめはテニスです。動くもの見てると目の疲れも取れる感じしますし、腕振り回してると肩こりも軽減されます。Web業界の友人/知人が最近始めたので感想を聞くと、とにかく楽しそうです。

まとめ

Ingressでもボルダリングでもテニスでもランニングでも何でもいいんですが、何かそれそのものが面白いと思えるスポーツ的なものを1つでも見つけられたら、結果ヘルシープログラマへと近づけるのではないか、というお話でした。

ローカル開発環境のweb serverをthinからnginx + passengerにしてみた

Railsの重いアプリを動かしている際に、開発環境が遅かったので、使っていたthinからnginx + passengerに変えてみました。 rack-mini-profilerで測った結果、2倍位速くなった感じ。

時々nginx + passenger の組み合わせはやるんだけど手順を忘れがちなので、今回はメモしておくことにします。

参考にしたのは Local Rails Development with Nginx, Passenger 4, and Ruby 2 on Mac OS X | The Wayward Traveller だった気がするんだけど、色々つまみ食い的に読みながらやったので他にもあったはず...

前提

  • Mac OS Yosemite 10.10.4を使っています
  • rbenv、homebrewを使っています
  • すでに手元に開発中のRailsのプロジェクトがあります
    • 今回はVersion 3系でした

1. passengerを入れる

% brew install passenger

2. nginxを入れる

% brew install nginx --with-passenger

3. /usr/local/etc/nginx/nginx.confを編集する

http{ 内にpassenger_rootとpassenger_rubyを追加

http {
    include       mime.types;
    default_type  application/octet-stream;
    passenger_root /usr/local/opt/passenger/libexec;
    passenger_ruby /Users/{username}/.rbenv/versions/{your ruby version}/bin/ruby;

http{ 内にserver{} を追加、root 〜 access_logには自分が開発しているrails appの各ディレクトリを指定する

   server {
      rack_env development;
      listen 8080;
      server_name {yourapp.local.com};
      root /Users/{username}/project/{yourrailsapp}/public;
      access_log /Users/{username}/project/{yourrailsapp}/log/nginx_access.log;
      error_log  /Users/{username}/project/{yourrailsapp}/log/nginx_error.log;
      passenger_enabled on;
    }

4. /etc/hostsを編集する

  1. server{}内に追加したserver_nameを指定する
127.0.0.1 {yourapp.local.com}

5. nginxを起動し、動作確認

nginxを起動

% nginx

ブラウザでhttp://yourapp.local.com:8080にアクセス => 自分のRailsアプリが起動していることを確認する

rvmからrbenvに移行した話

今までずっとrvmを利用してきました。Railsを使う際には必ずgemsetを作り、bundle execなどとtypeしなくて良い環境にしておきました。

最近手元の環境が不安定になり、どうも自分の環境だけrspecが通らない、ということがありました。環境を構築しなおすのであればこの際、rbenvに移行してしまえ!ということで、実行してみたのです。

「rbenv rvm 移行」とググると記事はたくさん出てくるので、それらを参考にさせて頂きつつ粛々と実施。 (rvm implode実施時は、数年分のrvmのgemsetを一気に消すと思うとドキドキしました)

sstephenson/ruby-build · GitHub sstephenson/rbenv · GitHub RVMからrbenvに移行した手順まとめ · GitHub

githubへの記載や各方面のblogなど通りにやれば問題なくできたので詳細は省きます。が、1点詰まってしかも解決できなかったことがあったのでメモ。

rbenvでruby-2.1.1 を入れようとすると、

% rbenv install 2.1.1                                                                                                                                        [~]
Downloading ruby-2.1.1.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/c843df31ae88ed49f5393142b02b9a9f5a6557453805fd489a76fbafeae88941
Installing ruby-2.1.1...

BUILD FAILED (OS X 10.10.4 using ruby-build 20150803)

Inspect or clean up the working tree at /var/folders/_3/tbzctkwd5ndbyv_y0fq6mys40000gn/T/ruby-build.20150814163548.8417
Results logged to /var/folders/_3/tbzctkwd5ndbyv_y0fq6mys40000gn/T/ruby-build.20150814163548.8417.log

Last 10 log lines:
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking for cd using physical directory... cd -P
checking whether CFLAGS is valid... yes
checking whether LDFLAGS is valid... no
configure: error: something wrong with LDFLAGS="-L/Users/kouno/.rbenv/versions/2.1.1/lib "
make: *** No targets specified and no makefile found.  Stop.

うーん、何故でしょうねぇ......

brew doctorで怒られた箇所を全部直すとか、xcode入れ直すとか色々やったんですけど、結局解消しませんでした。 結局2.1.2を入れたら難なく入ったので、そのまま使っています。

rbenv とtypeするのに慣れておらず時々ひっかかってますが、とりあえず問題なく開発を続けることができております。