読者です 読者をやめる 読者になる 読者になる

LT発表履歴

01月24日
Symfony Meetup #8
Scrutinizerの運用の仕方の紹介
 
02月19日
雑兵MeetUp #3
最近バズったトイレ空き監視を二年前からやってた話
 
03月01日
PHP BLT #3
GitHubが落ちた朝は...
 
03月27日
Symfony Meetup #10
UP by jawboneのAPIを触ってみた
 
04月13日
 
雑兵MeetUp #4
春の大幅アップデートのお知らせ
 
04月21日
PHP BLT #4
オンプレミスJenkinsをやっと葬り去った話
 
05月26日
コード改善 meetup #1
CircleCI小ネタ集
 
06月28日
ゲームのKPI管理を極める!ゲーム×データ分析活用セミナー
現場リーダーが直面したデータ活用における”3つ”のハードル
(資料非公開)
 
07月1日
雑兵MeetUp #5
努力する方向が間違ってる気がする
 
12月22日
雑兵MeetUp #8
冴えてる彼女(Bot)の育てかた

Symfony Meetup #8 まとめ + LTしてきた(Scrutinizerの運用の仕方の紹介)

ご縁がありまして、人生初のライトニングトークをしてきました。

symfony.doorkeeper.jp

社長にLTしてみなよーとは前から言われてたんですが、
気がついたら日時も話す内容も決まってて後戻りできない状態に。
社長強い。

 

Symfonyもこの日が初めて、LTも初めて、という初心者マークに機会を下さった、
日本Symfonyユーザー会の@kseta19には頭が上がりません!
本当にありがとうございます!

「Symfony2本」写経教室

さて、最初は@hidenorigotoによるSymfony2ハンズオン。

基本からしっかり学ぶ Symfony2入門

基本からしっかり学ぶ Symfony2入門

 

Twitterでも絶賛されている入門書で、低レイヤーなところから丁寧に説明してくれる本。
作者の方と第4章まで実際にコーディングしました。
一人でやってたらあんなに早くキャッチアップ出来なかっただろうなあと。

会社の後輩を連れて行ったんですが、自分のキャッチアップで精一杯で他の参加者の方に大変お世話になりました...
当日のリポジトリ

 

LT大会(以下箇条書きメモ)

リーダーとマネージャー」 by @qckanemoto
マネージャーは部下に対して強制力があるが、
リーダーは主体的に従う存在であるべきではないか

オレオレSymfonyを作る」by @DQNEO
ライブコーディングで、Symfonyの設計思想を1つずつ追っていた

自前のバンドルをSymfony3対応した話」by @fivestr
Symfony3をサービスで利用してる人はまだ居なかった
2と3の違いはそんなにない。Formがちょっと面倒になったくらい

「UUUMにおけるSymfony2開発環境」 by yamaguchi
makeファイルでコミットフック等の環境統一をするのは良いと思った
makeならインストールしなくても絶対に入ってるしなあ。
関連記事が上がってたので紹介

system.blog.uuum.jp

 

Scrutinizerの運用の仕方の紹介」 by @rela1470
自分のLT。噛みまくってテンパりまくりました。場数を踏むしかない
参加者の中で使ってる方も何人か居て、スコアが9以上ばっかりだったのが凄い

GITで失われた歴史を取り戻した話」 by @smdhogehoge
趣味はgit blame
git凄い、意外となんとかなる
git rebaseが職人技って話があって、
実は弊社の運用にこれがあるプロジェクトがあるので改善したい

「xorshift」 by @bto
乱数のアルゴリズムについて
メルセンヌ・ツイスタより周期が短いけどまあ充分か
単純な行列計算とビットシフトだけなので早い
行列は最近の義務教育では習わないらしい
高専でよかった(3年までだけど習った)(習ったけど単位は取れていない)

LisketでのSymfony活用例紹介」 by @hidenorigoto
権限管理の話とか
正直なところほぼわからなかった
Symfony歴0日の状態なので当然だけど...
入門書読破したあとに見直したい

感想メモ

CodeIgniter(を元にしたオレオレフレームワーク)しか触ったことなかったのでちょっと不安だったけど、思想は一緒なのでそんなに拒絶反応はなかった
Symfonyデバッグ機能が使いやすい
やはり技術を外に出すって大事だなーと
どれだけ会社がレガシーな状態に陥っているのか感覚がつかめた
今年は積極的に社会に出ていこうと思った
PhpStormを使わないとかありえない

THETA Sの物理リモートシャッターをつくる

とうとう買ってしまいました、THETA S。

前にm15を海外旅行に行った時にレンタルで借りたんですが、
旅行の空気感を保存するにはもってこいのツールですね。

ただ、撮影する際にどうしても自分が写ってしまい、
それが恥ずかしくてあまり友達等に写真を共有できないのが悩みどころ。
スマートフォンのアプリからリモートシャッターは使えますが、
いちいち起動するのも面倒くさい。(ライブプレビュー等がついて便利ではあります!)

そこでいろいろ考えていたところ、Github上で素晴らしいソースを発見しました。

github.com

youtu.be

スマホのアプリを起動せずとも、5秒くらいで繋がる物理リモートシャッターが作れるのです!
早速自分なりに作成してみました。

材料はすべてスイッチサイエンスさんで購入。

合計3,155円。
開発ボード以外はすべてオプションです。なくても動く。凄い。
自分は持ち運びしやすい大きさを目指したので、ボタン電池駆動にしました。

さて、プログラムの書き込み等はgithubの通りなので留意点だけ。

  • Macの場合、adruino IDEのバージョンは1.66以下じゃないとビルドが通らなかった
  • フォルダ構成をESP_ThetaRemote/ESP_ThetaRemote.inoにする必要がある(IDEがやってくれる)

そんなところでしょうか。
それ以外は特に詰まらずさくさくと行きました。

f:id:rela1470:20151218172043p:plainパーツ一覧。これを全部フリスクケースに入れる!!!

 

f:id:rela1470:20151218172054p:plainぐちゃぐちゃ...LEDやボタンはホットボンドで固定。

 

f:id:rela1470:20151218172058p:plainはい、無理でした。ボタン電池だけ外側に。とても怪しい。

Gitbucket復旧

Gitbucketが起動しなくなった。
最近メモリ不足で強制的にkillしていたりしたので、その影響だろうか...

org.h2.jdbc.JdbcSQLException: レコード "[3196] stream data key:1416407 pos:11 remaining:0" を読み込み中にファイルの破損を検出しました。可能な解決策: リカバリツールを使用してください

dbのリカバリを試みる
http://piggydb.jp/d/336:突然の電源断などでデータベースが壊れた場合

h2*.jarは、gitbucket.warの中にある。
Jettyを使っている場合は/home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/ 直下に展開されている。

cd /home/gitbucket/.gitbucket
java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.Recover

data.h2.sqlができる。

java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.RunScript -url jdbc:h2:./data -user sa -script data.h2.sql -showResults

sqlファイルを元にDBを一から構築。エラーが出る。

CREATE TABLE O_19(C0 VARCHAR, C1 VARCHAR, C2 VARCHAR, C3 CLOB);
【SQLの中身】 Exception in thread "main" org.h2.jdbc.JdbcSQLException: 一般エラー: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:

削って再度流してみる。
だめだー。

どうやらREAD_CLOB_DBとある行が軒並みアウト。
全部削ってみる。
いけた。


data.mv.dbというファイルが生成される。元のファイル名と違うけどリネームしてOKか...?

mv data.mv.db data.h2.db

起動してみる。
だめー

2014-10-16 13:49:00.541:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/home/gitbucket/.gitbucket/tmp/webapp/},file:/usr/lib/gitbucket/gitbucket.war
org.h2.jdbc.JdbcSQLException: ファイル "/home/gitbucket/.gitbucket/data.h2.db" は、未サポートのバージョンか、不正なファイルヘッダを持つデータベースファイルです|Unsupported database file version or invalid file header in file "/home/gitbucket/.gitbucket/data.h2.db" [90048-180]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
        at org.h2.message.DbException.get(DbException.java:179)
        at org.h2.message.DbException.get(DbException.java:155)
        at org.h2.store.FileStore.init(FileStore.java:195)
        at org.h2.engine.Database.openFile(Database.java:527)
        at org.h2.store.PageStore.openExisting(PageStore.java:328)
        at org.h2.store.PageStore.open(PageStore.java:288)
        at org.h2.engine.Database.getPageStore(Database.java:2382)
        at org.h2.engine.Database.open(Database.java:663)
        at org.h2.engine.Database.openDatabase(Database.java:263)
        at org.h2.engine.Database.<init>(Database.java:257)
        at org.h2.engine.Engine.openSession(Engine.java:60)
        at org.h2.engine.Engine.openSession(Engine.java:167)
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:145)
        at org.h2.engine.Engine.createSession(Engine.java:128)
        at org.h2.engine.Engine.createSession(Engine.java:26)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
        at org.h2.Driver.connect(Driver.java:72)
        at java.sql.DriverManager.getConnection(DriverManager.java:571)
        at java.sql.DriverManager.getConnection(DriverManager.java:215)
        at servlet.AutoUpdateListener.getConnection(AutoUpdateListener.scala:239)
        at servlet.AutoUpdateListener.contextInitialized(AutoUpdateListener.scala:188)
        at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:771)
        at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)
        at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:763)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
        at org.eclipse.jetty.server.Server.doStart(Server.java:277)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at JettyLauncher.main(JettyLauncher.java:65)
2014-10-16 13:49:00.562:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:18080

GitHubクローンのGitBucketを10秒でインストールした

追記(2014/05/25)
調べた情報が古かったみたいで、GitLabも今は1〜5分でインストールできるらしい。
GitBucketがとても手軽なのは変わらないけど、GitLabのほうが高機能ではある。

GitHubクローンのGitLabを5分でインストールした - アルパカDiary
GitHubクローンのGitLabを1分で使えるようにする - Webtech Walker


開発用Gitサーバが先日の社内インフラダウンで巻き添えになって、
業務にむっちゃ影響が出た。


で、これを機にクラウド上にGitを移行しようと、
GitHubやらBitBucketやら調べてたんだけど、
どうもうちの会社の運用のままだと、
リポジトリ数やユーザ数が多くて結構なお値段が掛かりそうなことがわかった。
業務上全部プライベートリポジトリにしないといけないし、欲を言えばユーザもリポジトリも数制限かけられたくないし。


で、お決まりのパターンでOSSに流れて、
GitLabとかやってみたんだけど、むっちゃムズいのねあれ。
まともにインストールできん。


諦めて今使ってるgitosis(gitoliteでもないところがあれ)でもVPSにインストールするかー
と思ってた矢先に見つけました。


GitBucket



インストールしてから動くまでが簡単すぎてやばい。

wget https://github.com/takezoe/gitbucket/releases/download/1.13/gitbucket.war
java -jar gitbucket.war &

おわり。すげえ。すぐ動いた。初期設定では
http://hostname:8080/
root
root
でログイン出来る。


これだけでGitHubクローンが動く時代になった。やばい。
GitLabとはなんだったのか...


SSH経由でリポジトリへアクセスできる機能をONにする際、
SSH = OpenSSHという思い込みで、いつものサーバ接続用のポート10022にしてしまっていた。
@にご指摘頂き、専用のポートを用意したら普通に動いたので、
普通の人は多分躓かないところだとは思う...


あとやったことと言えば、気分的にgitbucket専用のユーザ用意したりしたくらい。
兼任社内インフラ担当からすれば機能的にもこれで十分ですわー

screenをきちんと使っているかチェックするシェルスクリプト

社内で超レガシーなデプロイスクリプトを使ってるんだけど、
どうせレガシーならもっとレガシーにしてしまえってことで、
chatworkに接続した。

デプロイ時に使われたscreenのセッション名を送信して、日時とデプロイ者を保存する目的。

で、社内ルールとしてはscreenを使う事になってるんだけど、
やっぱり使ってなかった人たちが出てきた。

そんなときに修正した内容。


$STY にscreenのセッション名が入っているので、それが定義されているか見る。

echo ${STY:?screenにログインして下さい}