ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。

木曜日, 8月 21, 2014

vim! grep!

最近会社のマシン上でvimのBundleが正しく動くようになりました。

今までこのマシンが悪いと思っていたのですが、悪いのは結局本人ですね!

んで、vimが動くようになったので、外部grepの設定を行いました。
できるようになったことは次の通り(一例)

カレントディレクトリに対しての検索
grep -r search_word * | cw 

今開いているファイルの検索
grep search_word % | cw

検索結果はリスト表示されるのでこれがやれないとすごいつらいです。検索もかなり早いので、grep -r とかをcygwinとかでやるより素敵ですよ。

現状のvimfilesのディレクトリは、以下のリポジトリに登録してあります(汚いから書き方は他の人を真似てね!)

happy vim life

月曜日, 7月 07, 2014

とあるサイトのURLを飛ばしてくれる ChromeExtension作成中

今以下のようなChromeでとあるサイトのリンクをクリックした時に、リンクに含まれる先をとってきてサーバーに返却するExcentionを作成中です。


えっと、、、またツールですね。
twitterのなにがしかを作ろうと思っていたのですが、うまい事考えがまとまらずこういう事をしています。

extensionじゃなくて、userjsにしてやればいいのでしょうけど。

後ほど作ったら報告

木曜日, 6月 05, 2014

ログどうしましょう。

crontabで実行したものがメールに投げられてうざい。 /dev/nullに葬るか?

と思ったのですが、あんまりじゃね?と思ったので、これを期にログを管理する方法を考えてみましょう。ということを考えた訳で、


cron で > /dev/null して椅子を投げられないための3つの方法 - 酒日記 はてな支店 http://d.hatena.ne.jp/sfujiwara/20120613/1339547638

syslogを押さえよう! | Think IT http://thinkit.co.jp/article/724/1

シスログの管理 rsyslog.conf の設定 〜 CentOS6 | EasyRamble http://easyramble.com/configure-rsyslog.html

rsyslogの方がサーバーが増えたときも良さそう。
iptablesで外部接続を遮断しておけばいいべ。


という訳で、ログ周りの設定を。。。するか。

月曜日, 5月 05, 2014

tmuxよいですね。

今までscreenというものを使っていましたが、沖縄のガチな友達から教えてもらいました、tmuxを使っております。
印象的にはscreenより便利です。 キーバインドも気になったら変更すればいいし、screenよりも柔軟でよいです。 今のところ結構利用しておりますが、バグった瞬間もないのでおすすめです。


screen を使っていたときには、ssh-agentのsocketをどうやって持ちまわすか?についてscreenrcに書いておりましたが、これで書かないです みそうです。tmuxでコンソールを複数開いてwhoしてもひとつしかコンソール表示されないのに何か秘密があるんじゃないかとか。

注:ssh-agentの例のアレ
│     /tmp/ssh-XXXXXXXXXX/agent.<ppid>
│             Unix-domain sockets used to
│             contain the connection to
│             the authentication agent.
│             These sockets should only
│             be readable by the owner.
│             The sockets should get
│             automatically removed when
│             the agent exits.
screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips
時代はGNU screenからtmuxへ - Dマイナー志向

2015/5/5追記
どうもssh-agentのsockets共有するときにこれでOKっていうものがこの当時見つかっていなかったらしく(mac,windowsのagentがよしなにしてくれていた。)
なんで、linuxでもこれで解決できるよ。っていうのがあったら教えてください。

debianな人も赤帽な人もBSDな人もみんなまとめてtmuxしたらいい!

同一端末上で、puttyやteratermを複数起動して使い分けている人是非試してみてくださいな。
(けっこうsshで接続するときも切断されると結構面倒ではないですか? tmuxやscreenを使えば、その辺の面倒な事が一気に解決。)

いつもながら乱文すいません。

MacでChromeが暴走

Js周りの解析で結構便利とか、結構軽いのが好きとか、Shift+ホイールで横移動できたりで、デフォルトブラウザをWindows,Macともに設定しています。

そこで、最近Macの電池が切れるのが早いし、処理をおこなっていないときにも、ファンが回っているなぁ。。。夏だからかな?とかそんなことを考えていました。

ActivityMonitorで確認してみると、ChromeがCPU usage ダントツの120%。
タブしか開いていないのにこれはありえないでしょう。

Chromeもエクステンションが増えてきたので、誰かが暴走しているのかなー?と
そうなった時は、右のメニューボタン?=>ツール=>タスクマネージャを開きましょう。

拡張機能が最初怪しいということで、すべてをOFFにしても解決しなかったので、途方に暮れていました。

私の場合今回は、オフラインgmailが原因でした。(あれって拡張機能だけど、どうもツール=>拡張機能には出てこないみたい)

なんで、ホームにてオフラインGmailを削除しますた。(どのみちあまり使っていないですし)


てなわけで、暑い暑いなかファンがえらい元気に回っている時が多いですけど、そこまで処理をおこなっていないときにそうなる場合は、Windowsならtaskmgr、MacならActivityMonitorみてみてねー。。。ってことで。

tizenのdata contorolsを読み解いてみる。

tizenを使う用事があって、その中で利用するData Contorolsについて読んでみる。

忘れっぽいので書いたあとにドキュメントをなくす人だからここに書く。

追記:
DataContorlって何するの?まとめ。
アプリ間でデータを共有するときにAppManager?AppContorlの一緒に載せてデータを送るとか、そのリスナーだけで解決できない小難しい問題に対しての解決策を提供するもの。
SQL型とキーバリュー型があるから好きなものを使うよろし、(一つのパッケージに複数のプロバイダーを入れても問題はないからそれでも良いと思う。 SQL型の場合今見ている限り、DBを切り替えるみたいなものはないですし)

Datacontrolを使うためには、
サービスアプリ(DataControlProviderとなるもの)
クライアント
でやりますので、1対多で使えるけど、実際これってデータの完全性とかトランザクションの概念はあるのかな。。。 その辺がまだわからない状態で時間切れになりました。

チラ裏でやれ。ってツッコミは正解でモチベーションのために記事書いた。公開したいものがあるから記事書いたわけではない( ー`дー´)キリッ

BGMはこんな感じの意味が読み取りづらい曲を流していると作業に集中できることを発見。


日本語訳を公開している人もいなかったので、読みながら書いてミスを発見するために文章を起こした。
でもね、訳も間違っている。話の大筋は自分が追える(書いたあとに思ったのは、これだったら本文読んだほうが1.5倍早く追える)このエントリーを更新していくきりょくがなかったりするんで
もし、コメントにノイズ載せるなハゲ的な苦情が殺到したらページを閉じます。

https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Fguide%2Fapp%2Fdata_controls.htm

上記のページから開始。

データコントロール

データコントロールは標準的なアプリケーション間のデータのやり取りを行う機構です。
すべてのアプリケーションは、データの共有を他のアプリケーションに対してリクエストすることができます。しかし、サービスは自分のデータを提供することしか出来ません。

2つのタイプのデータコントロールがあります。
SqlDataContorol
MapDataControl

ここで脱線します(具志個人的に使って覚えるほうが早い人はこっちのほうがいい気がしたので)--------------
チュートリアルを見たほうが早いという人は
SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataCOntrol
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrol_map.htm

とかをみればよい。
------------------

続き行きます。
SqlDataControl
このクラスは、他のサービスアプリケーションにより、特定のデータをSQL型のデータコントロールを使用することができるようにするものです。
また、あなたのサービスアプリケーションからSQLデータ管理プロバイダーを定義することができます。

MapDataControl
このクラスは、他のサービスアプリケーションからエクスポートされたデータに対してキーバリュー型のデータアクセスを可能にするクラスです。またサービスアプリケーションかからキーバリュー型データ管理プロバイダーを定義することができます。

(exportの意味が結構危ないですね。 また、データコントロールは、データ管理と書くべき?CRUDするだけじゃないの?)

データコントロールは、共有データにアクセスし、結果を戻すための操作を供給することができます。

データコントロールを使ってみる

sqldatacontrol または mapdatacontrolのインスタンスをappmanagerクラスから取得します。
appmanagerクラスは、要求されたデータコントロールを提供し、あなたのアプリケーションにデータコントロールを返すサービスアプリケーションを見つけます。

データコントロールはプロバイダーIDを第一情報として使います。
これは、データコントロールプロバイダーで定義します。
例えば、static const Tizen::Base::String DATACONTROL_PROVIDER_EXAMPLE = L"http://tizen.org/datacontrol/provider/exmaple"
(あれ?この書式operationidに似てね?)

sqldatacontorl
appmanager::getsqldatacontorlN メソッドを使用してプロバイダーIDを指定する場合、一意に特定のSQLデータコントロールを取得出来ます。データコントロール取得後、(解決 後)sqldatacontorlのselect(),insert(),update(),deleteなどを呼び出せます。
sqldatacontorlインスタンスの実行結果はリスナーを返します。(この時に返すのは、OnSqlDataControlSelectResponseReceived(),
OnSqlDataContorlUpdateResponseReceived(),
OnSqlDataContorlDeleteResponseReceived(),
OnSqlDataContorlInsertResponseReceived(),
はTizen::App::ISqlDatacontorolResponseListenerのインターフェースです。
サービスアプリケーションが終了した時、そのsqldatacontrol操作を終了した応答リスナーが呼び出されます。(上の4つね。)

(やばい、訳があやしすぎるw 楽しくなってきた。)

MapDataControl
GetMapDataContorolN() を使用してプロバイダIDを指定する場合、ユニークな特定のマップタイプのデータコントロールを得ることができます。データコントロールを解決したあと、 GetValue, AddValue SetValue removeValueのようなMapDataContorlクラスのメソッドをよびだします。
MapDataContorlインスタンスの実行結果は以下のメソッドから取得出来ます。
OnMapDataControlAddValueResponseReceived(), OnMapDataControlSetValueResponseReceived(), OnMapDataControlRemoveValueResponseReceived()
はTizen::App::IMapDataControlResponseListenernaのインターフェースです。
上記の応答リスナーはサービスアプリケーションがマップデータコントロールの操作を行ったあと呼び出されます。

データコントロールのライフサイクル(ここは図を見たほうがいい)
順番を書いておくと

  1. データコントロールを取得(C++App)
  2. データコントロールのプロバイダーIDを解決、アクセス権限をチェックする。(AppManager)
  3. データコントロール応答リスナーをセット(C++APP)
  4. データコントロールメソッドを使用(C++APP)
  5. データコントロールを起動または、データコントロールのプロバイダーに要求(これはきっと、provider側(datacontorolを実装したアプリ側))
  6. 結果が非同期にデータコントロール応答リスナーに対して送られる。
  7. 終了
順番は、そのプロバイダー側で制御してあげないといけないのか。

データコントロールを用いた開発

でサービスから他のアプリケーションにデータを出力する。(やっぱり、exportの訳が分かんね)
データベースファイルを提供する(データベースを提供という解釈で)サービスアプリは、ISqlDataControlProviderEventListenerインタフェースを実装し、
Tizen::App::DataControlProviderManager のSetSqlDataControlProviderEventListener()を使用し、プロバイダーのリスナーとして登録します。
サービスアプリケションは、SQL型データコントロールリクエストをプロバイダーリスナーからデータコントールリクエストを
OnSqlDataControlSelectRequestReceived(),
OnSqlDataControlInsertRequestReceived(), OnSqlDataControlUpdateRequestReceived(), OnSqlDataControlDeleteRequestReceived() 
ISqlDataControlProviderEventListenerインターフェースから受け取るよ。。。
(手が疲れてきたよ)

んで、キーバリュー型の〜〜、、、、(ここも大体が同じ説明、何を実装して、どれからリクエストをとるかというお話)

終了

このへんを頭に入れて、各チュートリアルを見てみましょう。


SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

両方共、インタフェースの用意からインスタンスの取得、データの読み取り追加まで流行っています。更新と削除については、コードは用意していないけど、きっと同じように〜ってなっていますね。

使い方はわかったけど、んー。 RDBMSないし、キーバリューのサーバー(サービスアプリケーション)に対して、クライアントからどうすれば利用できるか。を書いたものでしたねー。。。。 ちょっと、これ制御めんどくさそうだな。

さ て、読み解いた。 Tizenの中だけでデータをやり取りして(MessagePort)、そして、データを書込して(DataControl)で面白い 題材ないかなー。。。。 私の頭ではぐちゃぐちゃになってきっともうすでに存在しないデータに対して更新とかやりそうで。

眠たいので、風呂入って寝ますかね。

火曜日, 4月 29, 2014

PHP 5.5 & cakephp(on composer)

Jenkinsをインストールした際にfinallyを使っているものがうごかねぇ!という事が判明したので、macとcentosのphpのバージョンをアップ!
ついでにcomposerに寄り道した時のメモ

やったこと:php55とphp-fpmのインストール cakephp on composer
composerを利用してphpunitを目的のものをインストール(古すぎず、新しすぎず欲しいライブラリを自由に個々の環境にインストールしてbundlerみたいに)

まず、php5.5のインストール

mac:

まとめ:色々あって問題解決 twitterからその時のログをコピペ
brew doctor->指定の問題を解決->brew uninstall opennssl->brew uninstall postgresql-> brew install openssl postgresql -> brew install php55 -オプション
原因:openssl postgresqlの順に参照しているライブラリのシンボルが無いぜーってエラーでした。

linux:

まとめ
remi-php55 remiを追加yumリポジトリとして利用する事で解決。
linuxに関してはソースインストールを行うも、コンパイル後、postgresqlのシンボル周りでオコされたので撤退。
php55のインストールについては、以下の記事参照。
CentOSにPHP5.5をインストール - Qiita

事の発端はcakephp cakeコマンドでbakeコマンドを動かそうとしたら、おこられたことから。

久しぶりにアップデートをかけてみると、やっぱりかなり更新があったみたいです。。。
パッケージが新しい状態かどうか確認するのは大切ですなー。

composer

http://book.cakephp.org/2.0/ja/installation/advanced-installation.html
pearの問題点であるバージョンの異なるライブラリを読み込みできない事を解決しようぜ!ってものだと思っています。
んで、cakephpからcomposerでライブラリをインストールしていたのですが、面倒になってcomposerでcakephpで管理してしまえ!
という事で、
手順メモ: (以下の項目に関してですが、一度整備してしまえば、cakephpとりに行って準備するより面倒が少なくてよいかなと。)

composerの取得

composer.json作成

結構使い方間違っているんだろうな。って項目も多いですが、以下のように。

bundle installのように


php composer.phar install  
memo:このときrequire-devの項目に関してはインストールされないはずなんですが、なんかインストールされていました。 まぁ、使うのでいいのですけど。(プロダクション環境では無効にできるようにしておかなければなりませんが)

ディレクトリ確認

その後のディレクトリ構成は以下のようになっていると思います。
▸ Plugin/
▸ Vendor/
  composer.json
  composer.lock
  composer.phar*

プロジェクト作成

./Vendor/bin/cake bake applitionname
applicationnameに指定した名前がカレントディレクトリに作成されます。

bootloaderの設定

このままでは、せっかくインストールしたphpunitも動かないので、bootloaderもちゃんと設定してあげましょう。

※gistをbloggerでさくさく貼付ける方法が欲しいです。

composerを使ってcakephpを導入しなかった人へ

通常使っているbootloaderと少し異なるので、diffでもとった後に導入を検討してください。(きっと、この辺はcakephpを素で落としただけの人も使える)

以上です。使いたいライブラリが増えたらpeclとかじゃ無い限り対応できますし、何よりライブラリの制限も設ける事ができるので、よりよいのではないかなと思います。

結果

成果:php5.5系のインストール composerの導入
失ったもの:kyototycoon用のdatasource。。。。 残っているとうれしいかな。

火曜日, 4月 08, 2014

nginx + passenger macで

rvmで構築された状態でpassengerのインストールについて分かりやすく書いてあった。
Nginx + Passenger 3 + RVM for Rack app on OS X using homebrew only 

そもそもpassengerをnginxで動かすときの設定って覚えていなかったので、調べてみると簡単に説明した所があった。
Design Recipe 別館 Blog - nginx + Passenger による Rails 環境の構築 

CentOS 6.4 server setup with Ruby On Rails, Nginx and PostgreSQL - Karol Galanciak - Ruby on Rails developer from Łódź, Poland 

nginx側にpassengerについて教えてあげるところが記載されていなくて、403になっていったぽい。