2016年10月16日日曜日

リポジトリ整理。githubからbitbucketに移した

自分へのモチベーションを高めるためにgithubで公開でリポジトリを作っていましたが、
現実的な問題として
あまりにも本当に見て欲しいのかわからないものが
見えているのもどうかと思って
プライベートリポジトリが無料で作れるというbitbucketに一部移した。
といってもgithubアカウントはそれはそれでstackoverflowやgitgistやらとの連携があるので
残しておくのだが最近気がつくと何かとサブスクリプション料金で色々引かれているので無料にできるものは無料にしておきたいものです。

githubからbitbucketにリポジトリを変更するコマンド

これを見て単にgit remote set-url originで向先を変えて再pushすれば良いものと思ったのだが鍵でPermissionエラーが出てしまう。

Gitで”Permission denied (publickey).” が出たときのメモ:Qiita

そんな手間でもないから、こういうときは新環境用に作り直したほうがいいということですね。

- by Mizuk

2016年9月19日月曜日

今年もあと3ヶ月だけど、、、(自分メモ)

去年パリに入ってから一念発起したはずが、
毎年のように日常に流され、気がつくと今年もあと3ヶ月とちょっとに。。。

今年の頭やりたかったことを思い出して見ると・・

■Elcodi http://elcodi.io/  10%ぐらい
SymfonyをECに特化させたプラットフォームみたいなもの。
きっかけはSymfony ConでMarc Morera氏のプレゼンが気に入ったら 、、、
でも最近見たら彼はこのプロジェクトを去ったそう。
それでも面白そうとは思うけど

■Symfony、Laravelのスクリーンキャストをこなす  50%?

Symfony knpuniversity
Laravel laracasts

実はLaravel自体は最近追っていないのだがLaracastsのほうが月10ドル程度で割安なのと、あまりフレームワークに限らない話(デザインパターンやフロント側技術など)も
しているのでわりと空き時間に見る。

Jeffrey Way氏のスクリーンキャストはなぜか聴きやすい。
とりたてて整理されている感もないし、どちらかというと結構行き当たりばったりで取ってるんじゃないかと思う回もあるのだが、かといって安っぽい感じはない。
声がいいのだろうか(実は母親が歌手だというのを前にインタビュー動画で見たのだが・・)。私もこれくらい説明がうまくなりたいと思う。


■そして、自分のプロジェクト 5% ・・・はあ
githubになんでもいいから自分で掘り下げていく部分を作ろうと思ったが、
いつもフレームワークのバージョンアップがあるとそっちに手を出したりして、
いつしか置き去りになってしまう。


残りの時間で何をやるか


毎年の自分のパターンを省みて見ると

1,2月 年末の休みもあって色々やりたいことが暴走している
3,4月 仕事が忙しくなってくる
5,6月 GWで集中が途切れる
7,8月 暑さにやられる
9月 暑さが長引く
10,11月 業績評価などを考えて焦り始める
12月 色々店じまい的なことをしてお終い

やはり年初にもう少し優先順位をつけるべきだろうか。
どうも私は途中の枝刈りが下手で
やることが増えるたびに色々なものの進捗が1/2, 1/4となっていっている気がする。

ということで、当面は今あるものを片付けたいと思う。

■Neo4jを活用したアプリ

Ansibleの練習に、CentOS用にNeo4jがwebで叩けるようになる環境構築のプレイブックをgithubbitbucketに作ったのだが、実はこれはもうちょっとアプリっぽくしたいと思っていたもの。なんとかしたい。

■スクリーンキャストの残り
アカウントで到達度を見ていると以外と終わっているのが多いのだが、
たぶん結構ながら視聴であまり理解せずに進めているのが多い。
今度は集中して見る。

■TensorFlow
デモ見てすごいと思ったり、ブックマーク集めはしているけど、
まだ手が出せておらず・・







- by Mizuk

2016年4月6日水曜日

2015 Symfony Conパリ編 出席の(反省)レポート  2.カンファレンス編


第2回は、カンファレンス編です。

ワークショップから変わって、本カンファレンスのほうは、
les Folies Bergère という劇場にて。
10周年イベントというだけあって、特別なのはわかりますが、
なかなか趣深いといいますか。

写真を見ていただくとわかりますが、本当に劇場です。

セキュリティガードが今回もいます。
会場がメイン会場と離れの映写室みたいのと2カ所になっているのですが、
プレゼンは両方で行われるので、
移動のたびにこのガードをクリアしないといけない。
でも仕方ないですね。

席とかも本場な感じ。そして若干座りにくい。




内装も、時代ものな感じです。

でもスクリーンさえあれば、ちゃんとカンファレンス会場らしくなるのですね。
video


カンファレンスの合間には、メインエントランスが、
本場料理人による立食ビュッフェとなります。



庶民くずれの私にはなんと呼ぶかわからない一口サイズのお菓子やら串料理(?)みたいなのがたくさん出て、とにかく並ぶのですが、あるので食べることに集中してしまいます。

1日目の内容

私が見たもの、きいて理解したものしかわかりませんが…

When E-Commerce meets Symfony by Marc Morera

Slideshare:http://es.slideshare.net/MarcMorera/when-ecommercemeetssymfonyparissymfonycon2015
ええと、これは朝いちであまり内容を覚えてないのですが、
一番ささったのは、

あるプロジェクト開発を始める時には
ベストなフレームワークをきちんと選んでやっているか?
と自問してください("Do I feel comfortable working with it?", "Choose the architecture that really fits your case")

というところでした。
あといろいろtipsがあったのですが、
自分で書いたメモが謎すぎて(そのときはすごいなるほどと思っていたのですが)。

あとMinimum Viable Productという用語。知らなかったのですが、
リーンでの用語らしい。「検証に必要な最低限の機能を持った製品」(http://www.loftwork.jp/column/2013/20131226_lean_startup.aspx)。

あと、Symfonyで作るのであれば、event-driven designであること忘れないように。
などのtips(詳しくはslideshareをごらん下さい)。

Doctrine 2: To Use or Not to Use by Benjamin Eberlei

こちらはワークショップでもDoctrineの講義をしていたEberlei氏。
といいつつ、これもメモした分しか覚えていない。

 Doctrineは80%のユースケースはカバーできるが、残りはできない、というか下手
 特に苦手なのは、複雑なビューやクエリ
    sqlserver と Doctrineは相性が悪い
 
今度はもっとまともなメモをとるか、忘れないうちに復習するようにしよう(気がついたら45日ほどたっていました・・・)。

ただ、日本人としては、
こういう話のほうが、やっぱり安定感があるのかなと思いました。
というのも、オーディエンスもフランス人でないにしてもEU圏として
ビジネスを絡めた話をしていると、やっぱり社名などでぴんとこなかったりするのですね(私が不勉強なせいもありますが)。
今度からは迷ったら、こういうのに狙いを定めるようにしたいと思います。

このあとは、1日目お疲れ様でした。
ゲーム大会とカラオケ大会は予定では今日でしたが、プログラムが大きく遅れたので明日になりました。そんなアナウンスなどの共有のあと、帰路についたのでした。


2日目

20M users in 19 countries with Symfony2 BlaBlaCar


私はここできくまでこのBlaBlaCarというサービスを知らなかったのですが、
ヨーロッパ圏では相当人気上昇中のサービスなようです。
AirBnbの車版みたいな感じでしょうか。知らない人の車に乗るなんて怖いですが…

内容は、
メモを見る限り、 do と don'tのtipsをわりと羅列していく感じで
いかにも現場ノウハウという感じでした。
まあスピードのある開発なら当然なのでしょうが
ある箇所にコード固めすぎて後で大変になったとか、
ビジネスロジックをこういうところに置いちゃだめよ、
とかそういう話だったと思います。

Matters of State by Kris Wallsmith

これはevent dispatcherを使って、Symfonyをステートマシンのようにしてプログラムするという面白い話でした。
webのUIはステートマシン、話から入って、
うまく命名規則をつけていけば、
以外とそれらしくプログラムができるというのを、
結構コード例を多く入れて説明していて、ほかのプレゼンに比べると
かなりノウハウ、テクニック寄りなものだったと思います。

このあと、ランチをできるだけただ食いして、観光に逃げました。天気が良かったです!




- by Mizuk

PHP7でSymfony2.5系のプロジェクトをcomposer installしようとしてエラー

> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache


                                                                                     
  [Doctrine\Common\Annotations\AnnotationException]                                  
  You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.  
                                                                                     


Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-install-cmd event terminated with an exception


                                                                            

こんなのが出て止まっちゃう。


https://github.com/symfony/symfony/issues/15576
http://stackoverflow.com/questions/34958319/phpdocumentor-2-and-php-7-with-opcache-issues-in-doctrine

 opcache.load_comments=1 or zend_optimizerplus.load_comments=1
このへんの設定がPHP7にはもう無いらしい。

ちょっと古いものを使って復習しようとすると
こういうところで引っかかるのですよね・・・。


- by Mizuk

2016年1月10日日曜日

2015 Symfony Conパリ編 出席の(反省)レポート   1.ワークショップ編


(↑これはカンファレンスの写真です。オフィスは下のリンクのgooglemapのを見てください。)

もう少し詳細な話を。もともと、後からまとめようと思っていたのです。
先月のSymfonyConParis2015の詳細を。
あれだけだとあまりにも印象ペースで情報が少なすぎると思ったので、
というわけで、今回からテーマ別に分けて、その時の内容を復習がてら、書きます。

というわけで、第1回目は、プレワークショップ編 。


プレワークショップはかなりの出費なのですが、
せっかく行くんだし、なかなかタイムリーな内容なのでこのさいと思って、受けました。


日程と内容

旅程としては前の土曜に出発して、日、月は調整&観光日。
1日火曜からをカンファレンスモード、としていました。
1日、2日はプレワークショップ(午前午後の部2つずつを組み合わせて4つ、受講するスタイル。1190ユーロ (157,765円)
3日〜5日は劇場でのカンファレンス。 379ユーロ(50,190円)

という構成でした。

後でお金の話は詳しく書きますが、そうです。高価です。これに旅費が入るのですから、macBookAirの新しいモデルとかBTOで贅沢に盛り込んで買えたはずです・・ 。

カンファレンスはパリの劇場とゴージャスですが、
ワークショップはSensioLabsのオフィス。
オフィスは、クリシーというパリのちょっと北の地区。
どうせ旅行なので観光も兼ねていると思い、オフィスの結構近くのホテルを探して、泊まりました。

1日は朝9時にオフィス突撃。
実は今回の目玉は、ワークショップそのものもあるのですが、
パリのIT会社のオフィスに潜入する、という庶民的な好奇心もありました。

時期が時期だったので、セキュリティは厳重。
エレベーターを上がった先のオフィスの入り口に着くと、
セキュリティガードの前で、一人一人、かばんを開けさせられました。

カウンターで身分証(=外国人である私はパスポート)を見せて受講証をもらう。
途中、廊下の壁はグリーンでなんかかわいい絵がペイントしてあって、
ああパリだな、と思ったり、これって、
Symfonyのコーポレートサイトみたいなカラースキームなのかな、と思ったり。

通された部屋は、ほとんど大学の講義室のような感じ。
ヨーロッパらしくセントラルヒーティングのようなものもあり、
昔いたイギリスのコンピューターサイエンス学部の建物を思い出しました。

講義内容


受講生は15、6人くらい。
1日目から2日目までで、受けたワークショップの内容は
 (1)1日目午前 Symfony3.0への移行
 (2)1日目午後 Doctrine2.0
 (3)2日目午前 Blackfireによるパフォーマンス測定
 (4)2日目午後 SymfonyでのRestful APIの設計


実用的だったのはなんといってもSymfony3.0の移行ネタ。
講師はNicolas GrekasというSymfonyのメインコミッターの方。
これは誰もが通る道だと思ったので、非常に良かった。
個人的にはLDAP認証サポートは、興味があり、
講義中に質問したのだが、「パラメタに認証用の内容だけつけたせば、できるよ」
というわりとあっさりした答え。これはまた後でフォローしてみようと思う。

午後のDoctrineは、
講師はBenjamin Eberlei氏、こちらは目新しい話ではないものの、堅実な話。
DB設計の話も当然入ってきましたが、
こういうのはどちらかというと聞いてから、
ああ、あそこの実装、こうするべきだったんだな、とわかるような話。
経験を重ねるごとに、もっと、勘がさえてくるだろうか。

2日目は少々ダレ始め。
午前中はBlackfireProfilerというパフォーマンスツールを
パフォーマンス改善。
「WallclockTimeとCPUTimeの違いみたいな話から始まって、
webサービスにおけるパフォーマンスとは何か、などのレクチャー部分は良かったが、
ツール部分はインストールがうまくいかず、
ほとんど他の人がやっているのを見ている状態。

orz反省・・・

何と言っても、github設定も含めて、作業用PCの設定は万全に。
これにつきました。

今回、ほとんどのワークショップは内容は
それぞれメールで送られているものの、
意図的なのかはわからないですが、
その場で講師がそのワークショップで使うgithubリポジトリを教えてくれたのですが、
そういう形式だということは、メールには書いていなかったので、
自分は、一生懸命VMに自分で一からSymfonyの環境を作るところで力尽きていました。

これには理由があって、
海外での盗難なども考えて、
普段違っているのとは別のmacbookAirを持ってきたのですが、
そういうわけでセットアップが旅行の準備と合わせて、
ほとんどぎりぎり(パリでホテルについてからも夜中にVMにPHPの追加ライブラリなどをDLする二日間)でgithubの鍵設定などもしていなかったのと、
その場でアカウント情報を忘れてしまっていて、
非常にそこで手間取ってしまいました。
ワークショップの案内メールには、
PHPから始まってSymfonyが動くサーバー環境はしっかり構築してきてください、
とは書いてあったのに、githubは書いてなかったのに〜。
でも予測できたことだったので、ちょっと残念。

ワークショップとかは1単位が3時間程度、そして最初40〜50分を講義に使うので、残る数時間のうち、10分とか20分とかでもロスすると、ついていくのに常にハンデになったりして、悲しい思いをしてしまうのは、日本の勉強会でも経験済みだったのに・・・


2日目午後は移動と観光用に時間を充てていたため、欠席。
申し訳ありません!決してさぼったわけではないのですが
私の滞在期間は土曜まで。クリスマス間近のパリですよ。観光しないと!

ワークショップの資料などはもらったし、ドキュメントもじっくり読んで復習してなんぼだとは思うので、全くの失敗だったとは思いませんが、
こういうのも 次海外ワークショップ参加のときは、課題になりそうです(そんな機会がまたいくつあるのかわかりませんが)。

- by Mizuk

2016年1月3日日曜日

大量画像ファイルの連番処理



ffmpegというソフトを使って連続写真を動画にするのがやりたかったのです。

結論を知りたい人はいちばん下のをみてください。

MacでスマホのSDカードに入った写真をうまくUSBでコピーできず、
Flickr Uploadというアプリでアップロードしたのですが、

kimg2150_23977558372_o.jpg

とかそういうファイル名になってしまっていてkimgNNNNの部分は数字なのに後ろに色々ついてしまってかなり面倒なことになってしまった。

そこから色々試行錯誤して、

○まず、__oというのが邪魔なので
http://uguisu.skr.jp/Windows/find_xargs2.html
を参考に変数展開を使って、_o.jpgをとって、.jpgをつけなおすことで、結果として_oをとるみたいな。

(コマンドは全部対象の画像ファイルが入っている状態で、実行。)

find * -maxdepth 0 -name "*.jpg" -print0 | while read -r -d '' file; do mv "$file" "${file%%_o.jpg}.jpg"; done

○次に、連番になってるのはIMGとかついてていいんだと思って、
最初の7文字だけとる。

for f in *.jpg
do
    foo=${f}
    foo=${foo:1:7}
    mv $f $foo.jpg
done

で、実はimgとかいらないので

for f in *.jpg; do
mv $f ${f#img};
done

さらに、ここまできて、ffpmegの入力は0001.jpgのように1から始まる連番でないといけないということに気づく。
いまの状態では

2034.jpg
2035.jpg
2036.jpg
2037.jpg
 :
 :

 みたいなものなので、全部1からふりなおし(ただしゼロ埋め)しないといけない。

x=1;
for f in *.jpg
do
    mv $f $(printf "%04d.jpg" $x)
    x=$((x+1))
done


○回転(jpegtran) (ひっくり返ってた時のみ)
たぶんこれはスマホで撮っていると気がつかないうちに上下逆になってたりすると思います。
逆になっている画像はjpegtranなるものを使って180反転。
http://robotics.usc.edu/~ampereir/wordpress/?p=702

このjpegtranは標準出力に画像のバイナリを出力するようなのでリダイレクトはつけないといけないみたいです。

for f in *.jpg
do
    foo=${f}
foo=${foo:1:4}
    jpegtran -rotate 180 --copy all $f > $foo.jpeg
done



◎結局、、これ一発でよかったんだ・・・

x=1;
for f in *.jpg
do
    foo=${f}
foo=${foo:4:7}
    mv $f $(printf "%04d.jpg" $x)
    x=$((x+1))
done


- by Mizuk