シェルスクリプト書くときのテンプレ
特に内容はない
gitのpre-commitのでphpの構文チェックとmasterへのコミット禁止
対象のリポジトリで実行
$ touch .git/hooks/pre-commit $ chmod 755 .git/hooks/pre-commit
事前準備はこれでOK
#!/bin/sh ROOT_DIR="$(pwd)/" LIST=$(git status | grep -e '\(modified:\|new file:\)'| grep '\.php' | cut -d':' -f2 ) # syntaxエラーがあるファイルはコミット禁止 ERRORS_BUFFER="" for file in $LIST do ERRORS=$(php -l $ROOT_DIR$file 2>&1 | grep "Parse error") if [ "$ERRORS" != "" ]; then if [ "$ERRORS_BUFFER" != "" ]; then ERRORS_BUFFER="$ERRORS_BUFFER\n$ERRORS" else ERRORS_BUFFER="$ERRORS" fi echo "Syntax errors found in file: $file " exit 1 fi done # マスターへのコミット禁止 branch="$(git symbolic-ref HEAD 2>/dev/null)" || \ "$(git describe --contains --all HEAD)" if [ "${branch##refs/heads/}" = "master" ]; then echo "Do not commit on the master branch!" exit 1 fi
動かす
予め事故ってるPHPファイルを用意
$ git st On branch master Your branch and 'origin/master' have diverged, and have 2 and 5 different commits each, respectively. (use "git pull" to merge the remote branch into yours) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.md new file: index.php $ git add . $ git commit -m 'test' Syntax errors found in file: index.php
その他全然試してないから事故ってるかも
ナレッジ/ノウハウ情報共有サービスであるlodgeを動かしてみた
ロッジと呼びます。 イントラネット限定でも使える、ナレッジ/ノウハウ情報共有サービスです。 手軽に導入できて、チーム内全体の情報共有やナレッジ蓄積の手助けができることを目標としています。
これをVagrant上で動かしてみましたが、いろいろハマったのでメモ。
まぁRailsとRubyとMySQLを動かすセットアップと言ってもいいかもしれない。
事前準備
セットアップ
ruby install
sudo aptitude update sudo aptitude safe-upgrade sudo apt-get install ruby
gem install
$ sudo aptitude install libyaml-ruby libzlib-ruby libopenssl-ruby ruby-dev $ wget http://production.cf.rubygems.org/rubygems/rubygems-2.4.1.zip $ unzip rubygems-2.4.1.zip && rm rubygems-2.4.1.zip $ cd rubygems-2.4.1 $ sudo ruby setup.rb $ gem -v 2.4.1 $ which gem /usr/bin/gem $ gem env | grep 'GEM PATHS' -A2 - GEM PATHS: - /usr/lib/ruby/gems/1.9.1 - /home/vagrant/.gem/ruby/1.9.1 $ echo 'export GEM_HOME=/usr/bin/gem' >> ~/.bashrc $ source ~/.bashrc $ gem env | grep 'GEM PATHS' -A2 - GEM PATHS: - /usr/bin/gem - /home/vagrant/.gem/ruby/1.9.1
bundle install
$ gem install bundler
lodgeのセットアップ
$ git clone https://github.com/m-yamashita/lodge.git $ cd lodge $ sudo gem install json $ sudo bundle install
エラー対応
# bundle error出る $ sudo apt-get install g++ $ sudo apt-get install libmysqld-dev # mysql2が入らん $ which mysql /usr/bin/mysql $ sudo gem install mysql2 --with-mysql-lib=/usr/lib/mysql # rails server叩け無い $ rails server -e production /usr/lib/ruby/gems/1.9.1/gems/execjs-2.2.1/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable) $ git diff diff --git a/Gemfile b/Gemfile index 05a476e..9d1b7c2 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .js.coffee assets and views gem 'coffee-rails', '~> 4.0.0' # See https://github.com/sstephenson/execjs#readme for more supported runtimes -# gem 'therubyracer', platforms: :ruby +gem 'therubyracer', platforms: :ruby $ bundle install $ echo 'export RAILS_ENV=production' >> ~/.bashrc source ~/.bashrc
rails起動後、新規ユーザーが登録できない
- RailsのActionMailerでメールを送信する(Gmail経由) - Qiita
- 普通のgmailならマニュアル通りだったが、GoogleAppsを使ってたのでどう設定したらわからなかったので
PCからfacebookを見た時にスタイリッシュにするツールの紹介
twitterのTLに流れてたらいいのを見つけたので紹介
普段のFacebookの画面に広告とかいろいろ入っててめんどくさいので、それを削除してクリアにしてくれるやつです。
eramdam/BetterFacebookIsBetter
ChromeやFirefox、safariで動くようですが自分はChromeでしか使ってないです。
びふぉーあふたー画像
適用後の画像がGithubに貼ってたあったので直接ここにも貼っときます。
やってることは特定のサイトのcssを上書きするアドオンに広告等に使われてるのをCSSで無理やり消してます。
自分はこれにプラスしてCSSをいじって右のサイドバーにある何時間前に誰々がログインしていたってのもついでに消してます。
okbm/BetterFacebookIsBetter
メリット
- 見た目スッキリ
- 色も白基調になり見やすい
デメリット
- Facebookのイベント参加とかたまーにするときに参加者一覧が見れなくなるのでもし見たい場合は手動で一次的に無効にしないとだめ
- またFacebookの見た目がリニューアル等で変わるとまた設定しないとだめ
- (デメリットじゃないが…)設定は端末ごとなので複数のPC(会社と家とかとか)に同じ設定を入れないとだめ
鬱陶しい広告が消えるし、誰が何分前にログインしてたみたいなストーカーっぽい情報も見なくて済むので単純にフィードを見るだけのシンプルな使い勝手になるのでオススメです。
debianの文字化け対応メモ
何かとググって探したりしてるのでメモっておく。
前提:vagrantを使っていじってるときにgit diffやtigの日本語が化ける ※まぁvagrantの設定に入れたらいいと思うが…
swap<E7><AD><89><E3><81><AE><E3><83><95><E3><82><A1><E3><82><A4><E3><83><AB><E3><82><92><E4><BD><9C><E3><82><89><E3><81><AA><E3><81><84>
こんな感じになる
対応方法
$ sudo aptitude install locales $ sudo dpkg-reconfigure locales # GUIっぽい画面が立ち上がるので、ja_JP.UTF-8をスペースで選択する # .bashrcも以下の一文入れておくこと export LANG=ja_JP.UTF-8
多分これで治る
追記
これでも治るかも
$ sudo localedef -f UTF-8 -i ja_JP ja_JP
Consumer Service Engineer MeetUp Vol.1 ~iOS編~の参加メモ
Consumer Service Engineer MeetUp Vol.1 ~iOS編~ - dots.
コンシューマ向けのWEBサービス(アプリ)の企画・開発・運営をしている会社によるエンジニア向けの講演、パネルディスカッション、懇親会を含めたMeetUpです!
に参加してきたのでメモを晒しておきます。
※その場で一気に書いてるので、誤字脱字はあるかも。
「禁断の開発話」 ヴァズ株式会社 清田氏
- SnapDishについて
- 料理好きのお料理SNS
- 開発から含めると3年で、ユーザー数は50万
- 開発環境について
- テストとデバッグ
- InstrumentsのLeaksとAutomationを利用
- CrittercismとCrashlytics
- A/B Testing(androidでやってる)
- 開発スタイル
- リリースサイクル
- KPIベース 1-2週間
- Scopeベース 2-4週間
- サポート
- zendeskを使ってエンジニア当番制
- 実際の開発
- 構成署(設計画面)を元に開発
- 紙を使って話し合い
- パッケージ配信
- Testfightを利用
- アクセス解析
- GA、スクリーンビューやイベントを多様
- サーバーサイドのロギングも多様
「Wantedlyを支える技術と開発フロー」ウォンテッドリー株式会社 川崎氏
- ウォンテッドリーのCTOで、社員第1号
- 開発フロー紹介
- プロトタイピング
- 開発
- iOS側
- フルネイティブでWebviewなし
- 定番のCocoaPodsを活用
- StoryboardとContainerを多用
- APIサーバー側
- Rails4でJSONAPIを用意
- Webと同じコードベース
- Webと同様にHerokuで運用
- インフラ
- AWSとかCloudFrontやS3、PostgreSQL使ってる(図なので、文字に書き起こすのはしんどい)
- iOS側
- CocoaPodsで管理するライブラリも事前に決めている
- http://cocoapods.wantedly.com/
- githubの盛り上がりとか分かるサイト
- コード管理
- テスト
UICollectionViewを使った商品一覧UIの改善(BUYMAアプリ) 株式会社エニグモ 大川氏
- アプリコンセプト
- 趣味のあった商品の出会い
- 好きな商品を気軽にチェックできる
- 旬な商品を把握できる
- 商品をリアルに感じさせるUI(Webと同じだと仕方ないので)
- リリースして、フィードバック
- 改善
- テーブルレイアウトとグリッドレイアウトの2パターンを用意
- VITableViewとUIConllectionViewをのハイブリッド
- content offsetを同期させて切り替えるようにする
- 改善した結果
- 問題はないが、アイテムがどこに行ったかという、キュー(手がかり)がない
- 2つのViewを作りこむ必要があるのでちょっと…
- その結果
- UICollectionViewのCollectionViewLayoutを使って解決した(よくわからんかったがデモがすげぇわかりやすかった)
- テーブルレイアウトとグリッドレイアウトをCollectionVeiwで切り替えるっぽい
- その他
- Reveal Appというアプリがとてもよい
- レイアウト周りで使える
- Reveal Appというアプリがとてもよい
- まとめ
「Web APIを利用するiOSアプリのテスト技法」 株式会社はてな 加藤氏
- id:cockscomb
- 京都からきました。
- はてなブログ作ってて、今日の感想とかはてなブログに書けばいいよ
- はてなで教科書作ってて、オススメ
- Hatena-Textbook/ios-app-development-with-web-api.md at master · hatena/Hatena-Textbook
- webAPI
- 何をテストするか
- 期待通りのHTTPRequestが発行される
- URL(ホストやパス、クエリ)、Http method,header,body
- 様々なHttpResponseに対するふるまい
- OHHTTpStubs
- HTTPの通信をstubする
- NSURLProtocolを利用している
- NLTHTTPStubServer
- アプリの内部でサーバーを動かす
- CocoaHTTPServerを利用
- http://localhost:12345 がデフォルト
- 実際のサーバーのように振る舞う
- HTTP bodyの様子を見ることができる
- エラーは発生させられない(ネットワークエラーとか無理)
- HTTP requestは一部使えない
- テストのメリット
- 自由なHTTPresponceが作れる
- 実際にサーバーにrequestしなくいてよい
- サーバーサイドの実装を待つ必要がない
- サーバーサイドの変更を事前に試せる
- いきなり壊れるのを防げる
「アンサーのグロースハックと開発手法」株式会社nanapi 小島氏
- Twitter:kozyty
- アンサーについて
- 今、8人で開発
- 限りなくフラットなチーム
- アンサーの場合
- ユーザーテスト
- 開発初期について
- ユーザーヒアリング
- 社内アルバイトスタッフさんに強力してもらう
- PMFを40%以上獲得するために
- Nの要素はあるか(スケーラブルポイント)
- ブレないためにもステータスメントの共有必須
- スケーラブルポイントがあるかどうかを念頭に
- ROIドリブンで要件プライオリティを決める
- PDCAサイクルを絶対に回す
- マネジメント対応版のアプリ
- 運用に便利な機能を備えたアプリを提供
- 複アカ機能
- 接続環境の選択
- KPI見れるとか
- 開発環境
- DebugとReleaseのみ
- TestFlightを利用
- JenkinsなどのCIによる配布はやめた
- 監視・解析
- kibana3でログ監視
- elasticsearch
- NewRelic
- 非エンジニアも見る見る
- グロースハックやってる?
- ミッション
- 細かな改善の積み重ねでユーザー体験を最大化していく
- ダイアログ表示、開発フロー、
- 分析
- 実行する前でもある程度わかる
- 分析結果によっては仮説を変更する必要がある
- 1%の改善に気づくための監視・解析環境は必須条件
- 削除人ボランティア募集
- 楽しく安全に使ってもらうために
- ガイドラインに沿わない投稿を監視
- 削除人というロイヤリティを得るだけ
- 募集したところ、かなりの数の応募があった
- 失敗体験は?
- 打率的には2割ぐらい
- まとめ
- 小さなことをコツコツと
- プレないステータスメントの共有
- ROI観点でのプライオリティの設定
- 最小単位での検証を行う
- 神速PDCA
「グロースハックにおけるiOSアプリのリリースサイクル最適化について」株式会社マインドパレット 小林氏
- Twitter:yuji_nano
- Snapeeeという女性向け写真サービス
- 改善サイクルの高速化
- iOSアプリにたちはだかる問題
- 申請から通過まで時間がかかる
- リジェクトされることがある
- iOSとAndroidで異なる仮設検証を行う
- 同じことをやるのは非効率
- それぞれ効果があったものだけを移植する
- WebViewを使う
- メリット
- アプリの申請なしでも仮設検証が回せる
- デメリット
- 初期実装が結構たいへん
- 専任の開発が必要なことが多い
- メリット
- デバッグ用の機能を作りこんで、テストを効率化する
- 毎週申請することに意味がある?
- 細かなアップデートを目的にしてはいけない
- アップデートのこういそのものによる一時的なアクティブ増は長続きしない
- 勇気を出して、手を動かすのをやめましょう
- 最低限作りこむと中途半端に作りこむは違う
- 細かなアップデートを目的にしてはいけない
- Garbage in garbage out
- 意識しよう
- グロースハックは何を目的にしているのか
- 正解に早くたどり着くため
- まとめ
- リリースサイクルの正解はない
まとめ
vagrant上のmysqlを5.6にUpdateしたメモ
以下の本を買ってみたけど、MySQLのバージョンが古すぎたので、Updateしたけど、いろいろ詰まったのでメモ
データベース徹底攻略 (WEB+DB PRESS plus)
- 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/15
- メディア: 大型本
- この商品を含むブログを見る
あんま人が読んでもわからないと思う。自分用メモの意味合いが強い
前提
- vagrant上のやつをアップデート
- mysqlのバージョンは5.1だったのを5.6.15までアップ
- もともと入ってるデータがないに等しいので、何もバックアップしてない
- レプリケーションは設定してない
- slowlogの設定はした
作業メモ
$ sudo service mysql stop $ sudo apt-get -y remove mysql-server mysql-client mysql-common $ sudo apt-get -y autoremove $ sudo apt-get -y autoclean $ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-debian6.0-x86_64.deb # ↑これが数十分かかった $ sudo dpkg -i mysql-5.6.15-debian6.0-*.deb $ sudo sh -c 'echo "PATH=$PATH:/opt/mysql/server-5.6/bin" >> /etc/profile' $ source /etc/profile $ sudo vi /etc/mysql/my.cnf basedir = /opt/mysql/server-5.6 $ sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql $ sudo update-rc.d mysql defaults $ sudo ln -s /opt/mysql/server-5.6/bin/mysqld /usr/sbin/mysqld $ mysql_upgrade $ sudo service mysql start vagrant@~$ mysql -uroot -e 'status' | grep -i 'server version' Server version: 5.6.15 MySQL Community Server (GPL)
途中でエラーった
$ sudo vi /etc/mysql/my.cnf [mysqld] log-error=/var/log/mysql/error.log $ sudo chmod o+rw /var/log/mysql $ touch /var/log/mysql/error.log $ sudo chmod o+r /var/log/mysql.error.log $ tail -f /var/log/mysql.error.log
基本は、/var/lib/mysql以下がおかしくなってたので、ib_logfile0やら、ibdata1を消したらOKだった。
slowlogの確認
$ sudo vi /etc/mysql/my.cnf + slow_query_log=ON + log_output=TABLE - long_query_time = 2 + long_query_time = 0 ※0秒にすると全ログ出るので、注意 [root][localhost][(none)]> show variables like 'slow%'; +---------------------+---------------------+ | Variable_name | Value | +---------------------+---------------------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /tmp/mysql-slow.log | +---------------------+---------------------+ 3 rows in set (0.00 sec) [root][localhost][(none)]> show variables like 'long%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 0.000000 | +-----------------+----------+ 1 row in set (0.00 sec) [root][localhost][(none)]> show create table mysql.slow_log; ~~~ 長いので省略 ~~~ # 適当にcreate database&table [root][localhost][mysql]> create database test; [root][localhost][mysql]> use test [root][localhost][test]> CREATE TABLE example ( id INT, data INT, ) ENGINE=InnoDB; [root][localhost][test]> show tables; +----------------+ | Tables_in_test | +----------------+ | example | +----------------+ 1 row in set (0.01 sec) [root][localhost][test]> select * from example; Empty set (0.00 sec) [root][localhost][test]> select start_time,query_time,sql_text from mysql.slow_log order by start_time desc limit 1; +---------------------+------------+---------------------------------------------------------------+ | start_time | query_time | sql_text | +---------------------+------------+---------------------------------------------------------------+ | 2014-03-16 15:45:57 | 00:00:00 | select * from mysql.slow_log order by start_time desc limit 1 | +---------------------+------------+---------------------------------------------------------------+ 1 row in set (0.00 sec)
まとめ
まだまだチューニングとか全然してないので、あとでアップデートするとは思うが、とりあえず、今のmy.cnfを貼っとく
prompt="[\\u][\\h][\\d]> " auto-rehash
↑のプロンプトの設定いじりと、auto-rehashによる補完は便利なので入れたおきたいところ