コーディング規約について

コンピュータ言語にはコーディング規約という、コードを書くときのルールのようなものがあります。
割とそういうものがあること自体は知られているのですが、自分自身はPerlのPBPが出たときに読んだぐらいで実際には、公開されている割とメジャーなソースコード基準で書いていたところもありそこまで気にしてませんでした。他言語やるときも言語学習を意識していたので真面目に参照してなかったんですが、思うところあって調べてみました。とりあえず気になる言語のStyleGuidを集めてみました。規約がかっちりしてる言語はこの辺にしたがっておいたほうが無難かと思われます。

この辺に準拠するメリットとしては、大規模開発において可読性を上げる。という点が大きいとは思います。可読性を上げることによって保守性があがるわけです。ただ、あくまでGuideであり規約でしかないので徹底されづらい気はしてます。goとかそうですけど言語によってある程度縛りをかけてしまうとか、Python見たいにindentを強要するとか、テストにその辺を守っているかどうかを検証するかしないと低コストで徹底するのは難しい気はしてます。やれるとすれば集団として一回それで勉強会をして周知するとかそういうことをやるしかないのかなとも思っています。


それにしても、Googleのスタイルガイドが強すぎますね。

  1. Python

+ https://www.python.org/dev/peps/pep-0008/

  1. Perl

+ http://perldoc.perl.org/perlstyle.html
+ http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
+ 参照
+ http://blog.64p.org/entry/2013/03/29/112910

  1. Ruby

+ 公式としては「ない」というのが解答のようです。
+ ただ、独自な規約のようなものは割とあって参考が参照のURLに書かれています
+ 参照
+ http://www.ruby.or.jp/ja/tech/development/ruby/050_coding_rule.html

  1. Java

+ 最近ではGoolgeのものが有名なようです。
+ http://google-styleguide.googlecode.com/svn/trunk/javaguide.html

  1. JavaScript

+ Mozilla当たりがそうかなとおもいつつここでもGoogle人気です。
+ https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml
+ https://developer.mozilla.org/ja/docs/JavaScript_style_guide
+ 参照
+ http://efcl.info/2011/0527/res2764/

  1. Scala

+ http://docs.scala-lang.org/style/

  1. Haskell

+ https://wiki.haskell.org/Programming_guidelines

Scalaで中規模のプロダクトで参考にしたいものを探したかったので抽出してみた

言語習得をしようとした場合、ある程度のところにきたら参考にしたほうがいいと思われる現実に動いているコードを見たくなります。ところが門外漢の場合はその分野はよく分からないので非常に探しづらいです。探せても、ものすごく規模の大きいコードだったりするので辛いです。そこで、

  • 世の中の公開されていて有用なコードは大抵githubにある
  • そういうコードは大量にstarがついている

この仮定に基づきgithub apiを使用して見た方が良さそうなプロダクトを出してみました。

  • starの数でorderをかけて上位をもらってきました。
  • さらにそこからsizeでorderをかけて表示しています

さすがにSparkは人気高すぎですね(sizeも大きすぎますが)。
単純にsizeで切り分けるとfpinscala当たりから下が割と見るのに楽そうかな
と思いました。

結果

size: 1301149 stars: 2975 url: https://github.com/apache/spark
size: 239164 stars: 3584 url: https://github.com/akka/akka
size: 184359 stars: 3696 url: https://github.com/scala/scala
size: 117478 stars: 5866 url: https://github.com/playframework/playframework
size: 117306 stars: 2580 url: https://github.com/twitter/kestrel
size: 104082 stars: 1725 url: https://github.com/scalaz/scalaz
size: 91885 stars: 1767 url: https://github.com/twitter/scala_school
size: 72924 stars: 1462 url: https://github.com/mesos/spark
size: 71091 stars: 1565 url: https://github.com/snowplow/snowplow
size: 48598 stars: 2097 url: https://github.com/sbt/sbt
size: 45302 stars: 1636 url: https://github.com/gatling/gatling
size: 33105 stars: 5941 url: https://github.com/PredictionIO/PredictionIO
size: 32448 stars: 1798 url: https://github.com/spray/spray
size: 32011 stars: 3226 url: https://github.com/twitter/finagle
size: 25413 stars: 3795 url: https://github.com/takezoe/gitbucket
size: 24529 stars: 1197 url: https://github.com/apache/kafka
size: 22289 stars: 1155 url: https://github.com/mesosphere/marathon
size: 20726 stars: 1962 url: https://github.com/twitter/scalding
size: 17587 stars: 2455 url: https://github.com/swagger-api/swagger-core
size: 13333 stars: 1508 url: https://github.com/scala-js/scala-js
size: 12360 stars: 1563 url: https://github.com/scalatra/scalatra
size: 11948 stars: 1430 url: https://github.com/twitter/summingbird
size: 6742 stars: 1152 url: https://github.com/fpinscala/fpinscala
size: 5850 stars: 1366 url: https://github.com/pocorall/scaloid
size: 5458 stars: 2432 url: https://github.com/twitter/flockdb
size: 5284 stars: 1951 url: https://github.com/twitter/gizzard
size: 5265 stars: 2032 url: https://github.com/twitter/snowflake
size: 4580 stars: 1157 url: https://github.com/GravityLabs/goose
size: 602 stars: 2947 url: https://github.com/lhartikk/ArnoldC
size: 494 stars: 1721 url: https://github.com/MojoJolo/textteaser

抽出用スクリプト

use strict;
use warnings;
use LWP::UserAgent;
use JSON;

my $url = 'https://api.github.com/search/repositories?q=language:scala&sort=stars&order=desc';
my $ua  = LWP::UserAgent->new;

my $response = $ua->get($url);

unless( $response->is_success ) {
    die $response->status_line;
}

my $json = $response->decoded_content;
my $data = decode_json($json);

for my $item ( sort { $b->{size} <=> $a->{size} }  @{ $data->{items} } ) {
    printf("size: %s stars: %s url: %s\n", $item->{size}, $item->{stargazers_count}, $item->{svn_url});
}

Diagrammixを購入してみました

Diagrammixというフローチャート、ダイアグラム、そしてUMLを簡単に作成出来るツールを購入してみました。個人的にはUMLモデルを作成出来る点も大きかったです。使い方も割と直感的で使いやすいので今のところ好印象です。

Diagrammix

Diagrammix

  • Deep IT Pro
  • グラフィック&デザイン
  • ¥2,000

短時間で人に認識を伝えるのが難しい

「コードがあれば」、「文章があれば」という方もいらっしゃられるし自身も昔はそう思っていたところがありました。しかし、ビジネスや発表などの要件で短時間で齟齬無く言葉だけで伝える、聞き取るのは割と高度な技術では無いかという(もちろんそれがすんなり出来る方もいらっしゃいます)と考えさせられることがたまにありましてこちらを補助としてうまく使えると思い購入してみました。

別途必要な物

ちゃんとした書き方を学ばないと宝の持ち腐れになりそうなのでその辺は別途書籍
を買って勉強したいと思います。

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

参考


[Mac] ハイクオリティなダイアグラムが簡単に作成できるアプリ「Diagrammix」1700円が日曜日まで無料セール中。 | Appleちゃんねる

異常に首と肩がコル原因がリュックだった

首と肩のコリ解消のために新しいPCリュックを買いました。中身を古いリュックとすげ替えて背負っているのですが体感的に半分以下に感じるぐらい負担がへりました。

経過

最近、異常に肩と首が凝って仕方が無かった。姿勢も昔に比べると改善させたし、何でこんなに凝るのかさっぱりわからず、日常生活で負荷がかかってるシーンはどこだろうと考えた結果背中にしょってるリュックに行き当たった。元々、肩がけ鞄を使っていたのだがこれが体の一方に負荷がかかるということでリュックに変えた。そのときはPCリュックだった。しばらくしてこれは容量が酷く小さいという理由で、気に入ってはいたが泣く泣く容量の大きい普通のリュックに変えた。

要因

PCリュックから変えたのが失敗の元だった。参考のURLを見ていただけるとわかるのだがPCリュック以外でああいう重いものを持ち歩こうとすると首と肩に異常に負担をかけるのです。

参考


オシャレで肩こりしにくいリュックを探し求めて大正解だった話(っ´ω`c) | ManiacPink-まにぴん-

空気を読むということについて考えてみた

もともと空気を読むということ自体が察するとか言外のものを読み取ることを言うとは思うのですが、たとえば武術であると師匠の意を察するということを生活や武術を通して知ることで物の真意を悟ったり考える力を養成することにより読む力を得たりします。これは言外のコミュニケーション能力を獲得することでとても便利なのですが、少ない情報と自ら何も発することなく意思決定をしてしまうというリスクも背負うことになります。達人ともなれば腕も違うしそもそも人生の経験値も違いますのでそのリスクも低くなりますが、そうでない人が言外のコミュニケーションと相手の行動を勝手に期待して空気を読んでしまうことは、双方プラスの方向で間違えてしまう分にはいいのですけどマイナス方向に働いたときにあまりよくない方向へ走って行ってしまうのではないかと思うのです、こういう風に考えたときに言語によるコミュニケーションは(こちらにもリスクはありますが)便利で積極的に使うべき代物なのだなと思いました。(自戒の念を込めて)

追記

何かで似たような感じの話が出てきた気がしてたんですがひょっとすると「7つの習慣」だったかも。あとで確認します。

7つの習慣-成功には原則があった!

7つの習慣-成功には原則があった!

  • 作者: スティーブン・R.コヴィー,Stephen R. Covey,ジェームススキナー,川西茂
  • 出版社/メーカー: キングベアー出版
  • 発売日: 1996/12
  • メディア: 単行本
  • 購入: 148人 クリック: 4,806回
  • この商品を含むブログ (784件) を見る

「脳の強化書」を読んだ

タイトルの示す通り脳を強化するための指針を示した本です。脳を思考、感情、伝達、理解、運動、聴覚、視覚、記憶といったエリアに分けその部分を鍛えるためにどうすればいいのかいう方法を具体的に示しています。特殊な何かをしなければいけないわけではなく普段の生活の中にその鍛える要素はあり、自分が無意識に苦手としているところが弱いところに当たっているということを読んでいると気づかされます。改善したいんだけどどうしたらいいのかわからないという方は一度手に取ってみると
いいかもしれません。

アタマがみるみるシャープになる! 脳の強化書

アタマがみるみるシャープになる! 脳の強化書