(第14回)Python mini Hack-a-thonに参加してきました

(第14回)Python mini Hack-a-thon(@アリエル・ネットワークさん)に参加させて頂きました。様子や関連リンクについては次回(第15回)Python mini Hack-a-thonのページにて、たかのりさんが纏めて下さっています。

第13回に続き今回で2度目の参加となります。11月初頭にPythonを始めてそろそろ約1ヶ月半。いつまでもピヨピヨ鳴いているわけにもいかないので、そろそろレベルアップを目指したいところです。今後の勉強予定として、暫くはPythonと英語漬けの日々にできればと思っております。と言いつつも色々手を出しちゃいそうですが……。

さて今回も前回同様「Pygame/OpenGLを用いてゲームを作る準備/学習をします。何かうねうね動かします」という目標を掲げて開発、学習を行いました。

その前に:会場の様子や非機能要件的な事を少し

  • shomaさんによるPicasa Webアルバム
  • t2yさんに舞昆頂きました。帰って食べたら美味かったー! ありがとうございます!

  • gjoさんがPS VITAの3G版を早速買って来てHackにTryされていたので見せてもらった!
  • お昼はソーセージでした。うまうま。

  • Pythonゲームプログラミング入門』のshinriyo先生にご挨拶できて光栄でした!
  • 高校生若い。大学生も十分若い。
  • サルミアッキチョコが猛威をふるっていました(;゚;益;゚; )イ...イイネ!
  • たかのりさんの3DSと2回すれ違ったところ、挨拶がちゃんと会話になってた……。
  • 大御所の先生方がクラスチェンジを繰り返していた。
  • 師匠:「MacBook Air が 180度以上開くエアー」
  • 懇親会楽しかった!

やったこと

1.環境整備
MacVimをデフォルトのまま使っていたところ、地獄先生に「それ大変じゃね?」と指摘され、アドバイスを頂いてPythonで使いやすいように環境整備しました。

~/.vimrc を作成
filetype plugin indent on
syntax on

~/.vim/ftplugin/python.vim を作成
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal smarttab
setlocal expandtab
setlocal nosmartindent
setlocal tabstop=8

あと見づらそーにTerminalウインドウを眺めていたら「command + '+' でおk」と言われ「なるほどー」と納得しました。

2.フォントの表示
display surfaceの作成、基本的な図形描画(円、四角形、多角形)を前回やったので、文字を図形描画できるようにフォントオブジェクトを作成しました。

# -*- coding: utf-8 -*-
# 日本語を使いたかったのでファイル先頭に追加

font = pygame.font.Font(u'ヒラギノ角ゴ Pro W3.otf', 36)
text = font.render(u'世界の小宮VS地獄の清水川', 1, (10, 10, 10))
textpos = text.get_rect(centerx=windowSurfaceObj.get_width()/2)
windowSurfaceObj.blit(text, textpos)

にわかMacユーザーなのでフォントファイルの場所とかわからない(;´Д`) すると
地獄先生:「Lionのフォントどこ」
世界先生:「/System/Library/Fonts」
さすがでござる……。

3.ggrms
飛び交う会話の中で解らない言葉をこっそりググっていたら勉強になりました……。

4.発表
前回は所用にて発表前に帰ってしまったので、今回が初の発表となりました。そのせいもあってか予想以上にガチで緊張してしまいました(;´Д`) が、皆様の暖かいフォローのおかげで無事に終える事ができました。ありがとうございます。
若い頃は「プレゼンなら俺に任せろ」等と息巻いていた時もありましたが、寄る年波には勝てませぬ.orz こつこつと、地道に慣れていければと思います。

皆様あざ━━━━━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━━━━━っした!

BPStudy#52に参加してきました

https://connpass.com/event/145/
(株)ビープラウドさんの主催するWeb系技術討論の会「BPStudy」#52に参加させて頂きました。#51に続き今回で2回目の参加となります。shachoさん自らトゥギャっていらっしゃいますので(http://togetter.com/li/228918 さすが!)、各論ではなくサマリと感想を少しだけ書きたいと思います。

第1部 プロジェクトをパワフルに前進させる「すごい会議」の進め方
株式会社グッドインパクト 中野康雄先生

会議ですることは3つ。

  1. 質問 何かを明確にするために行う。
  2. 提案 行動に移せるもの。代替案、理由を提示できるようにする。
  3. リクエスト 行動を生むためのもの。達成基準と期日を明確にする。

以上を実現するため

  • 意見を紙に書いて話を進める。すると「前の人と同じ」ような意見になりづらいし、書く時間も定量化できる。
  • 自分の意見を発言するとき「私が言うには」を付加。事実でない場合、事実のような断定を避ける。
    • 人の意見を聞くときYES, NO以外に「受け入れる」姿勢を持つ。判断は一時保留で構わない。一度受け入れられると発言しやすくなる。まず「なるほどね」を言ってみる。
  • 問題点を「どのようにすれば〜〜だろか」というフォーマットにすると、主体的に考えるようになる。

なるほど━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━ッ!!!!
中野先生は「Think」「Feel」という言葉を何度かお使いになりました。私は「ロジカルシンキング」と「心理学」の本を何冊か読んだ事があるのですが、「すごい会議(HPOS)」はそれらを現場の会議で今日から実践できる範囲に適用した知識体系なのかな、と感じました。先生の語り口はとても心地よく、聞いていてまさに「なるほど!」と、なるほどボタンを連発したい気分になりました。

なるほど━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━ッ!!!!
私が思うに、普通の会議だけではなく、井戸端会議や、日常のコミュニケーションに適用できる部分も多いのではないでしょうか。

ヒャッハ━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━ッ!!!!

第2部 エンジニアの自分が会社をつくって5年間で起こったこと、学んだこと
株式会社ビープラウド 佐藤治夫社長

困った。
話に聞き入ってしまいメモを取っていない。
TLを見ても省略できるところがないょ……。

感動した! 共感した!! 面白かった!!!

なるほど━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━ッ!!!!

おういえ━━━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━━っす!!!!

また是非懇親会も含めて参加させてくださ━━━━゚+.ヽ(≧▽≦)ノ.+゚━━━━━い!!!!

電子タバコ:ナレッジの共有

現在は電子タバコを含めて禁煙しております(もうすぐ1年になります)が、ナレッジの共有ということでブログに書いておきます。誰かの役に立てばこれ幸いヽ(≧▽≦)ノ

応用情報技術者試験

今秋、ITリハビリ&高度午前1免除権ゲットの為、応用情報技術者試験を受けてみました。
結果合格。うわーいヽ(´ー`)ノ



午前も午後も60点以上で合格なのですが、双方70点以上取れていました。
午後はギリギリかと思ってたんだけど、部分点くれたのかな……ラッキーでした!

ソーシャルグラフ 2.0

今更語るまでもありませんが、10年代に入り、SNSが「社会的に注目を集める」状態から、「国民的インフラ」状態にまで到達したと言っても過言では無いでしょう。解りやすいUIと、お節介とすら言える親切な機能で、レイトマジョリティまで拡大したものと思います。大震災におけるTwitterのめざましい活躍や、スマートフォンの爆発的な普及等も追い風を加速する要因だったと言えましょう。

さてそのように大成長したSNSですが、次は何を目指すべきなのか。私は機能やUIよりも、ソーシャルグラフそのものを進化させることが重要だと考えております。

SNSにおける最も重要な要素はソーシャルグラフです。まずソーシャルグラフありき、その上で機能やUIが追従してくる方向性が今後のSNSに求められる、というのが私の持論です。



ソーシャルグラフは簡単に言えば「人間関係図」です。SNSからソーシャルグラフを抜いてしまうと、何の変哲も無い、UIが統一された単なるブログシステムになります。RSSを用いればブログでもSNSのメッセージフィードライクなシステムは作れますが、それでは一般の人達に対してこれほどまでに普及はしなかったでしょう。

友人として承認する、フォローする、たったそれだけの行為で、友人知人の情報が勝手に飛び込んで来るし、また発信することもできる。更なる便利機能として、ソーシャルゲームやコミュニティへの参加、マルチメディアコンテンツの公開、共有、コラボレーション等も可能で、まさに時代の花形と呼ぶにふさわしいプラットフォームと言えるでしょう。

そのように便利なSNSですが、普及するにつれて「あれ、おかしいな?」と違和感を覚える人が増えてきたのも事実でしょう。本当に友人のみと使っている場合はよいのですが、会社の上司・部下、家族、そして有名人ですら「友人」として承認していたのです。mixiであれば「マイミク」、Facebookであれば「友達」、Twitterであれば「フォロワー」と呼ばれますが、呼び方の違いだけであって、とどのつまり「友人的関係」で隣接していたのです。

mixiにいたっては「マイミクの」という新たな人間関係まで生まれており、真に逆説的ながらソーシャルグラフが新たな人間関係を作るという興味深い事実もあるのですが、ここでは触れないでおきます。

さてそんな「友人的関係」しか枝を持たないソーシャルグラフに一石を投じたのが、本年登場した「Google+」です。Google+では、全ての隣接する相手に「サークル」というタギングで関連性を記述することができるようになりました。

これは画期的でした。少なくとも私は、隣接する他者が全て「友人的関係」で画一化されているシステムよりも(手間はかかるものの)遥かに自然で、進化したソーシャルグラフだと感じました。今まで皆が違和感を感じていたところに、ついにGoogleがメスを入れた! と思いました。

そのような理由から、今でもGoogle+を好んで使っております。しかしながら、確かに「サークル」というタギング心理的にはとてもナチュラルで心地よいのですが、機能的な進化かと問われれば、そうではありません。例えばmixiでも「グループ」機能を用いればグルーピングは可能です。同様にFacebook, Twitterでも「リスト」によるグルーピングが行えます(大雑把な言い方ですが)。

このようにGoogle+ソーシャルグラフ心理的意味では進化をとげたと言えますが、機能的意味での進化とまでは言えないでしょう。ここからは機能的な進化について考えます。



SNSにおけるソーシャルグラフ形成の目的は、大きく3つあるものと思います。

  1. 公開コンテンツの選択的な取得
  2. 公開先の限定
  3. ソーシャルグラフに他者を組入れること自体(e.g. マイミクになる)

1.および3.は、健全な目的と言いますか、あまりごにょごにょせずに達成できる目的であり、機能的にも現状のSNSで完成していると思います。2.こそが、まさに「ある人には見せたいが、ある人には見せたくない」という人間心理の本質であり、SNS普及の大きな一因になったのではないかと私は考えております。

そこで2.を進化させるにはどうすればよいか? と考えたのが、ソーシャルグラフへの距離の導入です。

例えば、親しい人=1, 普通の人=2, 余り親しく無い人=3, というように、人間関係に距離を付加するのです。Google+では人間関係に「質」が付加されましたが、本記事で提唱したいソーシャルグラフでは更に「量」を付加するということです。

これによって、様々な公開範囲を設定することが可能になります。上図で「距離2まで公開」とすれば、「やばい友達」の隣接他者には公開されませんが、「信頼できる筋の友達」の「親しい人」には公開されます。

Google+のサークルと組み合わせれば「Friends + 距離1 まで公開」といったように、自由に公開範囲を設定することができます。「六次の隔たり」のロジックで言えば、「6ホップ(距離18)まで公開」としておけば、ほぼ全体に公開しているのと等価だが、クローラによる検索をブロックする、といった使い方も可能になります。



以上、今まで「質」だけだったソーシャルグラフの枝に「量」を付加してはどうか? というのが本記事の論旨です。それをもって烏滸がましくも「ソーシャルグラフ 2.0」と呼称してみます。もちろん、突然そのような実装を行っては、ユーザー側もSNS提供側も困惑するでしょう。本記事のようにいい加減な推論ではなく、定量的な評価を行った上で、UIを含めたプラットフォームが緩やかにソーシャルグラフ 2.0に移行できたら、ややこしくもちょっと便利な機能になるかもしれないし、ごちゃごちゃするだけかもしれません;-)

空のsurfaceを作る(続き)

昨日のエントリ「空のsurfaceを作る」では、結論として「MP3を再生できる時もあるが再生できない時もある」という、改良版どころかむしろ非常に気持ちの悪い状態を生み出してしまいました。

というわけで改めて対応策です。まずは以下のコードをご覧下さい。

import pygame

# 関数pgstartを定義
def pgstart():
    pygame.init()
    pygame.display.set_mode((1, 1))
    pygame.display.quit()

pgstart()

# Pygameのコード
pygame.mixer.music.load('flymetothemoon.mp3')
pygame.mixer.music.play(1)

# CUIのコード
for i in range(360):
    print 'playing', i, 'sec.'
    pygame.time.delay(1000)

ごらんの有様だよ……。
関数を作ってみたいから作った。後悔はしていない。はじめて作ったPythonの関数だよ! Pygameを初期化→1x1ピクセルのダミーdisplay surfaceを生成→速攻で消去。たったそれだけ。するとなぜか100%、MP3の再生に成功しました。

お前本当に理系かよと。原因とかロジックとか気にならないのかよと。

でも、いいんです! 今はとにかくやりたいことを実装しながら勉強してる段階です。細かい事に後ろ髪を引かれている場合じゃありません。Go Aheadです。とりあえず

pgstart()

しておけばPygameのコードが100%動くっぽいんです。
というわけで、明日も目標のゲーム作成に向けてがんばります!

空のsurfaceを作る

※この方法ではMP3が再生されない場合がありましたので没とします。対応策は「空のsurfaceを作る(続き)」(2011-12-09)に書きます。

一昨日の記事の改良版です。David Clark著、Yusuke Shinyamaさん訳の初心者のための pygame ガイドを拝読していたら

3. surface (サーフェイス) とは何かを理解しよう。
(中略)
Surface() を使えば、まったく何もない surface さえつくれるんだよ。

とあったので、何も無いsurfaceを作成すればCUIでもPygameが利用できるだろうと思い、コードを改良してみました。

import pygame

pygame.init()

pygame.Surface # ここで空のsurfaceを作成しています。

pygame.mixer.music.load('flymetothemoon.mp3')
pygame.mixer.music.play(-1)

for i in range(360): # CUIのコードです。
    print 'playing', i, 'sec.'
    pygame.time.delay(1000)

特に問題なくPygameにてMP3が再生されつつ、CUIのコードを実行することができました。これで「Pygameの機能を使いたいけど、いちいちグラフィカルなsurfaceオブジェクトを作るのはちょっと……」という場合でも、気軽に実装できますね。