あまりたいして投稿してませんが
技術情報の投稿先をQuiitaにシフトしつつあります。
https://qiita.com/abetomohiro@github
どうぞよろしくお願いします。
技術情報の投稿先をQuiitaにシフトしつつあります。
https://qiita.com/abetomohiro@github
どうぞよろしくお願いします。
Wondows10 Home上に Docker toolboxでLaravelコンテナを立ち上げ
開発用レポジトリからLaravelソースを引っ張ってきたのですが
node_modulesはレポジトリ管理されてないので、コンテナ内に入って
npm installしたところ
のエラーが大量に^^;
原因はどーやらDocker toolboxのベースになってるvirtualboxが
共有フォルダでのシンボリックリンク作成を許してないらしくそれが原因かと。
https://stackoverflow.com/questions/34943002/performing-a-npm-install-via-docker-on-a-windows-host
等も試しましたがうまくいかず。
仕方ないのでホストのwindows10 homeにnode-jsインストールして、
コンテナ上でなく共有フォルダ上から直接
とlaravel-mix動かすための
しましたとさ☆
node_modulesにwindows専用設定とかも入れられちゃったけど
どうせローカルで走らせるだけでレポジトリにコミットされないから別にいいよねっ。
逆に言えばnode_modulesがもともとgitignoreで管理対象外にされてるのも
そーゆー環境依存に依るとこが大きいんだろーな。
そんなわけでどっとおはらい☆
久々の投稿ですが、Laravelでl5-repositoryのcriteriaかます際
実行結果が思い通りにならず大いに苦労しました。
結論から言いますとキャッシュですわキャッシュ。
気づくのにまる2日かかってしまった^^;
criteria操作の際は、ちゃんと
でキャッシュ消して確認しましょーね(・ω・`
もー疲れたよorz
Node.jsでexpressとsocket.IO、ejsを使って
簡単な双方向通信をやろうとしたら
いきなりハマってしまったのでメモ。
■目標
サーバーを起動してクライアントが接続成功したら、
サーバー側に「connected」、クライアント側にアラート「hoge」が表示される。
その後サーバーからクライアントにメッセージ「ムッシュムラムラ」が送られ
クライアントにDOMで表示される。
■環境
node.jsはnvmでv0.10.18をインストール。
サーバーはファイアウォール無効化してるVirtual BoxのCentOS5.8で、
ブリッジ接続IP192.168.10.10、nodeの待ち受けポート8080。
クライアントは同じローカル内。
■手順
まずはnode.jsとexpressをインストールし、
でアプリケーション作成。
んでapp.jsを以下のように作成。
var app = express();
// all environments
app.set(‘port’, process.env.PORT || 8080);
app.set(‘views’, __dirname + ‘/views’);
app.set(‘view engine’, ‘ejs’);
app.use(express.favicon());
app.use(express.logger(‘dev’));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser(‘your secret here’));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, ‘public’)));
// development only
if (‘development’ == app.get(‘env’)) {
app.use(express.errorHandler());
}
app.get(‘/’, routes.index);
app.get(‘/users’, user.list);
server = http.createServer(app);
server.listen(app.get(‘port’), function(){
console.log(‘Express server listening on port ‘ + app.get(‘port’));
});
var socketIO = require(‘socket.io’);
var io = socketIO.listen(server);
io.sockets.on(‘connection’, function(socket){
console.log(‘connected’);
io.sockets.emit(‘message’, {value: ‘ムッシュムラムラ’});
socket.on(‘disconnect’, function(){
console.log(‘disconnect’);
});
});
次にviews/index.ejsを次のように。
socket.on(‘message’, function(msg) {
document.getElementById(“receiveMsg”).innerHTML = msg.value;
});
</script>
</head>
<body>
<h1>Express</h1>
<p>Welcome to Express</p>
<div id=”receiveMsg”></div>
</body>
</html>
■結果
サーバー側に「connected」は表示されるがクライアントが反映しない。
ブラウザ変更しても同じ。ただしサーバー側でCtrl+cでプロセス終了させると
その瞬間クライアント側にhogeアラートだのが表示される。なにこれ(・ω・`
サーバー側のログはこんな感じ。
以下同じような内容のdebugが繰り返し延々と続く
■対応
サーバー側はクライアントの接続を認識している模様。
つーことはemitがうまくいってないていうことか。
んで調べてみたら以下の記事発見。
Connection Failed from Client to Server in socket.io
この一番下に書いてある、
を追加設定したらhogeアラートとムッシュムラムラが表示された。
なんでかは後で調べることにする。なんか疲れたお(´ω`)
カスタム投稿でAdvanced Costom Fieldを使用してカテゴリ別にカスタムフィールドを作った後、
そのカテゴリ選択をチェックボックスでなくラジオボタンでやりたいと思いました。
やり方をざっと調べると、主に
・PS Taxonomy Expanderプラグイン使う方法
・function.phpで処理する方法、
・coreを直接書き換える方法
があるようです。
この中でどれを使うかということですが、PS Taxonomy Expanderは試してみたところ、
なんかACFと相性が悪い感じでした。またcoreの書き換えはできるだけやりたくなかったので、
消去法でこちらを参考に
js使ってhtmlを書き換える処理をfunction.phpに持たせてやることにしました。
そんでカスタム投稿画面を見ると、おお、カテゴリ選択がラジオボタンになってますw
しかしどーやら今回使用するACFバージョン4.1.6では、カテゴリ選択はチェックボックスでないとうまく動かないようです。
ラジオボタンを切り替えてもカテゴリ別に作成したカスタムフィールド項目が変更されません。
このカスタムフィールドは、カテゴリ変更があった際にAjaxで動的に項目変更するようですが、
おそらくそのトリガにtype=checkboxを使っているのでしょう。
んで探してみると、ありましたw
場所は、/wp-content/plugins/advanced-custom-fields/js/input/ajax.js の220行目付近、
// vars
var values = [];
$(‘.categorychecklist input[type=”checkbox”]:checked’).each(function(){
values.push( $(this).val() );
});
というとこです。
この中に2か所あるtype=”checkbox”をtype=”radio”に変更してやるとうまく動きましたw
ちょっと関わりのあるサイトで、WordPressの管理画面がおかしいというので調査をしました。
入って見ると管理画面のレイアウトが崩れています。
またプラグインがうまく認識されてないのか、プラグイン一覧が空白になってます。
とりあえずサイトにFTPで繋いで、wp-config.phpの上の方に
を足すと管理画面の崩れはなおりました。でもプラグインはあいかわらず空っぽのままです。
しかし/wp-content/plugins/を確認してみると、プラグインはちゃんとあります。パーミッションも問題ないようです。
もっかいwp-config.phpを確認してみます。
・・・・
よく見ると、冒頭に見慣れぬ行が入ってます。
あり?zend frameworkなんて使ってたっけ(・ω・`
・・・(思考停止)
あ
なんじゃこりゃー(・ω・`
やられてました。いつの間にかなんか変なコードを埋め込まれてます。
とりあえずSSHでサーバーにログインし、findコマンド叩いてどれくらいやられてるか調査します。
うわあ(^ω^;
出てくる出てくらわうぇあfっがg
WordPressの管理モジュール等も含め、数百のPHPファイルの冒頭にかたっぱしからこの$zend_frameworkと文字列が入っていましたorz
どっからやられたんだ・・・
更に調べると、とりあえず感染しているのはPHPファイルだけのようです。
感染ファイルのタイムスタンプは、以前作業した日とほぼ同じで特に怪しい感じはしない気がします。
サーバーのログも洗ったのですが、FTP、SSHのアクセス履歴に怪しい箇所はありません。
とすると、wordpressの管理画面経由からパスワード総当たりで入られたか、元来の脆弱性を突かれたのでしょうか。
・・・wordpressの管理ユーザーに、ユーザー名とパスワードが空白の人が追加されていました^^;
やっぱり管理画面からやられたのでしょうか。でもWordPressに含まれていないPHPソースもやられてるので確証は持てません。
他にも同様の事例がないか調べてみると、このような記事がありました。
この記事で埋め込まれたコードはこちらのものとほぼ同じです。
また記事内でこの文字列をデコードしたものも公開していますが、
自分が調査中の感染を(中途半端ながら)デコードしてみたものとこれまたほぼ同じでした。おそらく同一発信源と思われます。
んで肝心のこの埋め込まれたブツが何をするかなのですが、上記のサイトの説明を参照させてもらうと
どうやらIPやユーザーエージェントなどアクセスユーザーの環境情報を外部サイトに送り、その結果「なんか」を
ひっぱってくるそうです。
そしてなにを引っぱってくるのかは怖くて詳しく確認できませんでしたw
なお外部サイトはIPでなくドメイン名で指定されています。caドメインなのでカナダのサーバーですね。
んでカナダのwhoisで確認すると、ドメイン登録者のメールアドレスはロシアになっています。
記事のコメント欄を見ると、ハロードリープラグインが怪しい、いや怪しくない、管理画面からパスワード総当たりされた等不確定な情報が飛び交っています。
一応/wp-content/plugins/フォルダを確認してみると、確かに怪しいタイムスタンプで感染コードとハロードリープラグインが書かれたindex.phpが置いてありました。
あながち関係あるのかな^^;
まだ感染路や影響範囲が完全にはわからないので、さしあたり応急策ということになりますが、
記事主の方は、もし感染したらとりあえず感染してないバックアップから復旧させるか、無理なら手作業で感染箇所を探して削除していくことと、
またwordpressのプラグインが全て最新か確認することを推奨しています。
wordpressを使用している皆様は是非一度ソース内のPHPファイルを確認されることをお勧めします。
たとえば、PHPなどで動的に生成される登録順(数値型)をキー値とした配列があるとします。
これを50音順でソートされた形のデータが欲しいとします。
しかしこの配列を実際に読み込ますと、自動でキー値でソートされてしまいます。
//// Jqueryのeachを使う
$.each(ary, function(i, val){
console.log(i+’:’+val);
});
//// for inを使う
for(i in ary){
console.log(i+’:’+ary[i]);
};
//// 結果
どっちもキー値順で出てくる
1:はげ
2:ほげ
3:ひげ
4:ふげ
以前はIE9やsafariなど特定のブラウザのみに発生する挙動の違いという扱いでしたが、最近では
ほぼ全てのメジャーなブラウザで起こるようになってますね。仕様ということでしょうか。
これを回避する方法を調べたのですがなかなかピンと来るのがありませんでした。
例ではひらがなだけを使用した単純な値4つのみですが、実際には漢字やアルファベットも混ざった結構な数のデータとなるので
単純にJavascript上で値でソートするというのは避け、配列生成する段階でなんとかしたいところです。
そうなると、
それぞれの要素を順番でラップする(順番情報を埋め込む)とか
キーの頭にアンダースコア付けて、キー値が必要な時ははずしてやるとか
こういうことになってしまいます。
既存の作成物のカスタマイズとなるので配列読み込みロジックの大幅変更は避けたいところですがまだいい方法見つかってません。
誰か解法かもん><
何かとお世話になってるLogwatchですが、よく見ると監視項目にMySQLが入っていないようです。
そこで調べた所、mysqld.logを監視対象に追加するスクリプトを作成している方がおられたので
早速参考にさせてもらい追加しました。なおサーバーはCentOS5.6、Logwatchのバージョンは logwatch-7.3-10.el5 です。
Logwatch for PHP errors, the Apache error log and MySQL
なおこちらではlogwatchにHTTPのエラーログとPHPログを追加監視するスクリプトも公開されています。
■ファイル設置
上記サイトのLogwatch configuration for MySQLから3つのファイルを落とし、ファイル名を指定のようにします。
自分の環境では落とす場所がサイトの記述と若干違うようです。それぞれ上から
となりました。
■設定変更
次に、それぞれの設定を少し変更します。
必要に応じてログファイルパス変更
LogFile = /var/log/mysqld.log
↓
LogFile = /var/lib/mysql/hogehoge.com.err
実行権限追加
chmod 755 /usr/share/logwatch/scripts/services/mysql
これで終わりですw
あとはlogwatch.plを直接実行して、飛んできたメールに
MySQLの項目が追加されているか確認します。
/usr/share/logwatch/scripts/logwatch.pl
てな具合でまたよろです。ノシ
なんだかこっちのブログもだらだらになってきましたなw
先日PhoneGapの講習会があったので行ってきました。
んでPhoneGapって何かていうのを備考録的にまとめておきます。
PhoneGapとは?
どんな原理なの?
なにができるの?
ぶっちゃけどうなの?
なんか歯切れ悪いw
でもそういうことだと、業務用WEBアプリとかだったらいいのかなと思ったけれど
サーバーとの連携がちょっとやりにくいらしいのでそれ考えるとやっぱ微妙w
なんだかいろいろと微妙なPhoneGapですが、コンセプトは面白いと思うので
こっから飛躍してほしいと思いますw
てか自分話聞いただけでまだ使ったことないですがwwwっうえwwww
ここのとこやっといろいろ落ち着いてきたので、
そろそろiphoneアプリ開発を再開したいと思いました。
せっかく職業訓練で習ったのでなんとか有効活用したいw
そして何よりせっかくのあこがれのクライアントプログラムを書く技術、
このまま放置しておくのはもったいないw
(このことについては語ると長くなるので省略します)
そこでまず最初に、iOS開発者登録をすることにしました。
iOS開発者登録をすると何ができるかというと、自分のやらの開発用登録したiphoneに
自分で作ったプログラムを、Appstoreとか通さず直接入れることができます。
でも逆を言えば、これを登録しないとそれができません。
年間¥8400払う有料登録なので今までためらっていたのですw
今回やろうと思った理由は、
やっぱり実機でのテスト無しでは開発が味気ないことと、
自分はiphoneのUI周りは結構キモな部分と考えているのですが、
実機無いと頭で設計しただけの使い勝手の悪いUIに
なっちゃう可能性が高いのと思うのです。意外な利用法など、
新しい発想も生まれにくいと思います。
あとは、時は来た。それだけだ。
某プロレスラー風に腕十字を切って、やり方をぐぐりつつ登録を進めて行きますw
うう、結構めんどい^^;
なんかSSLの設定でやるような認証キー作ったりとかしたのですが、
一番めんどいのが自分のマブ子(半年前にヤフオクで3マソで買ったMacbook)のOSの問題でした。
マブ子OSは10.6 Snow Leopardで、持ってるiphoneのOSがiOS5.1。
んでこのSnow Leopardで正式版として開発できるiOSは5.0までとかだそうで、
LionにOSアップデートしないとだめだそうで^^;
とりあえず最初xcode4.2入れたのですが、上に気付いてOSをLionにアップデートして、
またxcode4.3入れ直して、ここで既に2日過ぎました。なんか遠いよママン(´Д`;)
それでもでやっとxcodeがiphone認識するとこまで行けました。
では早速転送テスト→エラー
まーそんなもんでしょ^^;
ここまでで外堀は埋めたので次は内堀の戦い(と信じたい)。
無事テストプログラムをiphoneに転送できる日は来るのか。
とりあえずエラーコードの内容でもぐぐりに行きますorz