アクセスがないのでSEOした
アクセスが増えないどころか無いので、SEOした。果たしてSEOしたという言い回しで正しいかは分からないけど、とにかくした。 nginxでphpをfpmで動かしているのだが、permalinkの設定が1日寝かさないと分からなかった。他の人はこんな感じでできたと言ってるんですけど、アクセスすると404 not foundとかno input ほげほげってなる。 nginxのerror.logを見てたら想定のuriがindex.phpに渡っていなさそうで、こんな感じに修正したらちゃんとpermalinkできるようになった。
pythonその10 scrapyのインストール
失敗した。’_bz2’がないらしい。libbz2-devはインストールしたのだけれど。 どうもpython 3.4.3をpyenvで準備した時の問題のように思える。bzip2がどうとかwarningめいたものが出てるし。気にするべきだったようだ… pyenvのwikiをみて何個かdevパッケージを追加 libreadline-dev, llvm, libncurses5-dev pyenvでインストールやり直し。 これに加えて、自分の環境ではlibxslt-devがscrapyのインストールが必要だったのでapt-get installした。 いやー侮れないですね、warning。
pythonその9 データ型
リフレクションはうまくできなかったので、先にデータ型について学習。公式見るのがしんどくなったので、他の人を参考にさせてもらいました。 Pythonらしいコードの書き方 – Kesin’s diary それで、出来上がったのがコレ。エラー時の挙動とか書かないとサンプルにもなんないなぁ。
pythonその8 リフレクション
リフレクションに挑戦。 javaならnewinstance()するのだけど、pythonはイマイチよく分からない。 type()使うんかなー思ってやってみたけど、違うくさい。 2015/8/28追記 でけた。 from X import Y をハードコーディングしているバージョンはこちらで、そこも__import__で動的に読み込めるようにしたのがこれ。 よくわからなかったのは、関数名と機能が結びつかない点。getattrとかglobalsとか言われてもピンとこなかった。
pythonその7 正規表現
正規表現してみた。マッチオブジェクトを作成してmatch()するあたりが、rubyやperlと違ってjavaっぽい。しょうもないサンプルだけど、リンクしておく。 github それとは別に驚きの事実が。 Python 3 から、print は 命令文 ではなく、print( ) 関数に変わっているので注意 だそうです。SyntaxError: Missing parentheses in call to ‘print’ってでるけど、何のこっちゃ分からなくて困った。
ブログに共有ボタンをつけてみた
wordpressの設定をいじってたら共有ボタン的なものがあったので、付けてみた。誰もシェアしてないけど、いろどりがあってよござんす。ついでに、はてブのボタンも追加してみた。 Jetpack の共有ボタンにはてなブックマークと Evernote を追加 – Simple Living みなさんよくご存知ですよねー。書いてある通りにやったらできちゃいました。ありがとうございます。
pythonその6 django入門
ルーティングがうまく行かないなーと思って、和訳を眺めてたら衝撃の事実が… 自分の間違い:mysite/polls/urls.py を新規作成 正しくは:mysite/mysite/urls.py 既存ファイルにルール追加。 と思いきや1.4と1.8だとurls.pyの置き場が違うみたい。重要そうなファイルなので、公式ドキュメントの間違いなんじゃないか?と思い試行錯誤した結果、ようやくでけた。polls/urls.pyは新規作成で、mysite/urls.pyは修正。両方必要みたい。公式もよーく読むとそう書いてあった。ルーティング定義をしてるのに404 not foundで、定義したルールとエラーしたルールが違う時点で気づける人は気づけるんだろう。 railsと比較すると自分で書いてる分、コントロールできている気がすると思うし、どうせできてるといってもscaffoldだと実際には使えないしなーと思う反面、いちいち書くの面倒くさいなーとも思ったり。また、がちゃがちゃやってる間にいろんなエラーに出会った。 ImportError : from x import yの誤り SyntaxError : 括弧の数が合わない IndentationError : インデントが合わない NoReverseMatch : “XXXX is not a registered namespace”と詳細で出てる。どうもチュートリアルにあるnamespaceの指定が余計っぽい。 AttributeError : module’ object has no attribute ‘XXXX’ タイプミスを指摘された。 この辺のデバッグは慣れが必要だな… チュートリアルの4ではそれまでとガラっとviewの書き方が変わる。今回はローカルのgitにこまめにコミットしながらやってたので、ビクビクせずに学習できたが、classベースのviewに変えたら、最新5件をとってきてindexに表示するところが動かなくなったので、後で調べる。たぶん。 2015/08/29追記 classベースのviewでindex表示ができない原因はtypoだった。contextと書くはずが、conextになっていた。
pythonその5 django
公式のチュートリアルに沿って学習中。runnserverのパラメタ指定とかufwに穴開けたりとかいろいろあったけど、書いてたのが消えたので、途中から。 returnの後にコード書いてる以下はなんなんだ? メソッドのdefの外だし、いつ実行されるんだろう? 検索するフィールドや過去何日間の記事に絞るとか、そういった機能は追加するのが直感的に分かって、やってて面白かったけど、データのリレーションの定義はrailsの方が優しいような気がした。チュートリアル2の最後はインストールしたファイルをいじるようなことを書いててやめた。日本語ドキュメントを読めば分かるかもしれないけど、負けたような気がするのでやめておく。 チュートリアル3のviewを追加したけど期待通りに動作しないところで、一旦ギブアップ。
pythonその4 環境周りとdjangoインストール
ファイルの先頭行に何を書くのか? 直接実行したい時は以下を書くと良い。 具体的には直接実行しないクラスを書いたファイルには不要。 デフォルトエンコーディングは書いておいた方が良さそう。 rubyでのrbenvみたいなのは? わたしゃさくらのvpsにubuntu 14.04.02 LTSを入れて学習中。 なのですが、既に以下の状態。ここから実行環境の切り替えとかできるんだろうか… rubyのrbenvみたいなのは、direnvかpyenvらしい。virtualenvはその前みたい。誰かその辺の歴史みたいなのとかまとめてくれんかな。direnvはpythonもrubyもまとめて面倒みまっせ的なものみたいだけど、既にrbenvは導入済だし、今回はpyenvでやってみることにする。他の人のやり方を見つつ、以前にrbenv入れたのをhistoryで推測しながら以下を実行した。 なお、参考にさせていただいたのは以下でございます m(. .)m Ubuntu 12.04でpyenvを利用して速攻でPython3.4 + Nginx + uWSGI + FlaskなWebアプリケーション実行環境を作る (Qiita) Ubuntuにpyenvを用いてpythn環境を構築しました。(たくのこWeb) /usr/binにインストールされているpythonは置いといて、version 3.4.3をインストール。インストール前にdjangoとversionの整合性は確認した。インストールにはそこそこ時間かかる。何やらWARNINGが出てるが、気にしないったら気にしない。 rubyでいうところのgem(パッケージ管理)はpipだそうだ。pipは実行環境を先ほどインストールした3.4.3に切り替えたら入ってた。なのでdjangoをインストール。公式にある通りコマンド打ってみる。
pythonその3 ユニットテスト
pythonでユニットテスト。unittestという機能が標準で入ってるらしい。しかし、importとfrom x import yはどういう順序で書くのだろう?とりあえずcのincludeと同じと考えて、以下で書いてみる。 ユニットテストをこさえた時点でこんな感じになった。 calc_test.py 自作のCalcクラスのadd()は、引数としてxとyを取る。xとyは整数型を期待してるんだけど、検証は全くやってないんで、引数を検証する処理を追加して、テストケースを追加で書いたのが以下。 引数チェック追加 データ型の変換については 細かすぎて伝わりにくい、Pythonの本当の落とし穴10選(私の小岩ホッチキス)、例外のテストのやり方はPython – unittestのassertRaisesの使い方(ぼっち勉強会)を参考にさせていただきました。 さらに追加テスト。個々の値の検証はできたとして、最大値+1したらどうなるか、int型として超えちゃうから実行時例外が発生するかなと思ったけど、できちゃった…返り値のデータ型がintじゃなくてlongで帰ったんだろうか? 実行結果。