リーダブルコード勉強会に参加してきました.
今年の夏はOSS開発で最高の夏にしような
ということでチョットデキルメンターさんの皆様に囲まれてSEゼミさん主催のリーダブルコード勉強会に参加してきました.
目的は人のリーダブルなコードを盗むということ.
私は,研究でタスクの評価に関する研究をしていたので,他人のコードを評価するという企画に惹かれて参加しました.
しかし,実態は
×コードを評価(レビュー)する
◯ コードのリーダブルなところを発見する
技術や早さを競うのではなく,
また,コードの間違いなどを指摘するというわけでもありません.
いかに読む人にとって読みやすいコードを書くかという点が重要視されていました.
(そしてどれだけ書けるかとかも求められていません.最低限文法が理解できて,自分で調べることができれば大丈夫だと思いました. デバッグもメンターさんが新しい視点を提供してくれたのでなるほどと思うことが多かったです.)
実際に体験してみて
意識して人のリーダブルなコードを発見するという作業,意識して自分がリーダブルだと考えて記述した事を主張するというのは非常に新鮮でした.
自分が日常的に当たり前だと思ってやっていることが他人にとってはリーダブルであったり,普段書かないような記法で書いてあるコードが私にとってはリーダブルであると感じることが出来ました.
また,(ちょっとどころか現役の超優秀エンジニアの)メンターさんに直接レビューして頂けました!
意識して書いたコードに気づいて頂けたことはやはり嬉しかった!
本で書かれている「可読性の高いコード」は綺麗にわかりやすく加工されたものですが,それ以外(OSSや野生のリーダブルなコード)を実践的に学ぶ機会は中々ないですよね.
私にとっては,良い意味で期待を裏切られた形になりました.サイコー!
その後の懇親会では
また,自分は機械学習系に興味があったので,その筋に強い方とコンタクトをとってお話することができました.
勉強したことを箇条書きにメモ
一番はじめに実装したいことをコメントで箇条書きにし,その箇条書きの通りに実装していく.
広告
6月20日にはGitHub勉強会,27日にはOSSに関する勉強会,7月11,12日には本番のOSS開発が行われるので,興味がある方は是非一緒に行きましょう.
http://www.seplus.jp/sezemi/
Heroku + Rails4.2 + Devise + Bootstrap3系列で本番環境でログアウト(Sign_out)ができない問題
環境
Heroku
Rails 4.2
devise 3.5.1
Bootstrap3.1.1
起きたこと
rails4.2 + Deviseで,本番環境のみで発生するエラーです.
$git push heroku master
でHerokuにデプロイし,
$heroku open
でアプリケーションを立ち上げる.
Deviseの機能を用いて正常にログインはできていたのだが,ここでサインアウトを選択すると
The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you are the application owner check the logs for more information.
という内容のエラーが出る.
$rails s
でローカルで立ち上げた場合は正常にサインアウトができていた. 何だこれ?
解決策
JavaScriptが正常に読み込まれていないのが原因であった.
ローカルにpublic/assetsディレクトリが存在している場合は容赦なく
$rm -rf public/assets
を用いて削除する.
ここで再び,
$git add . $git commit -m "[コミット内容]" $git push heroku master
の手順でherokuにデプロイし,
$heroku open
で立ち上げる.
再び同じエラーが起きたが,今度はWebインスペクタを参照すると,
[Error] bootstrap-datetimepicker requires jQuery to be loaded first (undefined, line 0)
という内容のエラーが出ていた.
「jQueryをbootstrapより先にロードしてね」と言われているようなので,
app/assets/javascript/application.js 内で
//= require jquery //= require jquery_ujs
の2行を他のリクエストよりも優先的(先頭)に記述し直した.
再び,
$git add . $git commit -m "[コミット内容]" $git push heroku master
の手順でherokuにデプロイし,
$heroku open
で立ち上げると,今度は無事に成功!
scaffoldのdeleteが正常に行われない時や,
Railsで意図しない挙動を示している場合にはWebインスペクタの確認と,Javascript関連を当たってみると良いかもしれない.
(今回の場合で)やっちゃダメなこと
$git push heroku master
を行うと,自動的に
assets precompileしたのと同じになるらしい.
従って,あまり安易に
rake assets:precompile
するのは控えた方が良いかもしれない.
GitHubで芝生が何故かContributionsに反映されない時
僕はこれに気づかずに半年間芝生が生えませんでした!!!
芝生被害者の会を作りましょう.
起きた事と問題
共同開発などでpull requestを送ったり,mergeされたりした時にはContributionsに芝生が反映されるのに,
自前で開発しているアプリケーションをcommitした時にはなぜかContributionsに反映されないという問題にブチ当たっていました.
githubの仕様が変わったのかなと考えていましたが,そんなこともなく,悩んでいたところ解決方法が見つかったので備忘録としてアウトプットしておきます.
解決方法
GitHubページのEmailアドレスを確認する.
どうやら自前の開発環境とGitHubで登録しているメールアドレスが一致していない場合,正しくContributionsが反映されないようです.
Settings -> Public email から 登録されているEmailアドレスを確認
次に,自分の開発環境で
$ git config user.email
で表示されるアドレスを確認して下さい.
もし,このEmailアドレスが一致していない場合は,
$ git config user.email [example@exampl.com]
として自分の登録されているEmailアドレスを付与することで,変更する事ができます.
で,ここからが注意ですが,
自分のローカルのリポジトリ単位でこの設定を行ってください
逐一確認しないと,せっかく設定しなおしたのに芝生が反映されてない…なんてことが起こります.
自分がハマっていたのはこれだったのでご注意を!
追記 2015 10/15
$ git config --global user.email [example@exampl.com]
ここでglobalオプションを明示的に指定することで,おそらく以降の設定が不要になります.
確認したところ,草が反映されていない以前のリポジトリにはやはり逐一指定する必要がありそうです.
参考
Why are my contributions not showing up on my profile? - User Documentation
GitHubのYour Contributionsが反映されない - Qiita
GitHub Contributions 色つかない(草生えない) - Ryusuke Fuda's Tech Blog
Mac OSX で gem install twitter できなかった話
環境
Mac OSX Mavericks
ruby -v
で念のため rubyのver確認
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-darwin13.0]
エラー内容
$ gem install twitter
したら
Building native extensions. This could take a while... ERROR: Error installing twitter: ERROR: Failed to build gem native extension. /Users/[user_name]/.rvm/rubies/ruby-2.1.4/bin/ruby -r ./siteconf20150521-83034-htbchk.rb extconf.rb creating Makefile make "DESTDIR=" clean make "DESTDIR=" compiling ruby_http_parser.c gcc: error: unrecognized command line option '-Wshorten-64-to-32' gcc: error: unrecognized command line option '-Wdivision-by-zero' gcc: error: unrecognized command line option '-Wextra-tokens' make: *** [ruby_http_parser.o] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/[user_name]/.rvm/gems/ruby-2.1.4/gems/http_parser.rb-0.6.0 for inspection. Results logged to /Users/[uesr_name]/.rvm/gems/ruby-2.1.4/extensions/x86_64-darwin-13/2.1.0/http_parser.rb-0.6.0/gem_make.out
解決方法
gccのエラーを吐いてるのでggって見るがこれといって解決に繋がるものはなかった.
$gcc --version
でversion確認すると,
gcc (GCC) 4.9.0 20130929 (experimental) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
と,gcc 4.9.0になっていたので,gccのversionの問題かと思ってgcc 4.2.Xに戻してみたがそれも上手く行かず.
困ったので,
$ sudo rm /usr/local/bin/gcc $ sudo rm /usr/local/bin/g++ $ sudo ln -s /usr/bin/gcc /usr/local/bin/gcc $ sudo ln -s /usr/bin/g++ /usr/local/bin/g++
$gcc --version
を再び実行すると,
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) Target: x86_64-apple-darwin13.3.0 Thread model: posix
となり,戻っていることが確認出来た.
この状態で
$ gem install twitter
を行うと無事にインストールできた.
これで今日からrubyで楽しいtwitterライフを送れます.
(インスコしておいてあれだけどやっぱりpythonに帰ります.)
Mac OSX Mavericks で Apache環境構築 + 任意のディレクトリからCGIプログラムの実行まで行う.
環境
Mac OSX Mavericks(このご時世にいつまで使うのやら)
Server version: Apache/2.2.26 (Unix)
Server built: Dec 10 2013 22:09:38
Apacheの設定
verの確認
ApacheはMac OSX Mavericksでは標準でインストールされているはずです.
従って,今回はそれを利用します(homebrewでぶっ込んで試したけど挫折した).
$ httpd -v
でまずはver確認から.
標準では
Server version: Apache/2.2.26 (Unix) Server built: Dec 10 2013 22:09:38
と出力されるはずです.
Apacheの起動確認
$ sudo apachectl start
で起動できます.
終了は
$ sudo apachectl stop
でOK.
設定ファイルを弄った後は
$ sudo apachectl restart
をして再起動してください.
http://localhost/
を参照すると起動が出来ているか確認できると思います.
設定ファイルの変更
標準では設定ファイルが /etc/apache2/配下に置かれているはずです.
今回はエディタのEmacsで編集を行うので
$ sudo emacs /etc/apache2/httpd.conf
で編集を行います.
変更箇所
1カ所目
ユーザディレクトリを許可するモジュールをアンコメントアウト
LoadModule userdir_module libexec/apache2/mod_userdir.so
デフォルトではコメントアウトされているので外します.
2カ所目
#User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf
同様にこのInclude文もコメントアウトされているので外します.
3カ所目
# # AddHandler allows you to map certain file extensions to "handlers": # actions unrelated to filetype. These can be either built into the server # or added with the Action directive (see below) # # To use CGI scripts outside of ScriptAliased directories: # (You will also need to add "ExecCGI" to the "Options" directive.) # AddHandler cgi-script .cgi
この最後の文も標準ではコメントアウトされているので外します.
ここで,rubyやperlなどをcgiプログラムで活用したい場合は
AddHandler cgi-script .cgi .rb .pl
のようにして追記すると良いでしょう.
任意のディレクトリを参照できるように設定
次にユーザディレクトリを設定します.
設定するためには
$ sudo emacs /etc/apache2/users/[user_name].conf
を行って作成する必要があります.
自分のuser_nameは
$ whoami
で確認することが出来るので,各自確認の上[user_name]部分を変更してください.
設定は以下のコードを入力してください.
<Directory "/Users/[user_name]/Sites/"> AllowOverride All Options Indexes FollowSymLinks MultiViews +ExecCGI AddHandler cgi-script .cgi Order allow,deny Allow from all </Directory>
Options Indexes FollowSymLinks MultiViews +ExecCGI
この+ExecCGIと,
AddHandler cgi-script .cgi
この一文がCGIプログラムを任意のディレクトリで実行するために重要になります.
任意のディレクトリを設定するには
<Directory "任意のディレクトリ"> </Directory>
とすれば任意のディレクトリを設定することができる(はず)です.
CGIプログラムを動かすための準備
ここまで設定が完了したら,実際に動かすために準備を行います.
$ cd $ mkdir ~/Sites
としてSitesというディレクトリを作成します.
続いてディレクトリのパーミッション(アクセス権限)の設定を行います.
$ sudo chmod 755 ~/Sites
としてアクセス権限を変更します.
$chmod 755 とは
- 所有者:読み出し,書き込み,実行が全て可
- グループ:読み出し,実行が可
- その他ユーザ:読み出し,実行が可
という状態に変更する事を指します.
CGIプログラムを動かす
いよいよCGIプログラムを動かすためのプログラムを書きます.
$ cd ~/Sites $ emacs test.cgi
として~/Sites 配下にtest.cgiというファイルを作成します.
内容は以下のような簡単なものに.
#!/usr/local/bin/ruby print "Content-Type: text/html\n\n" str = "Hello World" print str print "\n"
作成後は先ほどと同様にパーミッションを設定します.
$ cd $ sudo chmod 755 ~/Sites/test.cgi
ここまで完了したら,
$ sudo apachectl restart
として再起動をかけてください.
http://localhost/~[user_name]/
を入力して何か表示されていれば成功.
http://localhost/~[user_name]/test.cgi
を叩いて
が表示されればOkay!
エラーが出る場合は
これはmacの場合に限るかと思いますが…
$ tail -f /private/var/log/apache2/error_log
これで適宜エラーログを確認することが出来ます.便利!
おつかれさまでした.
何か間違い等ありましたらコメントお願いします. 適宜修正いたします.
mastLTに参加して
いわゆる雑記です.
5/2にITF大のmastが中心となってワイワイ話すmastLTが開催されていました.
私は特に喋っていないので感想だけ.
みんな喋るのうめぇ!!!
これに尽きます.
内容は本当に人それぞれでした.
特に技術的な事を話さないで好きな定食屋の事を話す人もいましたし,頑張ってツインテールになってる人もいましたし,おっぱいフェチな人もいましたし,世界は広いですね.
しかし,これらすべてに共通して言えることは,プレゼンがとても面白いということです.
(主観ですが)面白いプレゼンをするためには,人に伝える力があるとかプレゼン自体の実力があるとかそういう事を抜きにして,自分が与えられた場を楽しんでいるかが重要な気がします.
研究発表でもなんでもそうですが,楽しそうに話している人のプレゼンはとても面白い.
自分が楽しいと感じる分野の事って自然とハキハキと,嬉々として人に伝えられますよね.
それを伝える規模が大きくなると委縮しがちですが,発表者の方々は場を楽しんでいる感が良く伝わりました.
重要なのは,自分が楽しいと思う内容を楽しいと思えるような場にして伝える事かなというのが所感です.
私自身も楽しく学ぶことが出来ました.ありがとうございました.
話は変わりますが…
今日(昨日5/4)はkosenLTがあったみたいですね.
10年入学15年卒の全国の高専生が集まってワイワイやる会です.
僕は高専時代の友人達と飲みに行く機会があったので出席しませんでしたが,友人が何名か行っていたようなので羨ましい限りです.
mastLTでもそうですしkosenLTでもそうですが,こういった場に参加すること自体のリスクというか抵抗がある方は割と多いみたいですね.
しかしそれ以上に参加する価値はあると思いました.色々な人の話が聞けるのはそれだけで価値がある事だと思います.
5/8にはklisLTが,5/15には工シスLTが開催されますね.このような学生主催のイベントが積極的に行われているITF大は本当に恵まれていると感じました.
編入生主体のLT(3penLT)も企画されているそうなので私もお喋りしようかなと考えています.
先日着任された落合先生も仰っていましたが,このような「正の同調圧力」は誰に対してもプラスに働くと思います.
積極的に波に乗っていきたいですね.