• まゆこのましんラーニング♡#05

    こんにちは!まゆこです! 最近急に寒くなりましたね(´・・`) 夏が終わるのが寂しいです…(´・・`) 先日Googleの方から私宛にTシャツいただきました!! ありがとうございます!! 個人的にこのグレーの色味がお気に入りです(^^)/ さて、本題に入ります。 前回「prediction.trainedmodels.predict」で予想データをカンマ区切りで横に並べて入力するか?縦に並べて入力するか?という疑問が湧きましたので、検証してみます。 入力(横に並べる) { "input": { "csvInstance": [ "M,175,165,france" ] } } 結果 "outputValue": "73.833076" 入力(縦に並べる) { "input": { "csvInstance": [ "M" "175" "165" "france" ] } } 結果 "outputValue": "175.622411" 予想結果を見ると縦に並べた方が正しいのですが、Googleのドキュメントを見るとカンマ区切りで横に並べてるんですよね… どうやって、検証しましょう???(’_') GO☆「サンプルプログラムを見つけて、Prediction APIをコールする際の記述を見ればわかると思うよ」 まゆこ「プログラム?なんですか?それ」 GO☆「今までは、APIs Explorerというコンソールからデータを送ってたけど、 プログラムから直接Prediction APIをコールして、データを送ることもできるんだよ」 まゆこ「何がちがうんですか?」 GO☆「やってることは同じだけど、プログラムを組むとより複雑なことができるし、APIの仕様も分かってくるよ」 まゆこ「ふーん…」 GO☆さんがこんなサンプルプログラムを探してくれました。 (そのまま転記したのではなく、内容は少し変えています)
    ...
  • まゆこのましんラーニング♡#04

    こんにちは、ITソリューション事業部のまゆこです。 先週は夏休みを利用して、友達と沖縄に行ってきました! やっぱり沖縄の海はきれいでした!! ホントいやされます(´-ω-`) (まわりはカップルばっかでしたけど・・・) GO☆「まゆちゃんおかえりんこ! 沖縄でもブログチェックしてた?」 まゆこ「もちろん! ほらGO☆さん、この写真見てくださいよ(^^)/」 GO☆「フーテンの?」 まゆこ「寅さんじゃないです」(似てますけど(`3´)) まゆこ「ブログはちゃんと沖縄でチェックしてましたよ!それにググって新しい例題見つけたんです!」 ↓ここにいろんな例題が書いてあります。 https://cloud.google.com/prediction/docs/developer-guide 前回、GO☆さんは体重から身長を予想をしてましたが、 このページの「Structuring the Training Data」という例題も身長予測をしています。 ただ、分析するデータの種類(列)が複数ありますね。 そういえば、言語当ても、身長当ても、分析するデータの種類(列)は一つだけでした。 言語当ては「文章」のみ、身長当ては「体重」のみです。 ところがこの身長当ては、 「性別」「父親の身長」「母親の身長」「国籍」といった4種類のデータ(属性とします)を分析させてます。 なるほど、 身長は男女によって異なるし、遺伝もするし、国籍によっても異なります。 つまり相関関係があるってことですね。これは予測しやすいです! 投入するファイルフォーマットは以下のとおりです。 [身長(答え)],[性別],[父親の身長],[母親の身長],[国籍] Excelを使って2万件作成しました。 国籍別、性別による身長のレンジを定義し、ランダム関数を使って多少ばらつきが出るようにつくりました。 つまり、[身長(答え)]と、[性別][父親の身長][母親の身長][国籍]の4属性に相関関係を持たせています。 それでは、予測してみます。 今回もRegression models(回帰モデル)なので、分析結果までは前回とだいたい同じです。 さて、早速予測してみましょう。 前回までは1属性しか入れませんでしたが、4属性を入れる場合ってどうするんでしょう? ↓このページの下の方にサンプルがあります。「Run a prediction against your model.」で検索するとそこにとびます。 https://cloud.google.com/prediction/docs/reference/v1.4/reference { "input":{ "csvInstance":["M", 1.59, 1.51,"France"] } } なるほど、カンマで区切って並べればいいみたいですね。 「prediction.
    ...
  • まゆこのましんラーニング♡#03

    こんにちは。ITソリューション事業部のまゆこです。 うそです。エクストリームエンジニアのGO☆です。 ★☆ ↓GO☆のYoutube公開中 ★☆ 最近上司から「その髪型おもしろいから絶対切るな、切ったらクビ」とパワハラを受けています。ちりちり さて、今回は夏休み中のまゆちゃんに代わって僕が書きます。 前回は言語当てをしましたが、今回は身長当ての予想をしてみます。 何が違うのでしょうか? その前に、Categorical models(カテゴリモデル)とRegression models(回帰モデル)について説明します。 僕は統計学の専門家ではないので、「Prediction API」に最低限必要なことだけを書きます。ちりちり 1.Categorical models(カテゴリモデル) 予想結果が、特定の選択肢(投入したデータの1列目の値)の中から導き出されます。 つまり、”O” or ”X”とか、”良い” or ”普通” or ”悪い”といった予想結果を導きたいときに使います。 前回の言語当ては、このモデルでした。 分析データの1列目(つまり答え)が文字列だと、自動的にこのモデルになります。 2.Regression models(回帰モデル) 予想結果が、数値で導き出されます。 回帰分析をして予想値を出しているから回帰モデルなんでしょうね。ちりちり 今回の身長当ては、このモデルです。 分析データの1列目(つまり答え)が数値だと、自動的にこのモデルになります。 但し、1件でも1列目にnullとか文字列が入っているとカテゴリモデルになるので注意が必要です。 そんなわけで、今回はRegression models(回帰モデル)で予想します。 それでは実践してみましょう! 体重を入力すると身長を予想してくれるモデルなので、下記のようなファイルをつくります。 [身長],[体重] Excelを使って2万件作成しました。 体重はランダムに生成して、身長はその体重をもとに、多少ばらつきが出るようにつくりました。 つまり身長と体重に相関関係を持たせています。ちりちり 次に「Prediction API」です。 1.「prediction.trainedmodels.insert」でデータ投入、「prediction.trainedmodels.get」で完了を確認します。 2万件ありますが、2列しかないので5分程度で完了しました。 完了のレスポンスに"modelType": “regression"と返ってきたら、回帰モデルです。 ちなみに、“modelType”: “classification"と返ってきたら、カテゴリモデルです。 2.「prediction.trainedmodels.analyze」で分析結果を見ます。
    ...
  • まゆこのましんラーニング♡#02

    こんにちは!ITソリューション事業部のまゆこです。 早くも二回目です。 そもそもマシンラーニングって何でしょう? ググってみましたが、うーん、イマイチ分かんないです>< まゆこ「GO☆さん教えて下さーい( ;∀;)」 GO☆「む〜ん、つまり我々が無意識に行っているパターン認識をだねぇ〜・・・」 まゆこ「はい?分かんないので、自分で調べます( ;∀;)」 ふむふむ、私が参考にするサイトを見ると・・・ http://www.apps-gcp.com/predictionapi-introduction-1/ このサイトでは、3カ国で書かれた文章を分析させて、コンピューターに言語当てをさせる実験をしています。 スゴイ!なんか未来を予想する、夢のようなツールなんですね!とにかく実践してみましょう。 1.まず、解析させるデータを用意します。 情報はできるだけ多い方がいいみたいなんですが、今回のサンプルデータは400件程度です。 ↓サンプルデータです。 https://cloud.google.com/prediction/docs/language_id.txt これは英語、フランス語、スペイン語が書かれた文章データで、 [言語名],[各言語で書かれた文章] といったレイアウトでできています。 ファイル作成で気をつけることをまとめると・・・ ・最初の列には”答え”を書く。サンプルでいうと、”英語”とか”フランス語”とか”スペイン語”です。 ・次の列からは”答え”を導くための情報を書く。複数列あってもいいみたいです。 ・列はカンマで区切る。 ・ヘッダは不要。 以上です。 2.次に、ファイルをGoogleストレージにアップします。 ここからGoogle Developers Consoleというサイトで作業をします。 https://console.developers.google.com/ まゆこ「なんですかこれ?」 GO☆「Google環境で開発する際に使う開発者向けのツールだよ。まぁ使ってみないとわかんないと思うよ!」 会社用のアカウントでログインし、プロジェクトを作成して、「Prediction API」と「Google Cloud Storage」をオンにしました。 そしてバケットを作成してアップロードします。 何をしているかよく分からないまま進んでいますが・・・ 無事アップロードできました。アップロードはあっという間でした。 3.そして、解析開始です。 ここから「Prediction API」を使用します。 「Prediction API」がブラウザから使えるサイトに行きます。 https://developers.google.com/apis-explorer/?&_ga=1.100999174.668741449.1412325898#p/prediction/v1.6/ これは「APIs Explorer」と言って、ブラウザ上でGoogleの各種APIを簡単に試すことができます。 GO☆「ここに並んでいるのがPrediction APIで、これを使って解析するんだよ。とにかく使ってみよう!」
    ...
  • まゆこのましんラーニング♡#01

    株式会社ISAO入社1年目のまゆこです。 ITソリューション事業部(通称ISD)という部署で事務の仕事をしております。 最近やっとデスクワークに慣れてきました(^^)/ ISDってどんな仕事をしているかというと、アプリやらインフラやらを開発していて・・・ 正直よくわかりません(/_;)頭から煙が出そうです。 そんな私に最近上司が 「おい!まゆこ、お前マシンラーニングやれよ!」と言ってきました。 まゆこ「マシンラーニングって何ですか?」 上司「よくしらねーけど、最近流行ってるらしーから、誰かやっとかねーとダメっしょw」 まゆこ「・・・」(そんなこと言われましても(‘o’)) そこで、同じ部署のGO☆さんに協力をお願いしました。 まゆこ「GO☆さーん!!( ;∀;)」 ☆★↑↑GO☆さんのYoutube公開中!☆★ GO☆さんはうちのエンジニアで、きっとなんでも知っているはずです。 GO☆さん「まゆちゃん、このサイトを参考にするといいよ」 http://www.apps-gcp.com/predictionapi-introduction-1/ まゆこ「へ~、意外とカンタンなんですね!これなら私にもできるかも!!!」 とゆうわけで、まゆこはマシンラーニングに挑戦しまーす♡ ※本記事は、『株式会社ISAO ITソリューション事業部』監修のもとに製作しております。
    ...
  • スマートウォッチとMBassを連携したアプリの未来は明るい

    スマートウォッチアプリについて スマートフォンほどではないですが、世界的にスマートウォッチの普及率は急激に上がりつつあります。Apple Watchを例にすると1年間、3,600万台が売れたそうです。 http://japan.cnet.com/news/business/35064877/ また、AppleとGoogleの中心としてスマートウォッチアプリ開発のプラットフォームが用意されていますのでアプリも簡単に作れます。わざわざスマートフォンをポケットから出さなくてもスマートウォッチでユーザーの要求を満たす時代はすぐ近くまで来ています。 ということでスマートウォッチ(Apple Watch)とMBass(Parse)連携したアプリを作ってみることにしました。 Parseについてはこちら アプリを作ってみよう スマートウォッチから打刻をするアプリをいかに簡単につくれるのか紹介したいと思います。IOS開発経験者を対象に説明しますが、初心者でもすぐ理解できるレベルですのでぜひ最後までよんでみてください。 開発環境 Xcode 6.4 IOS 8.4 Swift プロジェクト作成 IOS用の新しいプロジェクト(Single View Application)を作成する。 Xcode > File > New > Targetを選択 WatchKit App を追加 画面仕様 Check Inボタンをクリックした時に画面1のインタフェースが呼ばれるようになっています。WatchKit Extentionフォルダ配下にCheckInControllerファイルを作成し、画面1に紐付けます。 ※Check Outも同様 CheckInControllerを実装 WatchKitフレームワークをインポート。 WKInterfaceControllerクラスを継承します。 CheckInControllerが呼ばれた時に最初に実行されるwillActivateメソッドを実装します。 現在の時刻を取得。 ここがポイント! 処理内容を親アプリ(IPhone)に伝えます。 import WatchKit // <1> import Foundation class CheckInController: WKInterfaceController { // <2> @IBOutlet weak var message: WKInterfaceLabel!
    ...
  • Apple Watchの使用感レビュー

    Apple Watchを約1ヶ月間使ってみました。 これまでのウェアラブルデバイス使用歴はライフログ系 (UP by Jawbone) なので、 全く違ったデバイスという印象で触れることになりました。 (UP by Jawboneは充電時以外、常時身に付けていたせいか、故障してしまいました…) 既に色々情報が出回っていますが、あえて書きます! デバイス概要 小さい割に多機能です。(その分、バッテリーとトレードオフになりますよね…) Apple Watchには以下の機能が搭載されています。 タッチディスプレイ スワイプ ドラッグ タップ 強めにタップ 感圧タッチ(Force touch)による操作はどうにも慣れませんでした。 デジタルクラウン/ホームボタン 回すとスクロール/押すと選択。デジタルクラウン(時計でいうところの竜頭)という古いようで新しいインターフェースで、ユーザに新たな体験を与えるあたりはAppleらしさでしょうか。 サイドボタン 友達の表示/非表示 スピーカー マイク 心拍計センサー あまり期待していませんでしたが、自身の血圧範囲内の値が計測されいました。 加速度センサー 活動量の計測など。時計を見るときの腕をひねる動作でディスプレイが点灯する仕様に感動しました。 画面構成 基本的な画面構成は主に4種類 (+各アプリ画面) ↓ざっくりな構成 [2] ↕ [1]↔[3] ↕ [4] [1] 文字盤 基本的には腕時計なので。 文字盤はプリインストールのものからしか選択できません。文字盤表示時に"強めにタップ"すると変更できます。 (最初、気付かなくてアタフタしました。) 文字盤の種類によっては天気やタイマーを追加表示できます。 [2] ホーム画面 iPhoneアプリの内、Apple Watch対応のアプリがインストールされます。 iPhoneアプリ (iOS8以上) にプリインストールされている「Apple Watch」アプリから設定変更可能です。 [3] 友達の表示 最大12人まで登録できる(らしいです)。iOS8から利用できる「Appスイッチャーに連絡先を表示」機能を利用している方には便利かもしれません。 (利用していないので、推測です…) [4] グランス (Gance) ウィジェット(OS X で言うところのダッシュボード)のような感じで、アプリを起動しなくても情報が見れます。 標準機能とプリインストールアプリ 電話 iPhoneへの着信をApple Watchで通話可能だが、Apple Watch内蔵スピーカーで相手の声が聞こえて焦りました。 欧米スタイルである「Bluetoothヘッドセットでの通話」に抵抗がなければ、便利に使えそうです。 アクティビティ 円を使ったグラフィカルな見せ方が特徴的です。 1時間、座りっぱなしなど動きが少ないと、毎時50分頃に、立って運動することを促してくれます。 基本、座って仕事をする場合、いい気分転換の目安になります。 ミュージック ずばりリモコンアプリです。 再生・停止・曲送り・音量の調整はイヤホン付属のリモコンのほうが直接的で使いやすいです。 楽曲変更もできるのですが、曲数が多いと小さい画面で探すのも大変で…結局iPhone使ってました。 カメラ iPhoneカメラのサブディスプレイ&シャッター。 片手にiPhone、もう片手にApple Watchでプレビュー確認するなら需要ありそうです。 スクリーンキャプチャ ホームボタンとサイドボタンの同時押しで撮れます。 タイマー ポモロードタイマーとしての使えば捗ります。 サードパーティ製アプリ サードパーティ製のアプリはApple Watch対応のiPhoneアプリをiPhone側にインストールすることで使用できます。 いろいろ使ってみたが、まだまだ荒削り感じです。一部抜粋してご紹介します。
    ...
  • AngularUI Calendar (FullCalendar) dayClick not work expectedly on iOS

    bowerで入れた angularUI Calendar 1.0.0, FullCalendar 2.1.1での話です。 Angular WEBアプリでカレンダーを使いたいというニーズを完璧なまでに満たす AngularUI Calendar http://angular-ui.github.io/ui-calendar/ ですが、月(month)表示から日セルクリックで日(agendaDay)表示に切り替えようとしてdayClickを使用した場合、なぜかiPhoneではうまく動作しません。 正確にいえば、タップではなく一秒ほど長押しするか、軽く日セルをドラッグしようとするとdayClickが呼ばれます。 なんでどぅあぁぁぁーーーー! と3日ほど頭を悩ませた結果、なんとか対処できたのでおすそ分けします。 ちなみにAngularUI CalendarはFullCalendarのラッパーなので、FullCalendarで同じような問題に悩んでいる方にも効くはず….です。 原因 dragイベントの扱いの違いに起因しています。 dayClickはclickイベントで呼ばれていません。dragの終了を検知して呼ばれています。 iOS上のSafari(というかwebkit?)以外では、タップして指を離した瞬間に drag開始、drag終了のイベントが発生するのですが、iOSではdragするか、しばしタップし続けないとdrag終了イベントが発生しないためのようです。 どうにもならんのでタップイベントでdayClickを呼ぶようFullCalendar.jsを修正しました。 4038行目付近 coordMap: null, // a GridCoordMap that converts pixel values to datetimes cellDuration: null, // a cell's duration. subclasses must assign this ASAP isTouch : false, // separate touch and scroll.
    ...
  • mysql5.6レプリケーションでold_passwordが拒否される

    こんにちは。小宮です。 同僚の湯尾さんから教えてもらった情報を貼っておきます。 【mysql5.6レプリケーション仕様が変わった話】 某環境で mysql5.5でフルdumpしたSQLを5.6に流し込む作業を行い、その後差分データを5.5→5.6にレプリケーションしようとしたところ レプリケーションが出来なかったという症状がありました。 その後、mysql5.6の設定見直しのためstop slaveしてmysqlをrestartしレプリケーション貼り直しと試みましたが 今度は5.6環境同士でもレプリケーションが貼れなくなりました。 原因はmysql5.6からsecure_authの仕様が変更されたためクライアント([mysql]以下の記述)設定で skip-secure-auth が設定されていても レプリケーションIOの時点でold_password(16桁パスワード)が拒否されるためレプリケーション自体開始できないとのことです。 ステータス(show slave status\G)では下記の様になります。 ------------------------------- ・・・ Slave_IO_Running: Connecting Slave_SQL_Running: Yes ・・・ Last_IO_Errno: 2049 Last_IO_Error: error connecting to master 'repl@172.17.xx.xx:3306' - retry-time: 60 retries: 1 Last_SQL_Errno: 0 Last_SQL_Error: ・・・ ------------------------------- 解決策として、お客様の許可を得て、mysql5.5、5.6環境の両方に新たにセキュアなレプリケーション用アカウントを作成して、それでレプリケーション貼りました。 セキュア(old_passwordではない)なパスの作り方は下記の通り。 ------------------------------- set session old_passwords = 0; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.
    ...
  • zabbixのグラフで日本語が文字化けを直す

    おはようございます。インフラ宮下です。 zabbixのグラフ設定は標準では日本語が表示されません。 ※アイテム名に日本語を使っている場合です。 動作環境はこんな感じです。 OS:CentOS release 6.5 (Final) バージョン:zabbix-server-2.2.3 「監視データ」→「グラフ」で作成したグラフを見てみると下記のように日本語の部分が□になってしまいます。 これはアイテムに日本語を使っていて画像変換時にフォントがないのが原因です。 まずはフォントがおかれている場所を確認します。 # ls /usr/share/zabbix/fonts/ graphfont.ttf 次にOSに搭載されているフォントを確認します。 $ ls /usr/share/fonts/ dejavu ipa-gothic ipa-mincho ipa-pgothic ipa-pmincho vlgothic IPAを使います。ただシンボリックリンクを張るだけでOKです。 特にzabbix-serverの再起動も必要ないです。 # ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf /usr/share/zabbix/fonts/ipagp.ttf # vi /usr/share/zabbix/include/defines.inc.php (変更箇所) 7 39c39 < define('ZBX_GRAPH_FONT_NAME', 'ipagp'); // font file name --- > define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name 86c86 < define('ZBX_FONT_NAME', 'ipagp'); --- > define('ZBX_FONT_NAME', 'graphfont'); このようにグラフもきちんと日本語表示されました。
    ...
  • Chef-Soloから卒業、chefのlocalmodeをつかってみた

    こんにちは。小宮です。 事の経緯 お急ぎの場合は飛ばして大丈夫です。 Chef-Soloがdeprecated(非推奨)とかで開発元からchef-zero(localmode)をつかうよう周知されたのが半年くらい前でしょうか。 当時はどうしたらええんやと色々比較してみたりしたあげく時が経ってとうとう検証することに。 数年で入れ替わるのではなく長く続くことが前提だとコストをかけても技術的負債を残したくない事情があるケースもあるようで。 個人的には正直コストをかけて移行するかどうかは微妙なところで、soloがすぐ無くなるみたいな話ではない気がしてます。 世の中的にはcookpadさんからitamaeとか出てたりAnsibleが流行ったりなど。 Ansibleはnot_ifに相当する機能を持たせようとするとドライランできなくなるみたいなのが致命的らしいと聞いたけど、 そもそもYAMLに書きなおすコストがあり得ないので試してないです。 itamaeも気になってたんですがroleとenvironmentをattributeになおす手間がありそうでした。 roleもenvironment数もそれなりの規模で配列attributeを優先順位で意図的にdeepmergeしたり初期化するようなことをしてるし その修正はだいぶヘビーな気が。あとdata_bags機能がないのも超困る。他に移行するにはchefの沼にだいぶつかりこんでいたようです。。 あとChef-Serverはコミュニティ版はHA機能がNGだときいたりしました。 現実的にはlocalmodeだろうということでそんな感じでいつもどおり右往左往で検証してみましたので備忘録です。 chefって情報は結構あるんだけどモヒカンの人(技術レベルの高すぎる人)ばっかりなため初心者がどこで惑うか想像つかないのか肝心なところが分かりづらくて 結局念入りにヘルプを眺めたりググりまくって試しまくるなどというのが多いような。。 使い方も多くてそれぞれの環境が違って色々まざると発狂ちょっとこんがらがりやすいかもしれません。 後日、分かりやすい素敵なチャートをみかけたので追記しておきます。 あなたに合ったChefはどれ? 〜 おすすめ構成確認チャート #getchef - クリエーションライン株式会社 普及と発展には分かりやすさというのはとても重要かなと思います。こんな感じのやってみた記事が多少それに寄与するといいなーと思います。 参考情報 まあ色々みてみたんで参考情報からご紹介いたしましょう。パターン分けておきます。 Chef-Zeroの仕組みとか機能とかの話は別途ググっていただくと分かりやすいと思うんですが、、 インメモリChef-Serverとローカルモードの違いがありまして、私がやりたいのはローカルモードのほうです。 インメモリChef-Serverとして使う場合は Chef-Zeroを起動してcookbookとroleとenvironmentとdata_bagsのデータなんかをknifeコマンドで登録しておく必要があるようです。 インメモリなので、Chef-Zeroを停止すると登録したデータは消えます。 なので手間を考えるとChef-Serverへの移行を見据えて1次的にとかchef-shellでとれる情報をみたい時に使うという用途になるのかなーと思いました。 ブラウザからアクセスすると登録したjson情報などが見えるのはまあ便利と言えば便利かもしれないけどgitでみればいいやんというレベルだったかなあ。 ローカルモードとして使う場合は、コマンド実行時だけChef-Zeroが内部的に起動してレシピ適用終わったら落ちるようで、 knife.rbに書いといたChef-Repoのパスを勝手に見てくれて余計な手間はなさそうでした。 ・Chef-ZeroをインメモリChef-Serverとして動かしたいタイプ Amazon Linuxで簡易Chef Server(chef-zero)を動かしてみた | Developers.IO CentOSにchef-zeroのインストール - clavierの日記 chef-zero を構築して knife-xenserver と連携してみた一部始終 - ようへいの日々精進 XP Ruby - knife zero bootstrap で リモートに chef がインストールできない - Qiita 軽量簡易Chef Server「chef-zero」を使ってみよう #opschef_ja « CREATIONLINE, INC.
    ...
  • gitlabの導入方法のメモ

    こんにちは。小宮です。先輩から要望されていそうな気がしたのでgitlab導入時のメモです。。 やたらめったら長いし手順が複雑でこのとおりやって再現できるかはお使いの環境に依存する可能性があり保障できかねます。 この手順で再現した環境はOSはCentOS6.5でした。 postgresを許容できるのであれば自動的に入れられるオムニバス版があるのでそちらをお使いいただくのがよろしいかと。 個人的にpostgresの運用の知見が心もとなかったのと、RDSに逃げられなくなるのがアレだったのでmysqlで頑張りました。 自分で自動化する時は、passengerとgitlab:setup時の対話処理をなんとか自動化するオプションを付けるとこがキモかと思いました。 この手順自体は部分的にchefがでてきますがほぼ手動です。自動化オプションは最後のほうにちょろっと書いときます。 1.このへんからmysqlをなんとかして入れとく $ wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.tar -P site-cookbooks/mysqld/files/default/usr/local/src/ 2.rbenv等でrubyをなんとかして入れておく (chefでなにもせずにやるとchefgemに寄るので注意がひつよう) rubyのバージョンが低いとGemfileのシンタックスチェックでエラー出てmysql2とかが入らないことも。 3.Gitのインストール # yum -y install libcurl-devel libxslt-devel libxml2-devel expat-devel gettext openssl-devel zlib-devel Installed: libcurl-devel.x86_64 0:7.19.7-37.el6_4 libxml2-devel.x86_64 0:2.7.6-14.el6 libxslt-devel.x86_64 0:1.1.26-2.el6_3.1 Dependency Installed: libgcrypt-devel.x86_64 0:1.4.5-11.el6_4 libgpg-error-devel.x86_64 0:1.7-4.el6 # su - chef;cd infra-chef-repo/ $ knife cookbook create git -o site-cookbooks $ knife cookbook create redis -o site-cookbooks $ vi site-cookbooks/git/recipes/default.
    ...
  • GulpでCSS/JavaScriptコンパイル環境を構築する ─ CentOS編

    従来、WEBフロントエンドの主要アセットであるCSSとJavaScriptはソースレベルでなかなか管理しづらく、すぐにカオスな領域に突入して保守しづらくなっていました。そのカオスな領域にあるCSSやJavaScriptをソースレベルでもっと保守管理しやすいように生み出されたのがGruntやGulpというコンパイルビルドの仕組みです。今の世の流れ的に、フロントエンド開発ではSCSS(SASS、LESS等)、CoffeeScriptなどでCSSやJavaScriptのコーディングを効率化しつつ、同時にソースの保守管理をし易くするという開発手法がデフォルトになってきました。 実際にLESSで変数を使ったCSSスタイリングや、コード量が劇的に少ないCoffeeScriptでJavaScriptを書いてみると、圧倒的なコード生産性の高さに、もはや今までのベタなフロントエンドコーディング手法は改めざるを得ないという境地になります。 ──と云うことで、早速CSS/JavaScriptのコンパイルビルドを行う環境をサービス提供用のCentOSサーバに作ってみようかと思います(ローカル開発環境としてのWindowsマシンへの導入はこちらの記事を参照)。 ちなみに、Gulpは「ガルプ」と読みます。私は最初「グループ」とか読んでました…(笑) Node.js のインストール まずはGulpはnode.jsのモジュールなので、node.jsをインストールしないことには始まりません。そんな訳で、node.jsをインストールするのですが、まずはnode.jsやライブラリのバージョン管理モジュールであるnvmからインストールしていきます。 下記のように、nvmをGitHubからクローンして同梱のシェルでインストールします。 $ git clone git://github.com/creationix/nvm.git ~/.nvm $ . ~/.nvm/nvm.sh 次に、node.jsをインストールするのですが、その前に現在のnode.jsの安定バージョンを Node.jsの公式サイト を確認しましょう。TOPページの真ん中あたりに「Current Version: v0.12.2」というように記載されているので、そのバージョンをインストールするのが無難です(2015年4月7日時点のNode.jsの安定バージョンは0.12.2でした)。 インストールバージョンが決定したら、nvmでインストールします。 $ nvm install v0.12.2 $ node -v v0.12.2 バージョン確認してインストールバージョンが表示されればOKです。 最後に、自分のコンソール環境でnode.jsが利用できるように .bashrc に以下の記述を追記しておきます。 $ vim .bashrc $ cat .bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then .
    ...
  • GulpでCSS/JavaScriptコンパイル環境を構築する ─ Windows編

    いまさら感が強いんですが、世の流れ的に、フロントエンド開発ではSCSS(SASS、LESS等)、CoffeeScriptなどでCSSやJavaScriptのコーディングを効率化しつつ、同時にソースの保守管理をし易くするという開発手法がデフォルトになってきました。私はその辺の技術の取り込みがおっくうで、ついついCSSやJavaScriptを素でコーディングしてしまったりしていたのですが、最近やっている Ruby on Rails の開発でCoffeeScriptでJavaScript書いてみて、圧倒的なコード生産性の高さに、もはや今までのベタなフロントエンドコーディング手法は改めざるを得ないという境地に達しました(いやはや、ようやくですねぇ…)。 ──と云うことで、早速CSS/JavaScriptのコンパイルビルドを行う環境を業務マシンであるWindowsマシンに作ってみようかと思います(WEBサービス側のCentOS(Linux)環境への導入はこちらの記事を参照)。 なお、なぜビルドツールをGruntではなくGulpにしたかというと、今どきのトレンドはGulpの方かなぁ…という漠然な理由だったりするんですが、まぁ、Gruntより設定ファイルが記述しやすく、複数リソースの設定があっても設定が煩雑化しないというメリットもあるからです。 Node.js のインストール まずはGulpはnode.jsのモジュールなので、node.jsをインストールしないことには始まりません。そんな訳で、node.jsをインストールします。 インストールは簡単で、Node.jsの公式サイトからインストーラーをダウンロードするだけです。私の業務用マシンは「Windows7(64bit版)」だったので、node-v0.12.0-x64.msi というファイルが対象になります(2015年3月4日時点のNode.jsのバージョンは0.12.0です)。 インストーラがダウンロードできたら、早速起動させます。いくつか対話が発生しますが、特に注意しないといけないようなインストール設定はありません。 イントールが完了したら、コマンドプロンプト(もしくは、パワーシェル)から、Node.jsのバージョンを確認してみます。 > node -v v0.12.0 ついでにバンドルでインストールされているnpmのバージョンも確認してみます。 > npm -v 2.5.1 これでNode.jsのインストールは完了です。 Gulp のインストール 次にGulpをグローバルにインストールします。 > npm install -g gulp > glup -v [**:**:**] CLI version 3.8.11 これでインストール完了です。もしインストールに失敗するようなら、 > npm install -g gulp --mscs_version=2012 ──とオプションを付けてみると上手くいくかもしれません。 次に、ローカルにインストールします。 ローカルにインストールするにあたっては、npmの初期化を行う必要があります。まず任意にgulpを実行したいディレクトリを作成します。この記事では、C:\npm\node_modules\gulp というディレクトリを新たに作成しています。
    ...