AWSで再起動後、SSHが繋がらなくなった場合の対処法。SELinuxが原因でした。


開発サーバーの再起動テストを行ったところ、SSHが繋がらなくなった。

原因はSSHのポートを変えて、SELinuxのせいでsshdが起動せずというわけで単純なものだったが、切り分けには数時間を要した。

 

まず、こういう場合にはボリュームは生きているはずなので、別のサーバーへボリュームをアタッチすることを考え、別の適当なサーバを立ち上げアタッチしてみた。

すると、そもそもどのボリュームをマウントしていいかわからない問題が発生した。

AWSだとボリュームあとアタッチすると/dev/xvdk・/dev/xvdk1・/dev/xvdk2みたいに3個増え、どれをマウントすればいいの?っていう。

で、ここでAWSサポートに連絡して、一応lsblkっていうコマンドで確認すればいいですよーっていう連絡をもらった。

AWSサポート、マジ神。

 

で、マウントしたはいいが、どう問題をきりわけたらいいのかと悩み藁をもすがる気持ちで/var/log/messagesを見る。

すると、

 

Jul 19 23:00:31 localhost systemd: Stopping OpenSSH server daemon…

Jul 19 23:00:31 localhost systemd: Started OpenSSH Server Key Generation.

Jul 19 23:00:31 localhost systemd: Started OpenSSH server daemon.

Jul 19 23:00:31 localhost systemd: Starting OpenSSH server daemon…

Jul 19 23:00:31 localhost systemd: sshd.service: main process exited, code=exited, status=255/n/a

Jul 19 23:00:31 localhost systemd: Unit sshd.service entered failed state.

Jul 19 23:00:31 localhost systemd: sshd.service failed.

 

sshが繋がらないのはネットワーク系ではなく、特に問題なのは太字の箇所。

なんでsshdが繋がらないのか・・・・と思ってググったところ、selinuxという文字が。

sshのポート番号をデフォルトにするとselinux発動、みたいな。

こちらも藁をもすがる気持ちでselinuxの設定を見てみた。

 

コマンドは、sudo vi /etc/selinux/config。

そしたらenforcingになっていたので、disbaledに変更。

AWSのコンソールに戻ってボリュームのデタッチ&元のサーバにアタッチして再起動。

 

そしたら、、、、

 

 

無事SSHつながった。

ビール飲んだ。

300円くらいするやつ。

 

この記事を見て誰かもビール飲める状況になれば幸い。

AWSにベンダロックインされてしまっているのが心配


DynamoDBなんか使うともう他のサービスに移行できない、ベンダーロックイン状態になる。

何が悪いかというと、他のサーバーに移したりすることが困難になること。

他に魅力的なサービスができたとしても移行できない心配とかは無視してもいい。MongoDB/MySQLを利用しても移行のコストは同じだけかかるし。

 

あとはAWSがなくなったらどうすんだ?っていうリスクも。

後者は自社の方が無くなる可能性が高いのでほぼ心配はない。

 

唯一あり得るのは、不当な値上げ。

ただ、これはリザーブドキャパシティをあらかじめ買っておけばある程度は防げる。

 

一応、心配はしたものの大丈夫なような気がしてきた。

何か他に心配すべきことがあれば知りたい。

Amazon API Gateway / DynamoDB / Lambdaで数百万imp / 日さばいてみた

サービスの耐久性能を1日数百万impから1日数千万impに上げたいと考え、AWSのLambda / API Gateway / DynamoDBの構成を擬似的にテストしてみた。

たしかに、小学生でもスケールアウトができるDynamoDBとLambdaは最高で、価格も超安かった。

でも、1日数百万impだとAPIGatewayの金額がちょっと面倒臭い値段になる。

Dynamo / Lambdaは数千円 / 月で済みそうだったが、API Gatewayは数万円 / 月。

うーん、数万円はちょっともったいないので実装の時間ができるまで一時停止。

でも、導入は確実にしなければならないので、次再開したらリリースの予定。

こういう実験は常日頃からしておくと、値段感もわかるし新しい技術の勉強にもなっていい感じだと思う。

ビザスクでアプリ数百万ダウンロードの経験者から企画と企画を決めるノウハウを学んできた

開発中のアプリのコンサルを受けてきました

ビザスクというサービスを利用したところ、アプリを数百万ダウンロードのプロデューサー・ディレクター、ECで月商億以上の運用経験のある方からコンサルを受けることができました。

特に紹介、PUSH通知を用いたコンバージョンアップは経験者が一番よく知っていると思うんですよね。

結果、40,000円+3時間の時間だけで、様々な成功体験からコンバージョンが生まれそうなアイデア、無駄な機能開発の削減ができたと思います。

いきなり応募がモリモリくる

軽い気持ちで応募を出しましたが、ゲームやらない僕でも知ってるタイトルのプロデュサー・ディレクター、スタートアップからSIerまで経験したプランナーの方、他にも製菓系のネーミングで賞を多数受賞した方などすごい顔ぶれでした。

ミートアップ何回出てもこういう方に出会うことは少ないので、サーチコストが非常に安く済んだなーとこの時点で思いました。

では、後は効果はいかほどだったのか、どのようなものだったのか3人とお話しした感想をまとめます。

1人目:とあるスタートアップのプランナー

今回のアプリはECではないですがコマース要素があったのでEC+アプリが両方できそうな方とお会いさせていただく事にしました。

最新の紹介施策、PUSH通知の回数、強化するポイント、もっとユーザーへのハードルを下げるやり方等が聞けたため、この機能開発でコンバージョンアップが見込めたかなと思います。

2人目:とある大手ITのけっこう偉い人(後から知りました・・・)

コンテンツや機能のアイデアをたくさんもらえそうというのと、今回のアプリに搭載する機能のマネージャーをやられていたこともありお会いしました。

シェア・紹介ってこういう心理でやるんだなーとわかり、当日5個くらいの施策をもらい、自分でも施策を5個ほど思いつく結果に。激安。

3人目:とある大手ゲームプロデューサー

ゲームをやらない僕でも知ってるゲームプロデューサーの方には施策だけでなく、もう少し上流のことも聞きたいなーとふわっとした思いつきでお会いさせて頂きました

事前に情報を共有させて頂いたこともあり、当日は下記のようなことをお話ししました。

・今まで思いついた施策をやるべき、やらないべきの仕分け

・ログ集計のやり方について

・各種ツール(実際大手でも大したツールは使ってない)

・DL数の見積もり方

・ダウンロードしたユーザの属性を見極めるノウハウ

 

また、目から鱗なこともあったので、紹介します。

・ハードルが高くても使ってくれているのが本当のユーザで、彼らの顔が見えてから狙い澄ましたプロモーションを打つ(リリース時に下げ過ぎると意味がない)

・PUSH通知は相手が開く確証を持ったもののみ送る

・アプリの期待値を決め、期待値を時々上回るようにするランダム性

この方はとてもサービスが良すぎて、事前にLPやアプリの動画を質問していただき、メッセージで機能の評価をもらえました。これで15,000円は安すぎる・・・。

安いと思った理由:その1 機能削減アドバイス

機能は1個作れば軽いものでも200,000円以上はかかるので、一個機能いらないって言ってもらえるだけで200,000円浮きますよね。

あと、無駄な機能を作ると業務委託でさえエンジニアのモチベーションも下がりますし。

その2 新規企画がたくさん

企画はアプリを見て学べと言われることもありますが、アプリを見ててもどの要素が成功していて、何が成功していないかよく分からない。。。

でも、成功体験のある人の直感を使うと10秒とか1分で成功する要素を凝縮した企画が出てくる不思議な現象が。

サーチコストはどれだけ節約できるか、効果もどれだけあるかはちょっと計測不能な感じです。

正直15,000円はちょっと抵抗ありましたが、張り流す額としては最適かと考えました。

その3 哲学的・思考手順等のふわっとしたもの

哲学や思考手順が業務システムやブログとまったく違うことに驚き、なんというか自分のOSをアップグレードしてもらった感じです。これからは思考手順に迷いがすくなくなり、やるべきことを見失う確率が非常に少なくなるように思えます。

(なんかここ結構大事なところにも関わらず、ふわっとしてて申し訳ないのですが・・・)

スポットコンサルティングサービスは社員も経営者もWIN-WIN

社員はわからないことはわかる人に聞く、作業したくなければしたい人にやってもらい、自分のすべきことに集中できる感じへ。

経営的にもどんな社員もオフィスで息を吸って吐いてるだけで100万近くのお金がかかっているので、月10万で成果がブーストするのであれば費用対効果は非常に高いのではないでしょうか。

もし社員に来ていただくことがあれば、こういうサービスでしっかり企画を研ぎ澄まして成果をブーストできるようにしたいと思います。(給料の1/4〜半額くらいは経費で使えるとかにしたい等)

まとめ

彼らの成功体験からいくつのコンバージョンが生まれるかと思うと非常に楽しみです。

こうすればいい!こうしなければダメ!って決めてくれる人の存在って重要ですね。

アプリを数百万ダウンロードさせたいけどさせたことない、という人はビザスク本当にオススメです。

Yosemiteにアップグレードしてviが動かなくなった時


僕の環境ではアプリ開発を始めるために、Yosemiteにアップグレードしたらviが動かなくなってしまい、それを直す方法を記します。

対象とする方

以下のエラーメッセージが出ている人は同じ方法で治ると思います。

dyld: Library not loaded: /System/Library/Perl/5.12/darwin-thread-multi-2level/CORE/libperl.dylib

Referenced from: /Applications/MacVim.app/Contents/MacOS/Vim

Reason: image not found

Trace/BPT trap: 5

修正方法

1.Yosemite用のMacVim.appをダウンロードし、解凍

2.Finderから「アプリケーション」を開き、MacVim.appをゴミ箱に移動

3.ダウンロードしたMacVim.appを「アプリケーション」に移動

 

以上、案外簡単な修正方法でした。

シスウ株式会社の名前の由来

本当はシースーから来ています

シスウ株式会社は僕自身が寿司が好きだからこの名前になりました。

創業前、個人的に使えるお金が全くなく回転寿司すら自由にいけませんでした。

そんな状況の中、ある日石神井公園を散歩していたら「シースー食いてぇ」と言葉が勝手に出てきました。

シースーって指数関数に似てるなーとなぜか思ってしまって、会社名にすれば表向きもグロースしてる感じが出せる、だからシスウ株式会社にしました。

ちなみに、会社のWEBサイトはこちら。

http://corp.shisuh.com/

WordPressのモバイル判定をiPadの場合にfalseを返す


利用用途

WordPressのデフォルトの関数だとiPadもモバイルだと判定されてしまうので、iPadをfalseで判定する関数を作成しました。

wp_is_mobileをコピーして来て、USER_AGENTをiPadが含まれるときにfalseを返すだけの簡単な関数です。


function my_wp_is_mobile() {
 static $is_mobile;

if ( isset($is_mobile) )
 return $is_mobile;

if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
 $is_mobile = false;
 }else if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false){
 $is_mobile = false;
 } elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
 || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false ) {
 $is_mobile = true;
 } else {
 $is_mobile = false;
 }

return $is_mobile;
}

製品開発高速化のため、10個以上のディレクトリのソースを一括アップデートするコマンド

管理画面AdventCalender第二弾は、シスウ株式会社の星野がお送りします。

今回書かせて頂くのは、製品リリース後のテストを高速で回す為にWordpress2.3-4.0のソースを一括で更新するTipsを紹介します。

利用しているサービス

Javascriptで画像の縦横比をいい感じに計算して、並べる関連記事プラグインでブログによってはPVが1.5倍になったサイトもあるそうです。

WordPress / はてな / Livedoorに対応しており、リリースして1ヶ月で著名ブロガーも含め、100ブログ近くに導入されています。

商品の詳細はこちら。(宣伝)

紹介するコードについて

今回紹介するのは、Wordpressを2.3-4.0のあるディレクトリのソースを15個以上一括更新するための自動化のシェルです。

プラグインがバージョンアップされる度に実行しなければならないため、数秒で終わらせるとテストが高速回転できるようになりました。

まずは、普通のシェルはこちら。


#!/bin/sh

path=$(pwd)

echo $path

ARRAY=(2.3.1 2.5.1 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0)

for item in ${ARRAY[@]}; do

 p="./${item}/wordpress/wp-content/plugins/related-posts-line-up-exactry-by-milliard/"

 if [ ! -e ${p} ]; then

 sudo mkdir ${p}

 echo "${p}が存在しません"

 else

 echo "${p}が存在"

 fi

 cd ${p}

 echo $(pwd)

 sudo chown -R (ユーザ名) $(pwd)

 a=`git remote -v`

 if [ "${a}" = "" ] ; then

 echo "レポジトリ"

git clone ssh://(/etc/ssh_config内のホスト)/(パス)/ $(pwd)

 else

 cd $(pwd)

 git pull origin master

 fi

 echo $(pwd)

 cd $path

done

問題点

このコマンドの問題点は、毎回証明書のパスワードを聞かれるので、正直10回以上打ち込むのが面倒でプログラマーのやる気をそぎます。といっても、僕1人ですが。

解決策

expectコマンドで、パスワードを直に打ち込んで自動化します。

#!/usr/local/bin/expect -f
set timeout 200
spawn sudo sh ./updateAll.sh
expect "(証明書ファイル名)\':"
send "(パスワード)\r"
・・・・(expectからsendコードを回数分コピペ。ループする方法もあるみたいですが、時間切れ・・・。)
interact

HadoopなどでPostfixをソースからインストールする際などにも使えるコマンドなので、覚えると自動化が非常にラクで助かってます。

ただ、パスワードをべた書きするので、不特定多数が使うパソコンやサーバには置かないように気をつけています。

今後について

もっとセキュリティを上げたいのですが、何かいい案があれば教えて頂ければ幸いです。

くどいようですが、僕の関連ページプラグイン、宜しくお願い致します。

プログラマーには密かにデレるPinterestやSumally


Pinterest、どんだけプログラマー欲しいんだよ・・・

Pinterestプログラマーしか見ないようなところに「WEBが好きならちょっと来い」というメッセージを仕込んでます。

Pinterestのconsoleを見ると「(ハート)web–>joinUs()」が。

ちなみに、ブラウザではこんな感じで表示されています。

こんなところにまで仕込むなんてどんだけ欲しいんだよ!という話ですが、もっと手が混んでいるサービスも見つけました。

Sumallyはもっともっと欲しがっている

Sumallyは名曲のパロディまで使って攻めてくるくらい欲しがってます。

探し物はなんですか?と。

どっかで聞いた事あるぞ、このフレーズ・・・。

他にも・・・・

短縮URLを貼って効果測定していることまでアピってくるパターンも・・・。

Sumallyは他にも英語のパターンとか色々あるので、開発者の方は見てみるのも面白いと思う。

Pinterest/Sumally、さすが遊び心がある会社は、羽織の裏地にまでこだわりますね。

僕のサービスももちろん開発者募集中・・・だが負けてられない

僕の開発したサービス「あなたシスウ」にもメールアドレスまで入れて結構欲しがったつもりだが、Sumallyのを見ると負けている感がある。

なので、ちょっと色々なパターンを公開してみる。

気が合う人と仕事したいと思ったので、ほとんどの人には分からないと思うけど、作ってみた。

牛蔵行きたい。

特にブロガーの人やプログラマーとかとWebについて話したい。

と思ったので牛蔵にしました。

変態プログラマー(特にJavascript使える人)をしたい方々のために・・・・

自社サービスが変態なエンジニアにウケたいのであえば、ぜひconsoleにメッセージを埋め込みましょう。

実装はJavascriptロジックは下記を参照。

・consoleに色づけする。

・ランダムに出す。

・変数や読み込みに干渉しない様にsetTimeoutを使う。


<script type="text/javascript">// <![CDATA[
(function(){  setTimeout(function(){  var style = "color: hsl(0, 50%, 50%);font-weight: bold;font-size:20px;";  var d = new Date().getTime();  if(d % 3 == 0){  console.log("%cシスウ株式会社では、開発者募集中!\nサーバーもJavascriptで開発しているJavascript大好き>な会社です。\n",style);
 console.log("node.js か jQueryが得意な方はy.hoshino[at]shisuh.comまでメールを下さい。");
 }else if(d % 3 == 1){

console.log("%c牛蔵行きたい。ぜひ、行きましょう。Javascriptが好きならば。\nお誘いのメールはy.hosino[at]shisuh.comまで。\n",style);
 }else{
 console.log("%cあぁ^~コードがぴょんぴょんするんじゃぁ^~、と思った方はy.hoshino[at]shisuh.comまで。>色んな意味で即戦力。\n",style);
 }
 },10);
 })();
// ]]></script>

もちろん、生のソースを見るために、こちら(僕が作ったサービス)で会員登録しても良いよ。(宣伝)

参考までに、Facebookはどうか見てみます。

Facebookは近寄りがたい・・・・

ハッカー防止のためにツンツンな警告が。

以上のように会社によってまちまちなconsole上でのメッセージでした。

Google Analyticsのノーリファラーの原因はiOSのGoogle検索


Google Analyticsの参照元が見つからないトラフィックの原因

Google Analyticsでdirect / none、あるいはノーリファラーが増えた時ってどうすればいいのか分からなくて困りますよね。様々な原因がありますが、一番大きな原因はiOS6のgoogle検索の確率が高そうです。

原因の調べ方

実際、Safariで自分のブログを検索してGoogleAnalyticsのリアルタイムを見てみましょう。すると、普通だったら、参照元にGoogle、キーワードに検索キーワード、またはnot prividedと表示されますが、iOS6のSafariのGoogle検索ですと、何も表示されません。これが、direct / noneの正体のようです。

参考までに、他にノーリファラー(direct / none)になるパターンのご紹介

もし、上記の原因で無かった場合にご参考までに紹介します。

  • はてなブックマークをモバイルアプリから使っている場合
  • ランディングページにGoogle Analyticsのコードが抜け落ちている場合

参考URL

英語の記事ですが、参考にした記事はこちら