2014年11月22日土曜日

Hiveのcollect_list

以前はプリミティブなタイプしかつかえなかったが、
0.13からstructやarrayのも使えるようになった。

https://issues.apache.org/jira/browse/HIVE-5294

2014年11月8日土曜日

Hiveのチューニング


少し古いけどオススメ
http://www.slideshare.net/ye.mikez/hive-tuning
2013年7月 (Hive 0.11頃?)
ORCフォーマット(非圧縮)、Tez、パーティション(とバーチャルカラム?)の利用
ソートされたデータを入れる
short circuit read (HDFS-2246)
その他プロパティーの確認項目あり
現在のプロパティーの確認方法
hive>set;

クエリーのパフォーマンス比較 (2014年2月)
https://amplab.cs.berkeley.edu/benchmark/
RedShift, Impala, Shark(SparkSQL), Hive, Tez を比較
(HiveのORCFile, ImpalaのParquetは利用してない)
これを見るとMapReduceからTezに変更するだけで3~4割は早くなる感じ。
すごいのはSparkSQL。Hiveとどの程度互換性があるのか早く確認したい。
Tezも既にHiveに取り込まれて、簡単に利用できるので魅力的。


■ Tezの利用は簡単で効果大。とりあえずTezを利用すべし。
個人的な関心はSparkSQLへ。

Hive on Tez
https://cwiki.apache.org/confluence/display/Hive/Hive+on+Tez

0.13からにHiveに組み込まれている
https://issues.apache.org/jira/browse/HIVE-4660
https://issues.apache.org/jira/browse/HIVE-6098

Tez (Hive Configuration Properties)
https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Tez

Chapter 10. Installing and Configuring Apache Tez
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.5/bk_installing_manually_book/content/rpm-chap-tez.html

■ tezを有効にする(mapredueからtezへ)
set hive.execution.engine=tez;
mapreduceへ戻す
set hive.execution.engine=mr;

2014年10月30日木曜日

Hue Hue だよ

Hueはかっこいい。しかもDjango(ver1.4だけど)でできてる。
(tomcatじゃないよ!!!)
画面はBootstrap, Knockout.js, jQuery

GitHub
https://github.com/cloudera/hue

Hue
http://gethue.com/

Hadoopの標準GUI HUEの最新情報
http://www.slideshare.net/Cloudera_jp/hadoopgui-hue

Hue SDK
http://cloudera.github.io/hue/docs-3.6.0/sdk/sdk.html

Hue関連のニュース
http://gethue-jp.tumblr.com/


インストール、設定
Install Hue without Cloudera
http://stackoverflow.com/questions/20579357/install-hue-without-cloudera

config
http://docs.hortonworks.com/HDPDocuments/HDP1/HDP-1.3.3/bk_installing_manually_book/content/rpm-chap-hue-5.html


2014年10月24日金曜日

hdfsで利用できる列指向フォーマット


現状ではRCFile だけが現実的。
 ORCはHive専用状態。
 Parquet は利用できるデータ型が中途半端。
(たぶん、半年後にはparquetがくるぞー)

Parquet,ORCFile  についてのまとめページ
しかも日本語。
http://ozalog.blogspot.jp/2013/03/rcfileparquetorcfile.html

2014年10月23日木曜日

rails のSECRET_KEY_BASE でエラー


railsをproductionモードで起動したらエラー

Internal Server Error 
Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`

config/secrets.yml
productionモード以外は固定値が入っている。
rails4.1から?

とりあえずこれで動く。
# export SECRET_KEY_BASE=`bundle exec rake secret`
# rails s -e production

実際の運用ではどう設定しようか?

2014年10月21日火曜日

シリアライズ

これらのシリアライズ、デシリアライズは、どの分野でも使える汎用的な物だけど
hadoop (hive)で使うことに絞って書いてます。

JSON (テキスト)
avro, protocol buffer, thrift (バイナリ)
msgpackも良さげだけど、あまり使われていない感じ。

avroなどバイナリ系の規格は、データサイズを押さえる以外にも
データ型を指定できる点が便利。
特に、hive, javaなどとの利用を考えると。

JSONは便利なようで不便な気がする。
(hadoopの世界では)
5 Reasons to Use Protocol Buffers Instead of JSON For Your Next Service

thriftはRPCの機能でもhadoopで便利に使われているので、もっと調べる。
avroはjsonでスキーマ定義できる(テキストエディターでは見れないけど扱いはJSONと同じ感じか?)。

Hive で利用できるSerDe
JSON SerDe
https://github.com/rcongiu/Hive-JSON-Serde
protocol buffer
https://github.com/twitter/elephant-bird

パフォーマンス比較
https://gist.github.com/joshsz/11299196

2014年10月9日木曜日

rbenv のちりぬるを


本家
https://github.com/sstephenson/rbenv
https://github.com/sstephenson/ruby-build
https://github.com/sstephenson/rbenv-default-gems

インストール

# rbenv
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# ruby-build
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# default gems
$ git clone https://github.com/sstephenson/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems
# すべてのバージョンでbundler を自動インストール
$ echo 'bundler' > ~/.rbenv/default-gems

コマンド

rbenv install --list
rbenv install 2.1.2

# 利用可能なversion (未インストールも含めて)
$ rbenv install --list

# インストールされているversion
$ rbenv versions


■ Todo
user 用とsystem全体
rbenv local と .ruby-version

2014年10月4日土曜日

rspecの新しい記事 rails4



RailsテストフレームワークRSpecのインストールと基本的な使い方、基礎文法 (1/3)

docker イメージ作成


自分でイメージを作って管理できたら、いろいろと使えるはず


Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2)

docker用にCentOS 6.5のbase imageを自作する

Docker向けのコンテナをゼロから作ってみよう

Dockerイメージのレイヤー構造について

Dockerを使って開発イメージを作成し、公開します


Dockerクイックツアー

Hadoop 設定、開発環境


Standaloneで作るのがオススメ。 Eclipseで。

■ MapReduce
mapreduce 開発  Eclipse, standalone  2013年2月
Hadoop & Eclipse: Part 1: Basics – Possible options for running Hadoop from Eclipse
Hadoop & Eclipse: Part 2: Running Hadoop in the stand-alone (local) mode in Eclipse (Building Hadoop source in Eclipse)
Hadoop & Eclipse: Part 3: Installing Hadoop in stand-alone or pseudo-distributed mode


Eclipse, JUnit  2014年6月
JUnit入門その1[Eclipse4.4のJUnitプラグインの基本的な使い方]


■ 生Hadoop のインストール (CDHじゃない)
Apache Hadoop のインストール
Apache Hadoop 2.2.0 を Debian 7にインストールする

■ HBase
CentOS 6.5でHBaseのスタンドアロンモードを動かす

■ Spark
SparkをStandalone Modeで実行してみる

Spark を試す
Spark & YARNを試してみる(前半)
Spark & YARNを試してみる(後半)




2014年9月17日水曜日

2014年8月31日日曜日

rspec 関連


rspec doc (Relish)Better Specs

とりあえず、この辺りをまねしてみる。
RailsのテストフレームワークRSpecの基礎知識

テストの実行が、よりスムーズになるように
Setup Rails 4.1, Spring, Rspec, and Guard

matchers
Built in matchers (Relish)
Matchers (apidoc)

■ APIのテスト
Request spec を利用するのがポイント。
Rails API Testing Best Practices
Rails でつくる API のテストの書き方(RSpec + FactoryGirl)

dockerメモ


かなり、中途半端な状態です。


docker インストール
yum (repo?) でインストール
chef recipe 作成

docker の起動権限
起動時にmongoを起動

イメージ作成

docker起動終了スクリプト

ホストとコンテナ間でファイル共有
コンテナのログ出力
dockerfile
Remote API で何かできる?
docker-client (ruby クライアント)
docker キャッシュ

ネットワーク
ip address show "docker0"


dockerコマンド
docker pull centos
docker images
commit

docker info
docker run -i -t centos /bin/bash
docker run -d -p 8001:80 chef-node:centos6 chef-client -i 600 -s 60 -N "node_01"

# コンテナ削除
$ docker rm `docker ps -a -q`
# イメージ削除
$ docker rmi [IMAGE]

# docker-host上からログイン
docker-enter <コンテナID>

Docker-provider



2014年8月30日土曜日

pull requestとコードレビュー (github flow)


■ github flowのワークフロー
masterブランチでは作業せず、目的毎に作業用ブランチ(フィーチャーブランチ、トピックブランチ、hotfixブランチ) を作ってゴニョゴニョと作業する。

masterにマージするときはpull request で依頼する。自分でマージしない。
(だれか! この作業ブランチをmasterに取り込んで!)
チーム内の誰かが「確認」後、masterへマージをしてくれる。
なんと! この「確認」がコードレビューとなってしまう。

というわけで、自分自身でmasterブランチへマージせず、pull request
することで、自然とコードレビューされる仕組みとなっている。
(自然かどうかはチーム力によると思うが.....)

GitHub Flow (日本語訳)

プルリクエスト/レビューを取り込んだ、よりシンプルなGitHub Flowの運用を図解する

Webサービス開発現場から / 近頃の開発のやり方 ・・・ Github と Pull Request とコードレビュー

GitHubをすすめる7つの理由


コードレビューで喧嘩。。。。。
コードレビューを円滑に行いたい


CIサービス
CircleCI
アクトキャットの「SideCI」は、コードレビューを自動化してセキュリティホールをふさぐ
Side CI

2014年8月24日日曜日

mongodb 関連

mongoコマンド (クライアント)

サーバー
mongod
confファイル

RDB  データベース → テーブル → レコード
mongodb データベース → コレクション → ドキュメント

ドキュメント
http://docs.mongodb.org/manual/

■ 説明リンクなど
mongoコマンドまとめ
MongoDB University
MongoDBでゆるふわDB体験
BSON

■ rails での利用 Mongoid (pronounced mann-goyd)
 参考リンク How to Host Ruby on Rails 4 Apps on OpenShift

# rails new proj01 -O  # -O:active recordをスキップ、 --skip-active-record でも同じ
# rails g mongoid:config

マイグレーション用ファイルは必要ない。modelファイルに直接定義。

問題点
ver4から DateTime fieldsがサポートされなくなった。
mongoid-sadstory で対応?

■ 参考
MongoDB vs MySQL性能比較 (2013/11)

2014年8月21日木曜日

concerns のspec


controller/concerns のspec をどう書くか

ダミークラスを作って利用する
How to Test Controller Concerns in Rails 4

ここも参考に (model について?)
How to Test a Concern in Rails
ちなみにここでは struct を使う例が提案されている。

2014年7月20日日曜日

bash history


export HISTCONTROL=ignoredups
これで重複コマンドは削除されていく。
ubuntuでは設定されてるんだって。

http://takuya-1st.hatenablog.jp/entry/20090828/1251474360

「ゔ」という文字がありました。

知ってました?
mac, iphone だと「vu」で「ゔ」が入力できるんです。。。
windowsだと「ヴ」しか入力できなかった。

unicodeに登録されてる。
「ヴ」
http://ja.wikipedia.org/wiki/%E3%83%B4
「ゔ」 U+3094
「ヴ」 U+30F4

関連
http://www.fileformat.info/info/unicode/char/3094/index.htm
http://ja.wikipedia.org/wiki/Unicode%E6%AD%A3%E8%A6%8F%E5%8C%96
http://www.unicode.org/charts/normalization/


■ pythonで確認
(mac X 10.9.4, python 2.7.5)

#coding:utf-8
vu = "ゔ"
uc= unicode(vu, "utf-8")
print uc, type(uc)

import re
hiragana = "あいうゔえお"
r = re.sub(r"(.*)ゔ(.*)", r"\1ヴ\2", hiragana)
print r

> ゔ <type 'unicode'>
> あいうヴえお

2014年7月12日土曜日

perl モジュール


■ テンプレートエンジン

Xslate
http://xslate.org/

Introduction to Xslate
http://xslate.org/intro.html

Text::Xslate::Manual::Cookbook
http://search.cpan.org/~gfuji/Text-Xslate-3.2.4/lib/Text/Xslate/Manual/Cookbook.pod


■ Web API

Perl - LWP
http://qz.tsugumi.org/Perl_LWP.html

Furl-0.24の翻訳済ドキュメントの一覧です (perldoc.jp)
http://perldoc.jp/docs/modules/Furl-0.24

初めての Furl
http://blog.livedoor.jp/xaicron/archives/51324535.html

PerlモジュールFurlから学ぶ省エネコーディング
http://hirobanex.net/article/2011/06/1308990953

perlでWEB APIを複雑に扱いたい人向けのSpicaというモジュールを書いている話
http://mizuki-r.hatenablog.com/entry/2013/07/29/perl%E3%81%A7WEB_API%E3%82%92%E8%A4%87%E9%9B%91%E3%81%AB%E6%89%B1%E3%81%84%E3%81%9F%E3%81%84%E4%BA%BA%E5%90%91%E3%81%91%E3%81%AESpica%E3%81%A8%E3%81%84%E3%81%86%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC


■ XML

Perl 開発者のための XML: 第 1 回 XML と Perl -- 魔法の組み合わせ
http://www.ibm.com/developerworks/jp/xml/library/x-xmlperl1.html

ミヤビッチの穴
http://hole.sugutsukaeru.jp/archives/8

XML::Simple - シンプルなXMLパーサ / Perlモジュール徹底解説
http://d.hatena.ne.jp/perlcodesample/20100424/1270894115

XML::XPath で XPath に入門してみた
http://d.hatena.ne.jp/kiririmode/20090220/p1


2014年7月10日木曜日

Perlです。。。

タイトルどおり、Perlです。。。。。


■ Perl基礎

Perl講座
http://rfs.jp/sb/perl

Perl基礎文法最速マスター
http://d.hatena.ne.jp/perlcodesample/20091226/1264257759

Perl基礎入門
http://www.kent-web.com/perl/

2時間半で学ぶPerl
http://qntm.org/files/perl/perl_jp.html

Perl Hackers Hub
http://gihyo.jp/dev/serial/01/perl-hackers-hub

大規模Perl初心者研修を支える技術 (DeNA)
http://www.slideshare.net/DaisukeTamada/perl-26371335

■ 参照

Perl/リファレンス
http://ja.wikibooks.org/wiki/Perl/%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9

リファレンス (Perl講座)
http://rfs.jp/sb/perl/02/10.html

■ モダンPerl?

現代的なPerlの記述方法一覧
http://d.hatena.ne.jp/perlcodesample/20091120/1246679588

モダンPerlの世界へようこそ gihyo
http://gihyo.jp/dev/serial/01/modern-perl


■ Mojolicious::Lite

GitHub yuki-kimoto/mojolicious-guides-japanese
https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojolicious::Lite

Mojolicious最速マスター
http://qiita.com/yusukebe/items/65141c9c63a2860af962

第22回 Mojolicious::Lite:本当に簡単なウェブアプリがあればいいときは
http://gihyo.jp/dev/serial/01/modern-perl/0022

Mojoliciousリファレンス
http://d.hatena.ne.jp/perlcodesample/20110402/1305602329


■ テスト
第30回 Test::Class:ユニットテストに使うだけでなく
http://gihyo.jp/dev/serial/01/modern-perl/0030

PerlでTDD(テスト駆動開発)するなら覚えておきたいCPANモジュール群
http://hirobanex.net/article/2012/08/1343880047


2014年7月7日月曜日

railsのルート名に "_index"がつく場合

resource名が単数系の場合に suffix "_index"が引っ付く。
単複同形の名詞も同じ。

# vi config/routes.rb
namespace :admin do
     resources :companies
     resources :series
end

# rake routes
admin_companies GET    /admin/companies(.:format)          admin/companies#index
admin_series_index GET    /admin/series(.:format)             admin/series#index

単複同形は罠だった。
sheepとかも。 遠い昔勉に強した気もする。。。

このルールを変更するには。
config/initializers/inflections.rb

英単語
plural:(形容詞) 複数の、複数形  (反対:singular)
単複同形:the same plural and singular form

2014年7月4日金曜日

ifconfigが.....

全然知らんかった!

何事も無かったかのようにifconfig打ってたよ!

非推奨になったネットワークコマンド養成ギプス
訳:非推奨になったLinuxネットワークコマンドの代替コマンド

まぁ、おっさんなんでifconfigって打っててもいい気もするけど。

2014年6月28日土曜日

複数バージョンのPHPを使うためのアプローチを考えた

mod_php を利用すると複数バージョンのphpを同時に使えない。

現在の状況
1つのシステムに複数のWebサーバーがあり、それぞれ異なるバージョンのapache, phpで運用されている。
(中には、異なるphpを同時に使うために、cgiとして利用している箇所もある。)

で、今考えているのは、
「この環境で開発の仕事をすることになったら、どんな開発環境を用意したらいいか?」
おそらくVirtualBox 上のcentosで作業することになると思うが、複数のvirtulbox環境を用意して、複数の仮想サーバーを起動するような環境は作りたくない。

思いついた方法は以下の3つ。
(1) 複数のapacheを起動させて異なるバージョンのphpを用意する。
(2) fpsを利用してfastcgiモジュールでapacheと連携させる。
(3) lxcで複数のcentosコンテナを用意して本運用を模したwebサーバー(apacheとphpのセット)を用意する。

結論としては、(3)で複数サーバーを用意することにする。
コンテナ型といっても、一応仮想サーバーなので、本番環境に一番近いものが作れそうだから。

(1)は、リソースの無駄使いのような気がするけど、結構、現実的な解決策かも (lxcよりはリーズナブル)
(2)は、かなりいけてる気がする。メモリの使用量にもよるが本番環境の改善策として提案してもいいんじゃないかと思う。

まぁ、開発環境なので、とりあえずlxc を利用してみる。
できたら、本番環境の改善策に反映できればいいかな。

(2)に関しての有用そうなリンクを残しておく。
 Running PHP on Apache httpd
  apache2.4 mod_proxy_fcgi を利用
  apache2.2 mod_fcgid (オフィシャルモジュール)、mod_fastcgi

php-buildで複数バージョンのPHP-FPMを用意する
 nginxでの設定例だが、fpm,phpenvのあたりはそのまま使えそう。

php-fpm.org
  php5.2はパッチが用意されている。(5.1は?)

fpmじゃないけど
Running PHP scripts in uWSGI


2014年6月16日月曜日

Web画面の作成ツール

2,3年前はワイヤーフレームを作るツールとかあったけど、だいぶ進化してる。


Choose a website builder: 13 top tools

Next-Generation Responsive Web Design Tools: Webflow, Edge Reflow, Macaw


こいつは少し違うような感じだけど。。。
google web designer

2014年5月20日火曜日

格安SIM買ったどぉ~~~


DTIのワンコインSIMカード買って、10日ほど経ちました。
思いのほか快適。
快適ってのは正確じゃなくて、
思いのほかストレスなく使えているといった方が正確かも。

DTI Serversman LTE
楽天ブロードバンド LTE

制限時の通信速度
DTIは250kbps、楽天は 300kbps
で、楽天にしようか悩んだけど、楽天は更に、100kbps程度に制限されるようなんだよね。
制限が2段階じゃ、わかりにくい。それに100kbpsはねぇ。。。。。

結局、DTIのSIMで正解だった。なんつっても、500円だし。何かあっても許せる。
あっでも、Google Playのダウンロードだけはとっても遅かった。

あと、気になったコースでは、OCN の500kbps。
OCN モバイル ONE
Xiの速度では利用できないんだけど、7GBまでは500kbpsでその後200kbps。
1800円だったんでやめたけど、かなりひかれた。
OCNの光使っている人は200円引きで、050plus のセットパッケージだと150円引きになるっていうNTT全開の料金体系。
自分が外回りする営業マンだったら、これにしたね。

WiMAX2+ が利用できるauの夏モデルも魅力的だけど、しばらくはワンコインSIMで。


2014年5月12日月曜日

fedora21はまだ?

今更VPSをfedora20に入れ替えたけど、そろそろ(というか既に)fedora21が出るころだなという事に気がついた。
我ながらどうかしてる。。。

それで、初めて知ったんだけど、21のリリース予定は10月になってる。
勝手な想像だけど、Redhat7 のリリースでリソースをそちらに振り分けるとか?

ということで、次のOS入れ替えはfedora21のリリースを待って、12月頃に。
少しのんびりできそうです。

今後、fedoraも大幅な変更が入るようだけど、redhat7 のリリースで一区切りつくということでしょう。
redhatのためのfedoraだしね。
数年後のredhat8 に向けてfedoraも次のステージへ!

Releases/21/Schedule
Fedora 21 On Phoronix

CoreOs, Atomic にあわせて新たにパッケージの仕組みがでてくるのかな。

2014年5月10日土曜日

uwsgi をsystemd で管理


fedora20でuwsgiを動かそうと思ったので。
python3.4

SystemD (uwsgi doc)

uidとgidはnginxを利用。 (rootで起動しないため)

daemonize だとサービスの起動時にこける。
logto に変更したら無事起動した。
(ここら辺はよく理解できていない)

/usr/lib/systemd/system/hoge.service
を変更した後は、systemctl daemon-reload を。


その他の参考ページ
uwsgi service is not starting


fedora20で時間がずれていた件


お名前.comのVPSをfedora20 に変えてみたら時間が9時間ずれていた件。

$ date
2014年  5月 10日 土曜日 17:01:30 JST
と表示される。スマホでは朝の8時。
JST と表示されているので、タイムゾーンは正しいみたい。

$cat /etc/adjtime
0.0 0 0.0
0
UTC

検索すると、UTC ---> LOCAL と変更すればいいみたい。
/etc/adjtime を直接変更していいものか?

直接編集してもいいみたいだけど、
$ timedatectl set-local-rtc true
で、変更された。ただしワーニングあり。

$ timedatectl status
      Local time: 金 2014-05-30 09:53:48 JST
  Universal time: 金 2014-05-30 00:53:48 UTC
        RTC time: 金 2014-05-30 09:53:48
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

$ timedatectl status
      Local time: 金 2014-05-30 09:55:30 JST
  Universal time: 金 2014-05-30 00:55:30 UTC
        RTC time: 金 2014-05-30 09:55:30
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: yes
      DST active: n/a

Warning: The RTC is configured to maintain time in the local timezone. This
         mode is not fully supported and will create various problems with time
         zone changes and daylight saving adjustments. If at all possible use
         RTC in UTC, by calling 'timedatectl set-local-rtc 0'.


$ date
2014年  5月 10日 土曜日 08:23:10 JST
と正しく表示された。

$ cat /etc/adjtime
0.0 0 0.0
0
LOCAL


とりあえず、良しとしよう。。。

2014年5月9日金曜日

fedora20 でiptables

おなまえ.com のVPS にfedora20 のイメージが用意されているので、入れ替えた。

ちゃんとISOイメージって書いてあるんだけど、勝手にKVM用のイメージと勘違いしてた。。。
ブラウザ上の仮想コンソールからインストール作業。
ローカルマシンのインストール作業と同じ。
(反応が遅くて、イライラする)

で、とりあえず、firewalld を調べるのは後回しにして、iptables で。

# systemctl stop firewalld
# systemctl disable firewalld

# yum install iptables-services

# systemctl start iptables
# systemctl enable iptables

Fedora20でDovecotアタック対策
を参考

いつも使いまわしてる、iptablesの設定スクリプトを実行して、
iptables-save でOK。

今思いついたんだけど、
仮想コンソールのインストール作業、CUIインストーラで進めれば良かったのかな?

uwsgiの設定

uwsgiの設定
iniファイル

■ 本番用の設定
$ cat uwsgi.ini
[uwsgi]
master = true
processes = 2
socket =:9901
wsgi-file = wsgi.py
chdir = /hoge/public/www.kobito3.net
logto = /var/log/uwsgi/www.kobito3.net
uid = nginx
gid = nginx
touch-logreopen = /var/run/uwsgi/reopen_log.trigger

systemdを利用して起動するためwsgi-fileの場所指定 (chdir)
uid,gidはnginxに便乗 (uwsgiユーザーを作成すべき)
log lotate後にログファイルを再度開く (touch-logreopen)


■ 開発用の設定
$ cat uwsgi_dev.ini
[uwsgi]
master = true
processes =2
http-socket =:9901
wsgi-file = wsgi.py
python-auto-reload = 1
static-map = /assets=/hoge/public/www.kobito3.net/assets

uwsgi をwebサーバーとして単体で起動。 (http-socket)
css, jsなどもuwsgiで処理。 (static-map)
ファイル変更後は自動で再読み込み (python-auto-reload)

■ todo
よくわからないオプション
harakiri, daemonize, thunder-lock

2014年4月24日木曜日

忘れるコマンドメモ

コマンドメモです。


検索
find ./path/to/file -type f -print | xargs grep 'hoge'

置換
find ./path/to/file -type f | xargs sed -i "s/hoge/hage/g"

特定のポートを使用しているプロセス
lsof -i:80

psコマンドに項目も表示
ps alx | head -1 && ps alx

pxの出力からgrep を除外
ps alx | head -1 && ps alx | grep "[p]ostgres"

2014年4月9日水曜日

Heartbleed Alexa top 10000


問題になってるopensslの件かな?

Heartbleed Alexa top 10000
ここに名を連ねている jpドメイン

nanapi.jp:443 - VULNERABLE
radiko.jp:443 - VULNERABLE
weathernews.jp:443 - VULNERABLE
www.fujitv.co.jp:443 - VULNERABLE

www.honda.co.jp:443 - VULNERABLE
www.nanapi.jp:443 - VULNERABLE
www.nhk.or.jp:443 - VULNERABLE


2014年4月5日土曜日

macのCPU情報

linuxのcpuinfoみたいなのは無いのかな?

ちなみに今使っているのは、1年以上前のmacbook air
2012年発売のモデルを秋葉で購入したやつ。
MacBook Air (WikiPedia)
i5 3317U

CPUはi5-3317U
2コア4スレッド、AVX

$ sysctl -n machdep.cpu.brand_string
>> Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz

$ sysctl hw.ncpu | awk '{print $2}'
>> 4

$ system_profiler SPHardwareDataType
      Model Name: MacBook Air
      Model Identifier: MacBookAir5,1
      Processor Name: Intel Core i5
      Processor Speed: 1.7 GHz
      Number of Processors: 1
      Total Number of Cores: 2
      L2 Cache (per Core): 256 KB
      L3 Cache: 3 MB
      Memory: 4 GB

AVX対応はターミナルからでは調べられないのかな?

macでffmpeg その2 h265エンコード


とりあえず、libx265はリンクできているようなので、エンコードしてみる。
FFmpeg: How to generate a .mp4 with h.265 Codec?
 macはサンプル動画が入っていないようなので、ここから拝借。
サンプルムービーダウンロード (sharp)

ffmpeg -i data/sample2_c.mpg -c:v libx265 -c:a copy output.mp4

以下出力内容。
--------------------------------------------------------------------------------------------------
ffmpeg version 2.2 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr  3 2014 09:39:57 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libx265 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-libvpx --enable-ffplay --enable-libopenjpeg --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5 '
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libavresample   1.  2.  0 /  1.  2.  0
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mpeg, from 'data/sample2_c.mpg':
  Duration: 00:00:24.93, start: 0.400422, bitrate: 1924 kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 720x480 [SAR 8:9 DAR 4:3], max. 3000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 224 kb/s
x265 [info]: using cpu capabilities: MMX2 SSE SSE2Fast SSSE3 SSE4.2 AVX
x265 [info]: Main profile, Level-3 (Main tier)
x265 [info]: WPP streams / pool / frames         : 8 / 4 / 2
x265 [info]: CU size                             : 64
x265 [info]: Max RQT depth inter / intra         : 1 / 1
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 2
x265 [info]: Keyframe min / max / scenecut       : 25 / 250 / 40
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / refs          : 1 / 1 / 3
x265 [info]: Rate Control / AQ-Strength / CUTree : ABR-200 kbps / 1.0 / 1
x265 [info]: tools: rect amp rd=3 lft sao-lcu sign-hide
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf55.33.100
    Stream #0:0: Video: hevc (libx265) ([35][0][0][0] / 0x0023), yuv420p, 720x480 [SAR 8:9 DAR 4:3], q=2-31, 200 kb/s, 30k tbn, 29.97 tbc
    Stream #0:1: Audio: mp2 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 224 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video -> libx265)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  750 fps= 14 q=0.0 Lsize=    1296kB time=00:00:24.95 bitrate= 425.5kbits/s   
video:605kB audio:663kB subtitle:0 data:0 global headers:0kB muxing overhead 2.213881%
x265 [info]: frame I: 8      Avg QP:34.84  kb/s: 3078.88
x265 [info]: frame P: 244    Avg QP:39.05  kb/s: 412.34 
x265 [info]: frame B: 498    Avg QP:43.19  kb/s: 45.55  
x265 [info]: global : 750    Avg QP:41.75  kb/s: 197.24 
x265 [info]: 78 of 244 (31.97%) P frames weighted
--------------------------------------------------------------------------------------------------
一応エンコードはできた。

結構汚いな。。。
しばらくは勉強しながら、エンコードオプション、ビットレートなど調べます。
あと、vp9も既に使えるようです。


2014年4月3日木曜日

homebrewリンク

本家
Homebrew
wiki/FAQ

Formulaの場所
/usr/local/Library/Formula

参考
homebrew の Formula を追加する
ソースの入手と再ビルド & デバッグ ~ Mac OS X Homebrew 編

macでffmpeg (h265エンコード) その1インストール

ほぼ半年ぶりにffmpegを触ってみる。
先日ver2.2がリリースされて、hevcのエンコードに対応したようです。
ということで、久しぶりにコンパイル。
今回はマックで。

すでに、homebrewは2.2に対応済みでした。
brew install ffmpeg
これだけで、ffmpegがコンパイルできてしまった。
(かなりショック。半年前にcentosにインストールしたときは、結構苦労した記憶が。。。)

ただし、もう少しオプションを付けて、コンパイルしてやる必要があります。
brew info ffmpeg
brew options ffmpeg
これで、make時のオプションを確認できます。
(h264オプションはあるが、h265(hevc)の記述がない。。。)

とりあえず、このオプション設定でやり直してみる。
brew install ffmpeg --with-libvpx --with-libvorbis --with-openjpeg --with-ffplay --with-tools

ffmpeg を実行
以下結果の表示
------------------------------------------------------------------------------------------------
ffmpeg version 2.2 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr  3 2014 08:52:57 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-libvpx --enable-ffplay --enable-libopenjpeg --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5 '
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libavresample   1.  2.  0 /  1.  2.  0
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
------------------------------------------------------------------------------------------------

やはり、h265に対応できていない。
 ということで、hevcエンコードを試すには、
・x265 or openhevc の用意(自前でmake?)
・ffmpeg にリンク(configure, makeオプション?)
が必要になる。

brewはmakeオプションは付加できるようだけど、configureオプションは付けられないようなので、以下を直接編集。
/usr/local/Library/Formula/ffmpeg.rb
(brew edit で対応するようだが、今回は勢いにまかせて、よくわからないまま、viで直接編集してしまった。)
264をキーワードに同じ感じで265を追加。(以下3行を適切に!)  option "without-x265", "Disable H.265 encoder"
  depends_on 'x265' => :recommended
  args << "--enable-libx265" if build.with? 'x265'
(h264と同じようにデフォルトでリンクされるようにした)

次にh265エンコーダーの本体を用意。
openhevc か、x265かわからないけど、自前で用意しなきゃと思いながらも、
brew search x265
と打ってみたら、用意されている。早速インストール。
brew install x265
 で、ffmpegを、もう一度インストール。
brew install ffmpeg --with-libvpx --with-libvorbis --with-openjpeg --with-ffplay --with-tools
ffmpegコマンドで確認。
------------------------------------------------------------------------------------------------
ffmpeg version 2.2 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr  3 2014 09:39:57 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libx265 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-libvpx --enable-ffplay --enable-libopenjpeg --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5 '
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libavresample   1.  2.  0 /  1.  2.  0
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Hyper fast Audio and Video encoder ------------------------------------------------------------------------------------------------
一応、libx265がリンクされている。

今日は、ここまで。

念のために。
今回変更したファイル
/usr/local/Library/Formula/ffmpeg.rb
これは、homebrewのファイルで、gitで管理されています。
なので、 /usr/local に移動して、
git add Library/Formula/ffmpeg.rb
git commit -m "h265のオレオレ対応"
としておいてください。
でないと、これ以降の brew update で、commit しろとメッセージが出て、そこで止まってしまうので。





2014年3月27日木曜日

緯度経度から2点間の距離を求める



■ 簡単な近似計算
SQLで2点間の緯度経度から距離を測定する方法

2地点の緯度と経度からおおよその距離を計算する 
(高速な近似計算)

距離が近い順にデータをピックアップするだけなら、これらの近似で十分なので、おすすめ。

keisan
ここでも上の近似計算を使っているので、確認用として使える。

■ ヒュベニの公式
ヒュベニ (Hubeny) の公式
上の近似より高精度

ヒュベニの式を用いた、緯度・経度と距離・方位の相互変換の解説

2つの緯度経度間の直線距離を取得
Javascriptで確認できる。

■ その他
緯度・経度からの距離計算 おしえてgoo
緯度経度から2点間の距離を求める
緯度経度より距離を求める方法・備忘録 | 地球は丸い!

感想を一言。
sin, cosの記憶がだいぶ飛んでてショックです。三角関数か。。。

2014年3月3日月曜日

ファイルダウンロードのアクセス制限


ファイルダウンロードのアクセス制限で使える。

nginx + PHP-FPMで巨大なファイルをダウンロードさせる
によると、
--------------------------------------------------------------
NginxにはX-Accel-Redirectという非公開領域にバイパスを通すような仕組みがあるようです。
PHPで認証かましてからダウンロードさ せるならこの方法がいいみたいですね。
Apacheにも同様のmod_xsendfileといのがあるようです。詳しくはググっておくんなまし。

コメント欄

nginx側に
location ~ /download/(.+) {
internal;
alias /var/www/html/download/$1;
}
とか書いといて
header('Content-Disposition: attachment; filename=ファイル名' );header("X-Accel-Redirect:/download/ファイル名");
ってしてあげるのが楽じゃないですか?
phpはコンテンツ返す必要なくて、nginxが勝手にやってくれます。

--------------------------------------------------------------
とのこと。

お~~~
開発も楽になりそうだし、サーバー負荷も下がりそうだ。

2014年2月20日木曜日

PHPでEメールアドレスのバリデーション


正規表現 PHPのpreg_match色々
ここのコメントより

Eメールアドレスのバリデーション
PHPではfilter_var()関数でメールアドレスのチェックができますので、基本的にこの関数か、この関数をベースにしたライブラリを使うのが良いです。

2014年2月11日火曜日

rails の実行モード


■ コード内でモードを取得
Rails - How do I check developer mode or production mode in code
http://stackoverflow.com/questions/6476832/rails-how-do-i-check-developer-mode-or-production-mode-in-code

Rails.env == "production"
Rails.env == "development"
Rails.env.production?
Rails.env.development?

■ 実行時にオプションで指定する
rake db:migrate RAILS_ENV=test
rails s -e production

2014年1月27日月曜日

mysql5.6のrpmリポジトリ (fedora20)

rpm でfedora20 にmysql をインストール。

Download MySQL Yum Repository
redhat(centos), fedora18, 19, 20 用が用意されている。


rpm -ivh http://dev.mysql.com/get/mysql-community-release-fc20-5.noarch.rpm

yum install mysql-community-server mysql-community-devel mysql-community-client mysql-community-common mysql-community-libs


■ python3用ドライバー
Python 3 の MySQL ドライバ事情
ということなので、
MySQL-for-Python-3 を利用してみる。

pip3 install git+https://github.com/davispuh/MySQL-for-Python-3.git

(warningがいくつも出るね。。。)

python3.4 インストール

python3 の準備。
(fedora20, python3.4)

readline-devel ncurses-devel bzip2-devel openssl-devel zlib-devel xz-devel sqlite-devel
などはyumで入れておく。

scipy を入れる場合は以下も入れておく。
atlas-devel lapack-devel blas-devel

./configure --enable-shared
make
make install

echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig を実行。(上の追加を有効にする)

デフォルトでpipがインストールされるようになったみたい。
/usr/local/bin/pip3


pip3 install lxml         (libxml2-devel libxslt-devel が必要)
pip3 install feedparser
pip3 install django
pip3 install uwsgi
pip3 install git+https://github.com/mitsuhiko/werkzeug.git
(リリース前だがver0.10でpython3に対応)
ipython, numpy, scipy, pandas, sklearn も

■ uwsgi の確認
--------------------------------------------------
#coding: utf-8

def application(env, response):
    response('200 OK', [('Content-Type', 'text/html')])
    html = '''<!DOCTYPE html><html>
    <head><meta charset="utf-8"></head>
    <body>こんにちは!uWsgi</body></html>'''
    return [html.encode('utf-8')]
--------------------------------------------------
uwsgi --http-socket :8000 --wsgi-file wsgi.py


■ 残り作業
(1) MySQL-Python
  MySQLからmariadb に変わってしまった。。。

(2) zenhan
 今まで使ってたけど、python3には未対応?
pip3 install zenhan
---------------------------------------------------------
Downloading/unpacking zenhan
  Could not find any downloads that satisfy the requirement zenhan
  Some externally hosted files were ignored (use --allow-external zenhan to allow).
---------------------------------------------------------
これも確認が必要。

2014年1月24日金曜日

static website を調べてみたけれど

時代は、動的ページをキャッシュする方向へ向かっているけど、movabletypeのように、スタティックも現役ですよ、きっとね。

static fileを出力してくれるCMS(と呼んでいい?) を探してみた。
終わってる感じのプロジェクトも進行形のものもたくさん出てくる。
けれど、テキストエディタとかでmarkdownで記述するのがほとんど。
(たぶんね)
一般の人に使ってもらうにはかなり高いハードルです。
他人のパソコンに環境を用意して、説明するのも大変そう。
(絶対やりたくない)

Nesta CMS

これだと、Webの管理画面があるみたいなんだけど、どうでしょう?

sinatraで作られているようなので、更にOKです。

rails マイグレーションのやり直し



1つだけ
rake db:migrate:down VERSION=xxxxxxx
rake db:migrate:up VERSION=xxxxxxx
rake db:migrate:redo VERSION=xxxxxxx

全て
rake db:migrate:reset

 rubyで実行
http://stackoverflow.com/a/1417212

2014年1月14日火曜日

phpのdatetimeクラス

DateTime クラス

■ 現在時刻
new DateTime('NOW');


差分 (add, sub)
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";

■ 文字列との変換
string -> datetime
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');

datetime -> string
echo $date->format('Y-m-d') . "\n";


時間処理に関しては、ver5.2から作り直して、このdatetimeクラスに集約しているのかな?
(これらを全て使うには5.3以降)


■ フォーマットの書式
dateのパラメーターを参照



2014年1月6日月曜日

wgetでサイトのバックアップ

諸事情で、サーバーにログインできないけれど、データのバックアップが必要な場合。
(たとえば www.hogehoge.net 全体が対象)

wget http://www.hogehoge.net/ -r -x -k

-r :再帰(下の階層を対象)
-x :ディレクトリ作成
-k :相対リンクに変換

robots.txt を無視する必要があれば
-e robots=off

諸事情で、エージェントを偽装する場合
-U "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"


■ 参考
Wget, HTTPS & ignoring robots.txt
Web サイトを再帰的に取得してみた
wgetでwebサイトを丸ごとダウンロードする場合は・・
wgetでの一括ダウンロードが便利な件
(対象拡張子の指定、画像サーバーの指定)

manを覗くと、膨大なドキュメトが。。。。。

firefoxのアドオン
ScrapBook
(未確認)

2014年1月5日日曜日

スマホを考慮した動画リンク

モバイルファーストってことで。

とりあえず、これでpcもスマホもOKか?
スマートフォンサイトで動画を再生させる

HTML5のvideoタグ
スマートフォン サイトによく見られるミス

なんとなくできそうというレベルでは、デフォルトのプレーヤーをインテント起動させるような仕組み(タグ?)を埋め込んでおく。 (iOS,androidともに未確認)


今度、時間を作って検証です。。。