トミールの技術系日記

忍たまはじめました

みんGo読んだ!

非プライム民なのでやっと読めました!

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

かかか かわいい! 我々が求めていたのはゴルーチンだとか静的型だとか充実したユーティリティとかじゃなく、かわいいキャラクターだったのか!と思わせられます

私は業務ではちょっとしたAPIサーバー書いたくらいです。

  • GOPATHとか、ハマりやすい流儀まわりで始まってくれるのがいいですね。
  • さいしょの雛形みんなどうやってつくってるのかなーと思ってたのですがディレクトリやMakefileの例などあってよかった
  • CLIの構成あたりも。
  • 爆笑(?)オヤジギャグのかわりに「「第2章 Windows」」という方向のまじめギャグがよかった
  • reflectionは大人になったら読みます
  • testはExampleのが多めに書いてあっていいですね。あの機能好き。モックとかも現実的

全体的に、go-tourと実際業務の間を埋めてくれるような内容で、雑誌のようなライトさでフムフムいいながらさくっと読めて今日から使えるのがいいなとおもいました 😊

今週末、筆者のひとりでもあるすずけんおつかれさまでした会的なのを弊社のバーでやるので参加者LT発表者募集中です! ↓↓↓

connpass.com

イラストレータデビューされた牧さんのビールGopherグッズ好評発売中です ↓↓↓

https://suzuri.jp/lestrrat

なんでPimple、ArrayAccessなのかな〜

ふつうに $container->get('namae')でいいじゃんね作者がphp人生一度は訪れるというArrayAccess期だったんすかね〜と思ったのですが、


ところでArrayAccessとは!

これ。PHP: ArrayAccess - Manual

連想配列のようにアクセスできる(内部でメソッドが呼ばれる)というちょっとかっこいい機能である。perlだとTIEぽいかな。


もしコンテナに(オブジェクトではなく)連想配列を突っ込んで使う場合に、5.3でも直接その値のキーにアクセスできて便利だからじゃないかなーと思いました。

PHP 5.4 以降では、関数やメソッドの返す結果を直接配列として扱えるようになりました。 以前は、いったん一次変数に代入しないと配列としては扱えませんでした。

why Pimple uses ArrayAccess interface?

みたいな項目がトップにあっても良いかと思ったのですが、5.3が過去のものになりつつありますのでまあいいです

use Pimple\Container;

$container = new Container();
$container['namae'] = array('foo' => 'foooo');
print_r($container['namae']['foo']); // => "foooo" 5.3でも取れるぅ
function get($key)
{
    $c = array(
        'namae' => array( 'foo' => 'foooo')
    );

    return $c[$key];
}

print_r(get('namae')['foo']); // =>  PHP Parse error:  syntax error, unexpected '['

fabricとhostと私 2014

fabric、fabfileかかなくても

fab -H "web1, web2" -- "hostname"

みたいにできるのがかわいくて好きだ

ところで、2.x系では @task(depends="foo") のような依存関係が解決されるAPIが追加されるらしいのだけど、今versionではそれは無いので自分で書くことにした。

fabric.api.task()をwrapperした@commandというデコレータとすることにした。@taskの代わりにこれを使っておくと、envを調べてて規定の前処理がおわってないとそもそも動かない、みたいな。

デコレータ機能が追加されてからまじめにpython書いたのがひさしぶりだー。@command@command()両方をサポートしないといけなくなるとデコデコしてくるのがアレだな。

@runs_once
def check_env():
    # なんかしらべて場合によってはabort()
    pass


def command(*args, **kwargs):

    # @command(role="web", ...) or just @command
    invoked = bool(not args or kwargs)

    def deco(func):

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            execute(check_env)  # <-- check env!
            return func(**kwargs)

        if len(kwargs) > 0:
            return task(**kwargs)(wrapper)
        else:
            return task(wrapper)

    if not invoked:
        return deco(args[0])
    else:
        return deco

とちゅうでハマったのだけど、fabricはtaskの対象hostの扱いがややカオスなので要注意だ。

env.hosts, -H, -x@hosts=...、roleなどが関係してくる。あと、Taskクラスはインスタンス化される前にその対象ホストが解決されるので、タスク自体が動き出した後はできることが限られているのが要注意。

あと、execute()documentでwarningされているように、気をつけないと同じタスクが倍々に動いてしまうことがあるので要注意。

そこだけ気をつければ思ったようにうごいてそこそこ良かった。

brew install putty

しまったputtyの鍵ファイル.ppkだけあってlinuxで使う鍵ファイルつくってないやー

brew install putty

すると、puttygen が入る。yumとかでもputtyパッケージであるぽい

ppkから秘密鍵に書き出すなら

puttygen github-vg2.ppk -O private-openssh -o ~/.ssh/github-vg2

こういうのでいける。

metacpanに++しよう

https://www.facebook.com/n.tomita/posts/10151588193792010

めんどくさいことはいつまでたっても面倒なので、簡単なところからまず

perlのエコシステムであるcpanについては、ひごろ search.cpan.org ではなく https://metacpan.org/ を使うようにし、一案件終わったら(もしくはなんとなくイイネと思ったらすぐ) 該当モジュールを ++ すると良いんじゃないか。

Makefile.PLとかcpanfileからモジュール抜いてまとめて++する君があってもいいかもね

gemなどにもいえることだけど、モジュール検索エンジンは一番いいのを出すというところまで進化するのむずかしい。モジュールの更新量はなんだかんだでハンパないし、世の中的にどんどんキラキラネームが増え名前だけじゃ何をしたいものなのかわからないことが増えつつあり、ふつうにgoogleすると古い情報がおおい。

前に本を書いた時にきにしていたことはこのへんに書いたけど いまだと metacpan.org の ++ がそんだけでだいぶ良いんじゃないか。(search.cpan.orgにも★5方式のratingがあるのだがamazonとかitunes storeみたいにその方式だとありがちな★1つけて文句を言う場を兼ねているのであてにならない)

ログインして++すると公開情報となるので、++が増えたあとも++主によるスコアリングとかやりようがある。

https://metacpan.org/favorite/recent

※watcherに、あの会社あらたにあのジャンルを取り組み始めたーなどがわかる場合もあり、そういうのがセンシティブな職場の人はまとめてやるとかそういう方が良いかも知んない。これはbookmarkにもいえる

ここまで書いておきながら、ぼくがけっきょく(まだ誰も++していなかった!)サイクロンさんのGCMのやつにしか++していないことがわかっちゃいます。てへ

エクセルと私 2013 春

DBにつっこむ元データ、「1行1レコードの感じで作ってくれればいい感じにとりこみます〜」、とだけ言っておいたもののうっかり放置していたら驚きの、大量複数シート、セルの結合などを駆使したリッパなエクセル出来上がってしまっていてOMG

xlsのパースを・・・ 2013年にやることになるとは。 何が良いのだろう・・・ (google docsに上げてそっちのAPIを使う手もあるがね。)

IRCで聞いたら他部署で PHPExcel とやらを使った事例があったとか。
見てみたらなんと! ドキュメントがわざわざword形式でできているww
なかなかのこだわりですねww ウケた

pypiみてたら、超かっこいいキラキラネームがあった
https://pypi.python.org/pypi/excellent/0.0.2

エックセレントゥゥ!

ステキ (・◡・ 人)
ただしこいつwrite用だけだ。そんなにエクセレントじゃない

けっきょくcpanみてたらExcel::Tableというのがある。こいつはラッパーモジュールで、どうやらxlsについては今でもなつかしのSpreadsheet::ParseExcelが、そしてxlsxについてはSpreadsheet::XLSXというのを使っている。

use strict;
use warnings;
use utf8;
use lib "extlib/lib/perl5";
use Data::Dump qw/dump/;

use Excel::Table;

my $excel = Excel::Table->new;
my $book  = $excel->open('DB/おさっしください.xls');

for my $sheet ($book->worksheets) {
    warn $sheet->get_name;
    dump $excel->extract($sheet->get_name, 0); // disable title_row
}

フツーにうごく。よかった。

ただし

_人人人人人人人人人人_
> 突然のLog4perl! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

まあいいけどね。

あと https://metacpan.org/author/JMCNAMARA Spreadsheet::ParseExcel の作者のアイコンが怖い ( ;д;)

f:id:tomi-ru:20130409184450p:plain

こっちを何かが見ている!

これからブログやるなら

Tumblrが一番いいと思う

  • 独自ドメインが使える
  • もともといいデザインがそろってる(比べてみるといい)
  • HTML/CSS/Javascriptを編集できる
  • 自由に「ページ」を追加できる
  • Markdownが使える
  • 複数ブログを使う前提でつくられている
  • とはいえパッと見はたくさん書けるtwitter的になっている

あたらしくブログ系サービスつくるところはちゃんとTumblr研究したらいいとおもう