AngularJSの本を買いました

Filed in JavaScript Leave a comment

JS界隈はごちゃごちゃしていて、けっきょくあいつらなんなの感がすごいんです。
Node.jsからこっち、どうもサーバでも動かせる云々のあのへんは、ちゃんと勉強しとかないと詰みますねというのがやっと理解できてきました。
どうもこう、サーバでJSが動くという感覚がよくわからない。ピンときてない。
さしあたり概念すっ飛ばしてステキな理解をする方法はないものかと案じておりましたら、心に響くフレームワークがあったと。
AngularJS。
HTMLテンプレートへの操作の仕方が、たいへんにGENSHIっぽい。正確には違うけど、かなりテンプレートを自然とした状態に保てそうだなーという感触を得ました。
で、本買ってきた。

AngularJSアプリケーション開発ガイド

これこれ。ハンドブック的な薄さで、電車の中で読むにも筋トレ感覚にはなりにくい。
がっつり触るのはこれからながら、かなり期待しています。
GenshiやjQueryをみたときのトキメキみたいなのがございました。

ちなみに本の表紙の魚はハコフグであるとのこと。なんでアンコウじゃないんだよ……。

ランレベルを理解した

Filed in Linux | サーバ構築 Leave a comment

ぴこぴこプログラムを打つまではなんとかなるけど、箱だの線だのは全く理解ができない、自分の分野にだけロックインしてるダメグラマーをやっております。
なので基礎的なことも知らないまま生きてるわけです。
ランレベルとは結局なんなのか。
某日、チャットルームの会話を抜粋。登場人物は、HP-UXが得意なサーバやさん、Oracleが主戦場のDBやさん、そしてあたし。

DB屋: 自動起動の為に# chkconfig –level 35 portmap on
を打てば良いっぽいんだが、35の意味を調べないとなのだ
鯖屋: ランレベルのことだな。ランレベル3と5で起動してねってことさ
DB屋: ランレベルなのか。しかし35の間にスペースはいらんの?
鯖屋: いらん。ランレベル35ってないからね。6でおわり
DB屋: あれか。0:off 1:off とかズラズラ出て来るところの3と5をonにしろってやつか!
鯖屋: んだ。いまの状態をみたいなら、
chkconfig –list | grep portmap
とかやればでてくる
DB屋: 見てみる。0~6まで全部OFFだったわ。
鯖屋: んじゃぁ、3と5をonかな
鯖屋: 2で上げてもいいけど、意味ないな。
鯖屋:

0がしゃっとだうん
1がしんぐる
2がネットワークなしのマルチ
3がマルチ
4が未使用。HP-UXは使うけどな。
5がGUI
6がリブート

DB屋: これコピーするw
鯖屋: http://www.atmarkit.co.jp/flinux/rensai/linuxtips/156whatrunlv.html
鯖屋: 綺麗に書かれてまっせ・・・
あたし: それ見ていつも不思議に思うわ うっかり6とか指定すると、永久に再起動し続けるゴミができるんだろ?
鯖屋: うん
あたし: 何に使うんだ。。。
鯖屋: システム起動したとたんに init 0で停止とかな。
あたし: あ、とちゅうで止める方法あるにはあるのか
鯖屋: 止められないなw
鯖屋: ソフトウェアが使うんだよ。 不正な状態で固まりかけたら、最後の断末魔で6発動www おまえら死ねやあああああwwww みたいな
あたし: もしかしてなにかね、たとえば
あたし: shutodown -h なうwww とかやってる中身は
あたし: ランレベルを変更している、みたいな話なの
鯖屋: そうですな。
あたし: ははー ラップされてたのかあれは
鯖屋: うらでは、init ってコマンドが動いてる。
あたし: すごく納得した。。。
鯖屋: init ランレベル番号指定で、ランレベル変わるのだ。
あたし: さっそくやってみる
あたし: wwwwwwwwwwwwwwwwww
あたし: なにもおきねえじゃんwww
あたし: とおもたら
あたし: 確かに再起動したwwwwwwwwww
鯖屋: 現在のランレベルみたいなら who -rかな
あたし: いままでshutdown -h なうwとかやってたのアホじゃんか
あたし: init 0でサーバ落とせたんだな
鯖屋: まぁ^^;
あたし: でもそうしないってことは行儀悪いんだな
鯖屋: メッセでないんだよねー なうw のほうがいいよ。
あたし: えーと、とあるサーバに二人(AさんBさん)つないでます
あたし: Aさんがinit0やっておとしたら、Bさんからは急に死んだように見えるが、
あたし: なうwってやると、おとすよーしぬよーってメッセージが両者に届くという話?

# shutdown -h now
Broadcast message from root@localhost
        (/dev/pts/0) at 11:37 ...
The system is going down for halt NOW!

鯖屋: まぁw そういう感じw なうwは、waitつけられるのだ
鯖屋: 60secでしんじゃいますーとか
あたし: おおーなるほど、あれ全員に届いてるメッセージなんだ
鯖屋: システムおちますよは、全員に届くけど死ぬ寸前の断末魔なのだ。
鯖屋: なので、init系だといきなり死ぬ寸前にメッセでておいおいってなる
鯖屋: なうw だと、あとxx秒でおちるよー とかメッセおくれるのね。ログインユーザ全員に。 そういった意味では親切コマンドではある

ストンとハラに落ちた。

昔言われたこと

Filed in 未分類 Leave a comment

当時からあたしはphpを書く人であったので、彼に、自分がphpで仕事してます的なことを言ったんだと思う。自己紹介的な文脈で。
プログラマとしては駆け出しもいいところだった過日、他言語で飯を食っている人に喧嘩腰というか挑発的というか、言われたことをたまに思い出す。

「phpなんて劣った言語だし、phpはphp自身を拡張するのにCで書かなきゃいけない。そんな言語を覚えないで○○を覚える方がいい」

○○の中身はどうでもいい。
当時のあたしは正真正銘のピヨピヨだったこともあり、反論するポイントもわからなかったし、phpの拡張なんて考えたこともなかった。Cなど書いたことも書こうと思ったこともなかった。劣ってるかどうかなんて更に知るわけがなかった。
正直なところ、なんで急にそんなことを言われるのかも理解できなかったので、ただびっくりしていたように思う。
そうなんですか、くらいの薄い反応しか返せなかった。たぶん彼は議論か何かをしたかったんだろうな。

幾星霜。
彼は果たして、主張の通り、自分の愛する言語で自分の愛する言語を拡張するコードを書き、コミットしたんだろうか。
なんの根拠もないけれど、きっとそんなことはしてないだろうし、この先もしないだろう。
その言語が何なのかはどうでもいい話で、php云々もどうでもいい話で、つまり、今日おねーさんが言いたいことというのは、自分が作った道具や世界でもないのに、ソレに所属してるからってだけのしょっぱい理由で気分を高揚させちゃうというのは、わりとカッコ悪いって話なんですよ。
顔も名前も思い出せないんですけれど、あんたカッコ悪かったよ。
帰属意識は上手に扱うのが難しい割に、手に入れやすい。劇薬だよね。

sqlalchemy.exc.NoForeignKeysError: Can’t find any foreign key relationships

Filed in MySQL | Pyramid Leave a comment

Pyramidのわだい。
SQLAlchemyがいじわるな子になっている件。
掲題のエラーが出るんですよ。

全体感としては、
models.mymodel.pyの中で

Base = declarative_base()
MyModel(Base)

こう。MyModelクラスを切っておき、他のファイルの各モデルクラスがMyModelを継承するというかんじ。
models.employee.pyには

class Employee(MyModel):

こういうのがいますという形。
なんてことないというか、以前これで普通に使えていたはずなんだけどナーというところですが
sqlalchemy.exc.NoForeignKeysError: Can’t find any foreign key relationships between ‘models’ and ‘employee’.

むむむ。なんだよ。リレーションなんて張らないよ。継承元でしかないんだけどどういうことなの。

手当たり次第にぐぐります。

そして発見

if you want your NewBase to be a descendant of Base, then you’d need to put __abstract__=True on it. But if these cols are global to everyone you could make it the superclass of your declarative Base also by passing it as “class_” to declarative_base().
the naming conventions recipe is another way to go too.

新しいBase(たぶんdeclarative_baseのことなんだろう)を使うときは、__abstract__を使ってみてとある。
なんすかそれは。
入れてみますと、これが当たりでした。

こうするとよいということですね。

class MyModel(Base):
    __tablename__ = 'models'
    __abstract__=True
    id       = Column(Integer, primary_key=True)
    status   = Column(Integer, default=1)
    created  = Column(DateTime, default=datetime.datetime.now)
    updated  = Column(DateTime, default=datetime.datetime.now)

    def __init__(self, name, value):
        self.name = name

あ、えーとPEP8違反(=の両脇にスペースたくさん入れるのNG)の記述になってます。すいません。
PyCharmもあまりにこれガミガミ言うんで警告出さないようにしちゃった。すいません。
=の位置が揃ってないと気持ち悪いんだよ。

pip install umysqldbからのerror: command ‘gcc’ failed with exit status 1

Filed in MySQL | Pyramid | Python Leave a comment

あとで自分が検索できるようにと、エラーメッセージそのものをタイトルにしちゃっています。
重宝します。

経緯はともかく解決方法

aptitude install python-dev

うわあ。
身も蓋もなかったなあ。
gccがどうだのって言われて怯んでたんですけどね。

んで

pip install MySQL-Python

おわり。

よくは知りませんが、PythonのモジュールMySQLdbとかいうのはは死に体なのか、uMySQLdbってモジュールがPyPiでは人気あるようです。スコアが高いのね。
あたしは呼べればなんでもいいですが、カッコつけてコンパイルとかしといて、結局aptさんに入れてもらって解決とか意味がわからない。
あー
コンパイルオプションなんか忘れたのかもしれないなあ。

そしてfuelphpやるかとおもいきやpyramidでセットアップ

Filed in Jinja | Nginx | Pyramid | Python | SQLAlchemy Leave a comment

phpめんどくさいよ。仕事で使って、なんで要件好きに決められる自分のプロジェクトでも自らphp選択するんだよ。いみがわからない。
ということで、前の記事でphpをアレしてたのは一旦放っておき、愛するPyramidの環境をつくろうと思う。
Nginx+Python+Mysql、Pyramid+Jinja2。個人的にはmaaDBはなんでもいいですけどこの構成が好きです。
まともにアプリ書き終えるとこまで行ったことないですけどね。

pcreateでざざっと作ったあとで思い出す。
昔の記事で、このへんの構成を好みで動かしたやつがあった気がする。プロジェクトテンプレートを作っておけばよかった。手作業はまたディレクトリ指定間違えたりする凡ミスの温床なのよ。

(解決済)やりたいことを整理しよう(VMとNginxとサブドメイン編)

Filed in Nginx Leave a comment

ローカルPCにVirtualBox立てて、そこにDebian+Nginx+php|Pytonが入ってます。
DBは別のVirtualBoxでまた立ててます。一緒にしないのは雰囲気の問題です。
Debianなのはロゴの趣味です。

ローカル

hostsに

192.168.56.110	hoge.wev_dev

Nginx

で、Nginxには

    server {
        listen       80;
        server_name  hoge.wev_dev;
        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass  http://localhost:9000;
            root   /home/nginx/hoge/public;
            index  index.php index.html;
        }
        location ~ \.php$ {
            root           /home/nginx/hoge/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/nginx/hoge/public$fastcgi_script_name;
            include        fastcgi_params;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ /\.ht {
            deny  all;
        }
    }

だいたいこんな感じ。ほんとはhoge.wev_devみたいな感じで見に行きたいんだけどうまくいかない。

いじってるうちに足元見失いがちなので作業ログとして書いとく。
みなさんこの通りに書いたって何にも動きませんよ。解決したら解決編は書く。

解決編

いったん記事公開したあとで引っ込めるのはアレなので恥の上塗りだが追記。つらい。
ドキュメントルートのディレクトリ間違ってただけだった何年webやってんすか。
いろいろ調整したあと、だいたいこんなかんじ。

    server {
        listen       8301;
        server_name  localhost;
        #access_log  logs/host.access.log  main;
        location / {
            #proxy_pass  http://localhost:9000;
            root   /home/nginx/www/hoge/public;
            index  index.php index.html;
            if (-f $request_filename) {
                break;
            }
            if (!-e $request_filename) {
                rewrite ^(.+)$ /index.php?q=$1 last;
            }
        }
        location ~ \.php$ {
            root           /home/nginx/www/hoge/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/nginx/www/hoge/public$fastcgi_script_name;
            include        fastcgi_params;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ /\.ht {
            deny  all;
        }
    }

じぶんでディレクトリ掘って置きながらそれを忘れ、出ないでないと騒ぐのはもうすでに病気かなんかじゃないのか。凹むわ。
ディレクトリには気をつけよう!ね!

channel 2: open failed: connect failed: Connection refused

Filed in Linux | Nginx Leave a comment

ポートフォワードというのがたまに便利なので、自宅でもいろいろ試し中

ローカルのPCから、VirtualBox上にアレしたDebianにアレして、
ssh -C -L 10201:localhost:8080 hogeuser@192.168.56.110

こんな塩梅に叩いて、ブラウザから
http://localhost:8080/

と叩くとVM上のNginxさんとこに見に行ってページが表示される・・・!つもりだったんだけど、
channel 2: open failed: connect failed: Connection refused

と言われてソレっきり。うまくいかない。

あららーまたなんかいろいろアレですよー
とっちらかった頭のままいろいろにとりかかっちゃって、状況を整頓できてない感もある。
いちおう困った状況にはなったので、行動ログとして置いとく。そのうち解決方法も見つかるだろ。

phpのmakeでコケる

Filed in php Leave a comment

ローカルにVirtualBoxアレして、サーバ作ってんの。
php5.5.8を入れたろうと思ってあれこれ中
ざくっとmake test

ext/standard/basic_functions.o: In function `zm_startup_basic’:
/tmp/php-5.5.8/ext/standard/basic_functions.c:3648: undefined reference to `zm_startup_password’
ext/standard/basic_functions.o:(.rodata+0xae0): undefined reference to `zif_password_hash’
ext/standard/basic_functions.o:(.rodata+0xaf4): undefined reference to `zif_password_get_info’
ext/standard/basic_functions.o:(.rodata+0xb08): undefined reference to `zif_password_needs_rehash’
ext/standard/basic_functions.o:(.rodata+0xb1c): undefined reference to `zif_password_verify’
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_CTX_use_certificate_chain_file@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_CTX_set_verify@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `ASN1_STRING_type@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `CRYPTO_free@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_get_shutdown@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `SSL_get_verify_result@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `d2i_PKCS12_fp@OPENSSL_1.0.0′
/usr/lib/i386-linux-gnu/libcurl.so: undefined reference to `EVP_cleanup@OPENSSL_1.0.0′

もういやじゃー
なんなのじゃー

メモ:いまのとこのconfigure
./configure –with-mysql –enable-cgi –with-openssl –with-zlib –with-curl –with-config-file-path=/etc –enable-opcache=no

短い。
なーんかcurlとopensshで転ぶんだよなー。めんどくさい。

(解決済)fuelphpセットアップ時に怒られる(Error – date_default_timezone_get(): It is not safe to rely on the system’s timezone settings.以下略)

Filed in fuelphp | php 2 Comments

タイトル長すぎか。まあいいか。
VPSに適当にphp5.5.8(mysql,openssl,enable-cgiが有効)を放り込み、fuelphpをセットアップしております。

oilでアプリケーションを生成するあたりで、最後に
php composer.phar update
こんなのやりますな。すると
Writing lock file
Generating autoload files
Error – date_default_timezone_get(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in COREPATH/classes/fuel.php on line 161

はあ。
最初はたんにphp.iniがないんで怒られてたんですが、php.iniを設置し、date.timezoneの値をセットしてあげてもこの症状が変わらない。
どうもあちこち見た感じ、php.iniに書いても空で初期化されてphpが開始してしまっているみたいな感触。
ちなみに近くにある設定箇所の
;date.default_latitude = 31.7667
;date.default_longitude = 35.2333
;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333

このへんは、コメントアウトされているにもかかわらずなんか値を保持している状態。
気持ち悪くてかなわない。

いささか消極的な解決法

なんだかfuel.phpで死んでるようなので、
fuel/core/classes/fuel.php
の先頭あたりに以下を記述。
date_default_timezone_set(“Asia/Tokyo”);

やだなあこういうの……。
嫌なのはまああれですが、怒られなくなったのでいったんこれで進めることに。
試し書きでphpinfoとか書いて上げるようなノリの一枚物でも、こういう処置を講じてあげないとだめなのかいな。めんどくさい。

根本的に解決しました

コメント欄参照というと簡単すぎですが、コンパイル時に指定されているphp.iniの位置に、ただしくphp.iniが置かれていないことが原因でした。
あたし/etc/php.iniにおいてたんだけど、phpinfo確認したら

Configuration File (php.ini) Path /usr/local/lib

とあるわけよ。
やんなっちゃうよね。
/usr/local/lib/php.ini
に設置しなおし、php-cgiの再起動(nginxから使うので)して解決。
お騒がせしました。

,

TOP