TRIVIAL TECHNOLOGIES @ats のイクメン日記

新車を買って,以前作ったアップルファンのためのマタニティマークは旧車とともにおさらば。新しい車にも,なにかステッカーが欲しいな〜,と思ってしばらく一人ブレインストーミングしてた。

「ワンコ乗ってますステッカー」も欲しくて,最初は,Dog Cowと,Happy MacをアレンジしたBaby Macをデータとして起こして自作ステッカーを作ろうと思っていた。Happy Macはいいけど,Dog Cowはアップルファンの中でも古株しか知らないだろうし,ニッチ過ぎるのが気になっていた。

そうこうしているうちに,ドライブ中,シンプルなラインだけで構成されてた,行ってみれば「ミニマルデザインなワンコ乗ってますステッカー」を貼っている車を見かけて,嫁さんと一緒に「あれいいね」と意見が一致。方向性が固まったので,時間を見つけてステッカーを自作することに。

デザインについては素人なので,どうすればいいのか方向性すら定まらない。なので,ネットから既存の素材を探して参考にしたり,デザインの作成も素人的な間違いをしないよう,できるだけロジカルなプロセスを踏むよう工夫して作ってみた。

まずは「子供乗ってますステッカー」を表現するにはどうするかを考える。Google画像検索で,「baby simple」などの検索語を与えつつ,線画を検索してみる。いろいろ見ているうちに,「子供を表現するゲシュタルト的記号」とはどうやら,

  • 髪の毛少ない
  • 顔丸い
  • 耳の位置が中心より下

というようなことらしいと分かった。

次にワンコ。同様にGoogle画像検索で,ウチで飼ってるコーギー(ウェルシュ・コーギー・ヘンブローグ)の線画を探す。「ワンコ,あるいはコーギーを表現するゲシュタルト的記号」とはすなわち,

  • 鼻長い
  • 耳でかい
  • 胸の毛がもふってる

というようなことだと判明。「足短い」というのがコーギー的に最強の記号なのは分かってるんだけど,子供の線画が顔だけなので,ワンコも顔だけ,という縛りがあったのでこれは使えない。

指針が決まったので,Inkscapeを立ち上げて線画を作る。ベジェ曲線やフリーハンドで綺麗な曲線を引けるほどスキルがないので,楕円と長方形のIntersectionを切り出したりした線と直線を組み合わせたりして,できるだけクリアでぶれのない,シンプルな線画を作ってみた。

あとは線を太くして,アウトラインに変換すればできあがり。

デザインというより,ロジカルな手法を組み合わせて作ったステッカーだけど,こういう方法なら,デザインの経験とかスキルはほとんど必要なく,ステッカーの元絵を自作できる(時間はかかるけど)。東南アジアあたりの安いデザイナーさんに数千円でアウトソースすることも考えたけど,かわいい子供とわんこのため(?)なので,自作をしてみました。自分で作った方が愛着が湧くしね。

ステッカーへの印刷はDIGITAという業者さんにお願いした。自分のと嫁の車分,2つを印刷して約2,700円でした。自分の車に貼ってみたけど,なかなかいい感じです:-)。

毎朝お尻画像をアップする以外はほとんど塩漬けになってたGoogle+を何とかしようと思いました。

とはいえ時間を取られるのはイヤ。自動的になんとかできるといいなと思い,PythonからGoogle+に投稿できるっぽいスクリプトないのかな〜と思ってアツく検索してみました。ていうかそもそもGoogle+のAPIって未だに投稿に対応してないのか?

さて,いくつか発見した中でもこれがよさげだったのですが,試してみたら動かず。5分くらい,心の目でソースを眺めていると,問題の箇所が判明。JSONの形式がかわっちゃって認証用のデータとれなくなってたみたい。ふんふん〜,と鼻歌を歌いながら修正して,動くようになりました(パチパチパチ)。

これをgplus.pyというファイル名で保存して,下のスクリプトを動かすと,最新のツイートをGoogle+にも投稿できるよ。これで君のGoogle+にも花が咲くよ!

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
from urllib import urlopen
import gplus

if __name__ == '__main__':
    tw_screenname = 'TwitterのID'

    twsatusurl = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=%s&count=1"

    # Twitterから最新のステータスを取得
    status = json.loads(urlopen(twsatusurl % tw_screenname).read())
    # ログイン
    g = gplus.Login('XXXX', 'XXXXXXXXXXX')

    # 投稿できるようにする
    plus = g.plus('')
    # 投稿オブジェクトを取得
    post = plus.post()
    # Twitterの最新ツイートをGoogle+に投稿
    post._post(message=status[0]['text'])

 

重複判定とか定時処理化して定期的にポストしたりとかは自分でがんばってね。もとのソースにたった二文字足しただけでブログのネタにしちゃって,作者さんゴメンね! あと,今回は馴れ馴れしい文体でゴメンね! じゃあね!!

Comments

どうもありがとうございました。

こんにちは、vi cam tay これは非常に興味深い記事であり、私はウェブサイトに記載されている記事や記事の多くを読んで楽しかった、良い仕事を続けると、将来的にも、kinh can もっと面白いコンテンツを読みたいと思っています。私は、有用かつ重要な多くの情報を得ました。どうもありがとうございました。kinh mat

good !

  • Posted by : huynhhai99 at : 2013/01/24 (Thu) 07:50

あなたのウェブサイト、とっても気に入りました。良い色とテーマですね。ご自分でこのサイトを作られたのですか?私も自分のブログを作ろうとしているところなので、どうやって作られたのかや、何という名前のテーマを使われているのか、ご参考までにお返事いただけたらとても嬉しいです。どうもありがとうございます。 gio xach vi cam tay bop nu

子育てエンジニア Advent Calendar 2012用のエントリです。前回のchoplinさんから続いて二日目です。夜中の授乳に付き合ってたら遅くなってしまった。



4月に第一子(以下,息子ちゃん)が生まれて,生活がすっかり変わりました。プライベートな時間はほとんどなくなり,仕事以外の余った時間をほぼ全て家族(嫁さん,わんこ含む)のために費やすようになりました。Webで検索することと言えば赤ちゃんのことばかりになりました。あるとき,楽天で搾乳機の値段を調べていたら,Webサイトに貼られている楽天の広告に搾乳機ばかり出るようになったりしました。もう買っちゃったのに(w。

今は生活の全てが子供を中心に回っており,家庭の環境がすっかり変わってしまったのですが,一番変わったのは仕事のスタイルかもしれません。もともと,子供が生まれたらできるだけ時間を作って家族のために使いたいと思っていて,今年の初めくらいからそのための方法を模索していました。そんなとき,アクセス解析を見ると,去年の12月に作ったサイトが思いのほかアクセスを集めていたことを発見しました。開発の仕事の合間を縫ってアクセス向上の施策を試みたところ,かなり効果が上がってきたのです。当初,月間数万だったPVが,今では500万に届く勢いになっています。

アクセス向上のためにやったことは単純なことで,効果を比較可能な2つ以上の変更をサイトに施し,一定期間測定をし,効果のあった変更を残す,ということを繰り返し,徐々にサイトを変えてゆきました。効果のあった変更については仮説を立て,その仮説の上に次の変更を施す,ということを,定期的に行ったのです。この方法を個人的に「アジャイルSEO」と呼んでいます。Webで検索して出てくるSEO対策は,あんまり参考になりませんでした。検索エンジンさんのアルゴリズムがよく変わって陳腐化が激しいし,タイトルタグがどうこうとか基本的な事柄が多かったような気がします。

サイトからの収入も割とコンスタントで,今や受託や運用の仕事と対をなす,大きな柱になっています。その分,締め切りや時間的制約の厳しい受託の仕事をせずに,心安らかにおつきあいできるお客さんの仕事だけを受けるようにして,余った時間はサイトの改良とか,研究や勉強に充てて,家族と過ごす時間を最大化できているのが今の状態です。これからは,今まで得たノウハウを横展開したり,仲間を集めたりして,もう少し安定した収入源にしたいと思ってます。

環境が変わると,人は二種類の対応のしかたをすると思います。一つは,環境の変化に抵抗して,元の環境に居続けようとする対応。もう一つは,環境の変化を受け入れ,順応しようとする対応。

新しい環境に適応する過程で,苦しむことも多いけれど,多くは学びの苦しみで,振り返ってみると自分自身が成長できたり,視野を広げたりできる。件のサイトも,もともとは息子ちゃんの名前を決めるために,Webでいろいろな名前を収集してデータベースを作っていたことが出発点でした。名付けも真剣にやれば,なにか結果を生み出すということでしょうか。僕も息子ちゃんが生まれる前なら,「エンジニアのための××」とか「既存の○○よりここが使いやすい」みたいなサイトやサービスを作ってたと思うけど,視野が広がったのが良かったのかも知れません。また,こういう働き方のシフトができたのはPythonのおかげだなあ,と思います。

僕は幸い,仕事の時間を短くしてやって行けるようになったので,新しい環境に没入して,子育てをずいぶん楽しんでいます。今日も,そろそろハイハイをし始めた息子ちゃんのために,サークルを作ったりしていました。木工なんてほとんどやったことがなかったけど,息子ちゃんが我が家に来てくれたおかげで新しい技能を習得できたのだと思って,楽しんで作ってみたりしました。息子ちゃんを寝付かせるのも工夫のしがいがあってなかなか楽しい。結局おっぱいにはかなわないんだけど。

 

Python 3を「使わない」理由というのが実はいくつかある。

たとえば対応しているフレームワークとかモジュールが少ないとか,そもそも2との互換性が崩れてるとか。対応モジュールやフレームワークはかなり増えてきたし,Python 3の情報もそこそこ出そろってきた。3.0がリリースされて4年弱経ち,この2点は大きく改善され,今ではあまり気にする必要はなくなっていると思う。

3を使わない理由が実はもう一つ「あった」。そしてこれは,個人的に最も気になっていたことなんだけど,Python 3は,2に比べてメモリ消費量が多くなっている。一番大きな原因は,str型(文字列型)がユニコードベースになったこと。Python 2のstr型はバイト列で,ASCIIなら内部に1文字持つのに1バイトしか消費しなかったけど,Python 3になってstr型がユニコードベースに置き換わったことで,ASCII文字ひとつでも内部では多バイト消費するようになった。文字列は,str型のオブジェクトとしてだけではなく,辞書のキー(Pythonが内部で使っているのを含めた)など,様々な場所で使われている。3では,それらすべての文字列の内部表現がより多くメモリを消費するようになってしまい,同時に文字列処理の速度が遅くなってしまっていた。言語仕様はすっきりしたけど,その副作用で言語としての機能が後退してしまっているようにも見える。

これを改善するために,PEP 393で提案されたFlexible String Representation(柔軟な文字列表現)という改善が施され,先頃リリースされたPython 3.3に実装された。メモリの使用率で比べると,3.2と比べて三分の一から二分の一に大幅に改善,2.7と比べても若干改善している。エンコード変換の速度も速くなり,速度面でも3系は2系より良いパフォーマンスを見せるようになった。

Pythonの言語仕様はあんま変わんないんだけど,言語仕様を変えないまま,ボディブローのように効く機能改善が行われることがよくある。これがPython流の進化の方向性なんだと言える。ほぼ全ての面で2系より「より良いPython」になったという点で,3.3は記念すべきバージョンと言えると思う。

そしてもう一つ忘れてならないのは,新しい進化はもう,2系にはもたらされない,ということ。これからは3系と2系の機能差が開いてゆき,ついには深刻なセキュリティホールのメンテも止まって,2は緩やかに消えてゆく,という道程が,より現実的に見えてきたと言える。

3.3は,venvとかunittest.mockみたいに魅力的なモジュールも追加されているし,かなりいい。今が移行の良いタイミングかもね。

 

 

Python 2の妹,Python 3があんま流行ってないのは率直に言ってツン過ぎるからですね。どの程度ツンかは妹の発言を見れば分かります。

  • 「 パパに言ってモラトリアム宣言してもらったから。私の言語仕様はもう完璧なの。もうあんた達にself無くせみたいなバカな提案させないからねっ」
  • 「サードパーティモジュールとかフレームワークとかキモい。完璧な私を素で使いなさいよっ」
  • 「ネットとかファイルから拾ってきたデータなんてただのバイト列よ。文字列にしたかったらエンコードを指定しなさいよねっ」
  • 「Djangoとかキモい…。私にはNumPyさんがいるからいいの。でも最近Pyramidがすり寄ってきてウザい…」

ところが,最近,なんか事情が変わってきていて,こんなこと言い始めました。

  • 「まっ,まあいいわよ,u"〜”も文字列リテラルとして認めてあげるわよ。だからあんたたちはキリキリと3に移行を進めなさいよねっ」
  • 「パッケージのインストール手法はまだカオスだけど,vertualenvっぽいものは安定してるみたいだし標準で用意しといたから。ほらっ,タイプしやすいようにvenvって短くしといてあげたからねっ…///」
  • 「パパがモラトリアム解除したからって,self無くせとかバカな提案しないでよねっ」
  • 「NumPyさんがやっぱり本命だけど,最近Djangoさんもいいなって…。WxPythonさんも気になるな…///。でもPyramidはZopeとか言ってて相変わらずウザい…」

というように,妹はバージョン3.3から完全にデレ期に移行を始めたと言っていいでしょう。完全に何かのフラグが立った感じです。短期的に見て,仕事で使ったりするのなら,ヤンデレのPython 2を推すしかない現状ですが,姉は病み過ぎてディスコンが決まってますので,この先セキュリティホールみたいに死に至る病を抱え込む前に妹に移行しないと,早晩ゲームオーバーになってしまいますので注意が必要です。まあ他のLLに目を移しますと,たとえばPerlは変態言語Haskellに途中陵辱されながら難産の末に生み出された妹があまりにも姉と違いすぎて未だにコミュニティがヤンデレの姉を推し続けてますし,PHPは6という妹がなかったことにされてヤンデレの姉5がヤンデレ度の少し低い妹を探す旅に出るっていうストーリー展開に破綻をきしていますし,Rubyは,えーと,えーと,「バージョンって言い方なの?」って体制が病あーりんアイドルだからプログラミングとか分かんない\(^o^)/。どの言語もヤンデレに汚染されているという状況には変わりないんですが,Pythonは出口があるという意味で少しだけマシなのです。

で,結局なにが言いたいかというと,今はPython 3を学ぶのにちょうどいいタイミングだから「みんなのPython」を改訂しました,ということです。

「みんなのPython 第三版」では,内容をPython 3に合わせて書き換え,Python 3のプログラミングスタイルを迷いなく学べるようにしました。例えば,文字列周りとかほぼ全書き換えです。その上で,Python 2と大きく変わった部分にはそれとなく解説を入れて,両者の違いが分かるようにしてありますし,巻末には付録としてPython 2の解説を添えてありますので,Python 2から使い始めてPython 3に移行したい人にもお役立ていただけるように配慮してあります。また,サンプルコードを増やしました。標準ライブラリの説明も,メール関連落としてデータ構造増やしたりjsonみたいなイマドキのモジュールを解説したりしてます。

また,今回豪華レビュアー陣にレビューをお願いしました。稲田さん,北原さん,中西さん,言わずと知れたbook.asahi.comの中の人林さん,ドキュメント翻訳ばりばりやってる高瀬さん。細かいところまで読み込んでいただいて,数々の有益なアドバイスをいただいたレビュアーの皆さんには,この場を借りて改めてお礼いたしますm(_ _)m。

内容的なボリュームは増えましたが,Python 3が言語としてシンプルで一貫性を増していることもあり,ページ数は若干減ってます。なお,お値段は据え置きとなっております。

まあでも変更部分で一番目立つのは表紙かも:-)。とても素晴らしい表紙で,担当編集者の方には大変感謝しております。

というわけで,書店でお見かけの際は,ぜひお手に取って内容をご確認ください:-)。