CoreOSのリブートを止める

  • POST
対応策 CoreOS - Reboot Strategies on Updates https://coreos.com/os/docs/latest/update-strategies.html Disable Automatic Updates Daemon ここの項目を読み進めると下記のコマンドを入力すると書いてある。 $ sudo systemctl stop update-engine 絶対バッドノウハウだろ!? …はい。 でも、もう稼働中の本番環境なんです… ダウンするわけには行かないんです… 本来はダウンしても大丈夫なようにシステムを構築するべきで、 絶対にあるべき姿じゃない、この方法は応急処置にとどめておいてください… ※ちなみに現在根本的な対応中です。 何故勝手に落ちるのか? CoreOSの設計思想として、 セキュリティホールを放置したまま延々と起動し続けて全世界の皆様に迷惑をかけるくらいなら、 さっさとアップデートして再起動しろやということなんだろう(憶測) どのプロセスが原因なのか はてぶ:tmatsuuのコメント http://b.hatena.ne.jp/entry.touch/194619714/comment/tmatsuu CoreOS再起動とfleetがまだ使えない件は同じくハマった。 自動再起動の止め方、昔と違ってた。 詳しくは公式ドキュメントのUpdate Strategiesを参照。 神様ありがとう! どれどれ… Reboot Strategies on Updates https://coreos.com/os/docs/latest/update-strategies.html 「Disable Automatic Updates Daemon」の項目に sudo systemctl stop update-engineとしてくれと書いてある。 どんな設定か確認してみる この辺はほぼ初期状態のままだから 公開してもリスクはないと考えて公開。 CoreOSのサービスデーモンはsystemdで管理しているので、 まずはUnitファイルを確認。 $ systemctl cat update-engine.service # /usr/lib64/systemd/system/update-engine.service [Unit] Description=Update Engine ConditionVirtualization=!container ConditionPathExists=!

ブログ移行と思い出

  • POST
PHPフレームワークと出会うまで ずっと可能性があると信じていたWebアプリ、 自分自身はエンジニアとしてのセンスはあるつもりと思ってはいたが、 ずっとどう勉強すれば分からなかった。 小さい頃から一人で留守番する鍵っ子だった。 よく空想して遊んだし、パズルを解くのは昔から得意だった。 勉強は嫌いで殆ど勉強しなかったが、数字をパズルのように組み合わせるだけで解ける物理は好きで得意だった。 ゲームの計算機をJavaScriptで作ってみたり、 高校卒業後は情報系の専門学校に入り、 卒業研究では流行りのAjaxをつかったシステムを作ってまわりの人をびっくりさせた。 でも、それだけでは僕の求めるエンジニアには決してなれない。 勉強をして新しい知識を身につける能力が欠けていた。 IT土方に足りないもの 僕は所謂IT土方だった。 要求から人より速くフローチャートを描き起こせても、 計算が速くて多重のネストを少ないバグで回せても、 超能力で不具合のある行を指差して見つける事が出来ても、 当時それなりに難しかったソフトウェア開発技術者を持っていても、 僕にはWebアプリは作れはしなかった。 少年漫画は強敵と対峙すれば成長して互角の勝負を繰り広げられるが、現実そんなに甘くない。 現実世界の人間様が成長するのは、打ちひしがれて枕を濡らした次の朝だ。 これはどんな人間であっても、やった分しか成長できないことを意味している。 エンジニアとしての成長も同様だ。 Hello Worldから初めて、チュートリアル、しょぼいアプリケーションを作らなければ一生何も作れはしない。 やりたい事は沢山あるけれど、 きっと自分の無知とやる気のなさを呪いながら何も出来ないまま一生を過ごすのだ。 そんなことを思いながら務めていた、とある会社でsirasayaさんに出会った。 PHPフレームワークとブログとの出会い 元々興味があってIT系企業に就職しただけあって、 最低限のアンテナを張って情報収集はしていた。 そこらのブログやQiitaの記事で Ruby on Railsが流行ってるらしいとか、CakePHPが流行ってるらしいとか、 それらのフレームワークを利用して高速にアプリケーションを作れるらしいとか、沢山見聞きはしていた。 実際に触ろうとしたことはある。 しかし、フレームワークにはフレームワークの使い方というものがある。 基礎を知らずして応用は出来ない、ゲームのようにボタンを押せばとりあえず敵をやっつけてストーリーが進むわけではないのだ。 当時の自分にはどうすれば使いこなせるかも分からず途方にくれてしまっていた。 sirasayaさんは前の職場でDOLEMというフレームワークを開発して業務に使っていたと聞く。 (当時はちゃんとした名称はなく、Coreフレームワーク等と呼んでいたらしい) 「ん?ブログ程度なら3日あれば作れるぞ。」 この一言がWebエンジニアとしての最初の一歩となった。 DOLEMの初リリースが2012年の5月、 DLしたDOLEMの使い方はさっぱり分からなかったが、 作った本人が「わかり易い、すぐ使いこなせる」というだけあって、 2週間が過ぎた頃には既にDOLEMを駆使してMySQLに値を突っ込んで取り出すという事が出来るようになった。 最初に作るもの そしてようやく一人プロジェクトが始まった。 作るものはもちろん…ブログだ。 2006年という大昔の時点でLivedoorブログで作られている痛いニュースが大ブレークしていた。 今日日ブログなんて小学生だって楽勝で持てる。 ぶっちゃけ今さらそんなものを必死に作っても客観的には一銭の価値もない。 でも僕が欲しいのはブログという実体ではなく、ブログを作れるという技術力だ。 何故ブログか? 乱暴に言えば掲示板に執筆者用の管理画面を足せばブログだ。 ブログに複数執筆者がログインでき、相互にコメントを付け合うものはSNS。 画像を乗せてメールが飛ばせればショッピングカートだって作れる。 クラウドソーシングや、クラウドファンディングだって派生して作れる。 だからブログ、まずはブログ、とにかくブログ。 後はありとあらゆる事をアイデア次第で開発出来るノウハウに繋がるのだから… これがまがりなりにも完成した動機であり、執念でもあった。 ブログ(初期型)の要件 一番意識したのはエンジニアが自分の為に作るブログはどうあるべきか… 当時の自分の知識やスキルレベルの中ではかなり頑張ったほうだと思う。 結果、かなり理想に近いブログシステムになった。 さくらのVPS WebエンジニアたるものLinuxの環境構築が出来て当然である ドメインは既にとっていたromancing.

ファイル名を指定して実行を使いこなす

  • POST
ファイル名を指定して実行ってなに? 「Windows + R」で起動するアレ この記事はWindowsの操作速度向上の為のTipsとして記載する 能書き 「ファイル名を指定して実行」には以下のような特徴がある コマンドプロンプトと似ているけど違う箇所もある… カレントフォルダは「C:\Users[ユーザー名]」 それは下記のコマンドを打ち込んだ結果から確認出来る .(ドット x 1個) : C:\Users[ユーザー名] ..(ドット x 2個) : C:\Users ..(ドット x 2個→¥) : Cドライブ直下 環境変数のPathを指定している箇所の直下にあるプログラムを実行出来る ただし、「C:\Users[ユーザー名]」直下に配置したファイルは開けない(Pathが通っていない為) -優先順位はPathの左側に記載されたものから順番 「ftp」や「calc」等が被ったりするのでそれで判断する ショートカット(.lnk)や実行ファイル(.exe)の場合、拡張子は必要なし WindowsはGUIが強いと思われがちだが、デフォルトの挙動はMacと比べてかなり悪い。 デフォルトの挙動を維持しつつ、Macの操作性に近づく為の試行錯誤の結果を記載していきたい 操作手順 第一段階:ショートカット置き場用フォルダの管理 まずはショートカット置き場専用のフォルダを用意して、その中に使用頻度の高そうなショートカット(.lnk)を投げ込んでいく 環境変数のPathの末尾に「ショートカット置き場フォルダのアドレス」を登録する 面倒であれば既にPathの通っている「C:\Windows\System32」あたりにぶちこんでも良さそうだが、後々の管理で死ぬと思われるので非推奨 この時点で「Windows+R」でファイル名を指定して実行を起動し、 ショートカット名を入力すればそのファイルが実行出来る。便利! 第二段階:名称の変更&リンクの取捨選択 ショートカットは名称にもこだわろう よく使うファイルは出来るだけ3〜4文字に収める 以下は例 - RLogin → ssh : 用途から命名 - FireFox → fox : 単純に省略 - SubLime Text → slt : 頭文字を取る フォルダもショートカットに出来るので活用するが、 この時にショートカットの数はあまり多くなり過ぎないように注意 似たような違うファイルのショートカットを大量に作るより、複数のショートカットの入ったフォルダのリンクを用意する手段もありか?

XAMPPを使う時

  • POST
注意書き もしこの記事に訪れたのがデザイナーさんや経営者に近い立場の存在であれば、 どうか参考程度の軽い気持ちで読んで欲しい。 あなたにはもっと大事なやるべきことがある。 それはPHPのバージョンやライブラリの管理方法を死ぬ気で勉強する事ではない。 これはWebプログラマを目指す初学者をターゲットとしている。 そのXAMPPは何故インストールした? XAMPPを入れる動機は沢山ある。 しかし、その大多数は自分でLAMP環境を作る知識がないからぐぐった結果楽が出来そうだから入れたというのが真実だろう。 LAMP環境を自前で作れる人間でXAMPPを利用している人は殆ど居ない。 WindowsではLAMPサーバーになりえない PHPもMySQLもWindowsで建てること自体は可能だ。 ソースコードは公開されているからコンパイルすれば動くし、 公式サイトではサーバーソフトのWindowsバイナリだって配布されている。 しかし、初心者がPHPの動作環境にWindowsを選ぶものではない。 LAMPのLがなぜLinuxなのか? それはサーバー用途で頭一つ抜けたシェアを誇っているのがLinuxだからだ。 ライセンス料金が高くGUIがひっついてる分パフォーマンスが画面の描画に食われるWindowsではない。 では何故Linuxを選ぶ必要があるのか? これはぐぐった時の記事の量に影響している。 WindowsでPHPサーバーを建ててる人の記事なんてない。 WindowsでMySQLサーバーを建ててる人の記事なんてない。 これが後々の情報量の少なさで苦しむハメになる。 初心者がXAMPPで構築を楽すると後々どうなるのか? XAMPPは破壊的な変更が往々にして加わる。 PHPやMySQLのバージョンは最新が入る インストールの手段がブラックボックス 設定ファイルの置き方や初期設定はその時点に応じてコロコロ変わる XAMPPでPHPやMySQLの設定を変更する記事はぐぐれば沢山出てくるが、 そのほぼ全てが古くて使えない情報と思って間違いない。 いくら正しくてもそのバージョンのXAMPPの情報であって、貴方が検索して出てきたXAMPPのバージョンで同じ手法が使えるとは限らない。 貴方が頼れる情報はXAMPPに同梱されているドキュメントと、XAMPPの公式サイトの掲示板(英語)のみだ。 必然的にPHPとMySQLのインストールに関する深い知識も必要で、 XAMPPの挙動とその意図を正確に把握出来る程度にはなっている必要がある。 こんな有様でPHP初心者に勧めるわけにはいかない。 初心者のXAMPPあるある 2つのPHP.iniがある理由がわからず困惑 どうすればMySQLに接続したり設定変更出来るの? ライブラリの追加&更新に手間取る…結果諦める 調べたくてもWebにあるのはLinuxでの設定方法であり、XAMPP利用時は書いてない ざっと思いつく辺りではこの辺か 要するに環境構築面で大幅に苦労する事になる XAMPPを使う時 前項目で書き記したようにとにかく情報がない。 だからWindowsサーバーで何度PHPやMySQLをインストールしたか分からない上級者が手抜きする為に入れるものだ。 もし他人からXAMPPの使用を薦められた場合は注意したほうがいい。 「あなたはPHPを深くまで知る必要がない」と思われている。 その言葉に続くのは「どうせ (あなたはデザイナーだ or 勉強しないだろう) から」 つまり、教える事を放棄して軽くあしらわれてる。 初学者が今からLAMPサーバーを構築して勉強したいのなら、 まずVagrantでLinuxを扱うところからはじめよう。

【PHP】PHP: The Right Way

  • POST
良さげなWebサイトを発見した。 PHP: The Right Way http://ja.phptherightway.com/ ちょっと読んだ ようこそ 時代遅れの情報がウェブ上にあふれている。そんな情報を見たPHP初心者は戸惑ってしまうだろう。そして、まずい手法やまずいコードが広まってしまう。 そんなのはもうやめよう。PHP: The Right Way は気軽に読めるクイックリファレンスだ。PHPのベストプラクティスやコーディング規約、 そしてウェブ上のよくできたチュートリアルへのリンクをまとめた。 感想 全くもってその通り、 自分が今まで勉強してきた軌跡が目次化されていて、 そしてこれから勉強したい物も載ってる。 もっと早く知ってればよかったが、きっと前の自分ならこのサイトの価値が全く理解出来なかっただろうな。 こんなサイトって結構多いよね ローカルにコピペすると動かない 間違った見識の元に書かれてて、どう考えても動かない 机上デバッグですぐ分かる 動作確認位しろよ そういうのは後輩にとっても害悪なので、出来るだけコメントに残すようにしている。 しかし、そういうサイトに限ってこんな条件がついててもやもやする - コメント出来ない - コメントはログインユーザーのみ承認しています - コメントは管理人の承認待ちです - そもそもコメント残す欄が無い - SEO頑張ってたのか意外とGoogleの検索順位が高い - 最終更新日時が大昔で止まってる 技術ブログは良いのか? まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西 … http://www.slideshare.net/77web/phperphp2013-lt ごく最近に作られたパワポのようだ。間違いなくこの人の責任ではない。 この人自体はスキルも高いと推測出来るし、問題ないと思う。 でも、初心者との比率がなぁというのは常々感じていた。 HTMLやCSS、JavaScriptもそうなのだが、レベルの低い実装が蔓延っていて、 いくら検索しても欲しい情報が手に入らない事が往々にしてある。 エンジニアとしてどうしていくべきか 【独断と偏見】C#erでも許せるかも知れないフルスタックPHP http://qiita.com/sukobuto/items/ff840d34395fdb6e4e68 全然関係のない記事だけれど、 前半部がとても指針として参考になるので紹介。 PHP は書けば動くから簡単だよ という罠 「書けば動く」というのは本当に罠でしかありません。 「書けば伝わる」日本語がないのと同じです。 我々が国語を学んだのと同じように、意図を表現することを繰り返していかない限り、ほぼ使い捨てのプログラムを書いては引き継ぎ担当者や1年後の自分の首を絞めることになります。 「動けばいい」という人にはできる限りの手を尽くして近寄らないようにすべきです。 それでも PHP を選択するメリットがあるとき、PHP は裏切らない PHP という案内役のいない言語を使わざるをえない場合、最も使いやすい状態にできるかどうかにかかっている。 結論 ただただPHPをDisるのではなく、 有識者がただしく案内していくべき言語なのだ。 僕も有識者を目指す人間の一人として、強くありたいものだ。

【PHP】エラーログを閲覧

  • POST
PHPのエラーログを監視する PHPのエラーは常に画面へ出力されるとは限らない。 例えばコンソールからPHPファイルを実行した場合、 php.iniの設定によってはincludeしたファイルの関数衝突によるFatalエラーはコンソールに表示されない。 PHPのログファイルって何処に吐き出される? php.ini内でerror_log = "xxx"と記載したxxxにエラーログが吐出される http://jp.php.net/manual/ja/errorfunc.configuration.php#ini.error-log これはphpinfoで確認できるので、 コンソールなら以下のコマンド打つだけで取得出来て楽 後はそのままtailコマンドで監視すればいい # php -i | grep error_log error_log => /var/log/php_error.log => /var/log/php_error.log # tail -f /var/log/php_error.log エラー出ないぞ Apacheを通した場合、ApacheのエラーログにPHPのエラーが吐き出される場合がある CentOSの場合、「/etc/httpd/conf/httpd.conf」ファイル内に記載すると、 その中の記述に従ったディレクトリに作成される # vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName hogehoge.com:80 ServerAdmin test@hogehoge.com DocumentRoot "/var/www/html/" ErrorLog logs/php.err_log CustomLog logs/php.acc_log combined <Directory "/var/www/html/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> # tail -f /etc/httpd/logs/php.err_log 上記のErrorLog logs/php.err_logに注目、 デフォルトだとこんな感じの設定になっていると思うが、カレントディレクトリは/etc/httpdになっているので

【ZendFramework】インサートしたIDを取得

  • POST
最後にインサートしたレコードのIDを取得する方法 オートインクリメントで振られたIDを知りたい時の話 普通の方法 大抵のRMDBはオートインクリメントで振られたIDを覚えているので、 再度クエリを発行すればID値を取り出すことができる。 複数のユーザが同時にアクセスして登録したら? 軽く試してみたが問題ない。 コネクションを張る度に別プロセスと認識される 同一コネクション内でインサートしたオートインクリメント値が還ると思われる MySQL SELECT last_insert_id() SQLite SELECT last_insert_rowid() PHPによるアダプターを利用する場合 PDO PDO::lastInsertIdを使う。 上記のように、オートインクリメントによって振られたIDを取り出すSQL文はDB毎で異なる為、 PHPのソースコードとDB操作を分けるには不向きで、その差異を吸収する為に存在するメソッドと思われる。 要するにPDOを使う場合は何も考えずにPDO::lastInsertIdでおk // DBへ接続し、INSERT文を発行 $db = new PDO($dsn); $sql = 'INSERT INTO .....'; $db->exec($sql); // オートインクリメント値を取り出す $id = $db->lastInsertId(); Zend Framework アダプタークラスにlastInsertIdというメソッドが用意されている。 アダプターにPDOを使用した場合、lastInsertIdを呼んでるらしい。 $table = new Zend_Db_Table(); // Insert文発行 $adapter = $table->getAdapter(); $id = $adapter->lastInsertId(); $id = $table->getAdapter()->lastInsertId(); // 一発でやってもOK Zend_Db_Tableオブジェクトにアクセス出来ればlastInsertId()メソッド叩くだけで出てくる。 自社開発のコレクターとかモデルとか使ってる場合でも、 以下のようにZend_Db_Tableオブジェクトを返すメソッドを作成すれば良い。

【JavaScript】即時実行関数とは

  • POST
即時関数とは JavaScriptにおいて、 下のような書き方を即時関数と呼ぶらしい。 (function(){ 処理 })(); この書き方してるライブラリは山のようにあるけど、 名前もわからん動作もわからん、そもそも何だこの気持ち悪い書き方は? 紹介してる書籍やサイトにも辿り付けないで苦労した。 挙動 関数の尻に()を付けるとその場で実行される。 function hoge() { // 処理 } hoge(); // 関数hogeが実行される しかし、{}は開始と終了時に行が変わると解釈される。 // その場で関数を実行したい function hoge() { // 処理 }(); // ↓内部ではこのように解釈されるので関数hogeは動作しない><; function hoge() { // 処理 } (); …で、function(){}を式として認識させれば挙動を邪魔されることはない (下記参考サイトを参照) // 以下の書き方は全て同様 +function hoge(){ alert('hogeを実行') }() -function hoge(){ alert('hogeを実行') }() (function hoge(){ alert('hogeを実行') })() しかし、+や-等を使うと戻り値が数値にキャストされてしまうので、 即時関数の書き方は下が一般的となる。 (function(){ 処理 })(); メリット グローバル変数が汚れない (function hoge(){ 処理 })(); alert(hoge); // underfindと表示される 参考サイト 三等兵「知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){…})()の全て」 http://d.