2015年1月21日水曜日

文字のエンコードについて〜Python with Xcode 6 補足〜

先日の記事

Xcode 6でPythonの開発を行う(Mac)

の補足です。

文字エンコードについて。
ソースのエンコード、システムのエンコード、ファイル入出力のエンコードなどそれぞれありますが、たぶん、こんがらがらないためには、統一しておくのが一番かと思います。もちろん合わせなきゃいけない場面もあるでしょうが、自分で使う分には統一が一番ですよね!?
Defaultは基本的にPython 3系では標準がUnicode形式になりましたが、Python2.x系ではUS-ASCIIになっており、日本語を入力できなかったり非常に不便ですので、変更方法などご紹介します。プログラムで処理することもできますが、コーディングしやすくなります。

以下、Python2.x系に向けた記事です。

<ソースコードのエンコード>
Pythonでソースコードを書くときは、基本的に、1行目でエンコード形式を指定します。ASCIIでは、たとえコメントにでも日本語を入力したとき、そのままの設定ではエラーになってしまいます。

僕の場合は、Xcodeの標準に合わせ、
# coding: UTF-8
にしました。Xcode側からも、右側のText Encodingから変更などできます。
(vim形式、emacs形式など、表記法にも複数あるようです。大文字・小文字は区別されません。)
これで、日本語も記述できるようになります。

ただ、例えば文字列の長さを取得したいとき、len(u'日本語')=3ですが、len('日本語')は3ではありません。こういう点ではやはりunicodeが便利で、Python3系が羨ましくなります。また、どの文字コードがいいのかわかりません・・・

<システムのエンコード>
次に、デフォルトのエンコードについて。デフォルトでは、入出力もUS-ASCIIになっており、不便です。よって、これをUTF-8に書き換えたいところです。(ただ、設定の書き換えなので自己責任で!)

方法は、sitecustomize.pyというファイルを作り、
import sys
sys.setdefaultencoding("utf-8")
を入力して保存。
Macintosh HD->ライブラリ->Python->2.7->site-packages->にファイルをコピーすれば完了です。
確認は、Pythonを対話モードで起動して、
import sys
sys.getdefaultencoding()
を実行すれば、defaultencodingを表示させることができます。utf-8になっていれば設定完了です。

<ファイル入出力のエンコード>
今回僕が躓いたのは、Excelで適当に出力したCSVファイルをMac上でのPythonで動かそうとした時です。CSVファイルは、表などを特定の文字で区切って保存する形式です。Pythonの標準モジュールCSVを使うと、簡単に読み込めます

まず、プレビューで見ても、日本語に対し、文字化けが発生しました。これは、そのCSVファイルをテキストディットで開き、何もしないまま保存すると、なおります。
見るだけならこれで十分ですが、これでは文字エンコードが何かわからなくて、プログラムで読むにはこまります。

そこで、文字コード統一のメリットを活かして、文字化けしなくなったファイルをNumbersで開き、ファイル→書き出す→CSVから、テキストエンコーディングを「Unicode (UTF-8)」を選択し、書き出します。
これで、そのまま読めるようになります。



以上書いたのは、とても基本的なことですが、プログラム(encode, decode)で処理するよりも外部で処理したほうが簡単で、コーディングがとてもしやすくなりますよ!

リストの中の文字列を表示する方法など、こちらで紹介されています→japaneseCharset

2015年1月20日火曜日

高校以前の開発について

高校の頃のブログから作り替えたため、このブログには、高校以前の開発についての記述がありません。

Cube LEDやサイリウム、電光掲示板の制作&制御や、ロボカップジュニアについて、余裕があれば、有益なものについては再投稿したいとも思っています。

2015年1月17日土曜日

Yorufukurouで画像を投稿する



MacのTwitterクライアントとして有名なYorufukurou、使いやすいのに、全然更新されていなくて、最近では画像の投稿すらできなくなって、困っていました。

そこで調べていると、なんとサービスを自ら作っている方が・・・!

Twitpic API to twitter media upload gateway(beta)

です。

設定方法などは、作った方がリンク先で説明されています。注意点も書かれていますので、よく読んでから利用しましょう!

こういうサービスを作れるようになりたい……

2015年1月15日木曜日

Xcode 6でPythonの開発を行う(Mac)



Swiftを書いてから、統合環境Xcodeでの開発に慣れてしまい、vimやemacsが使えなくなりました・・・


PythonもXcodeで開発するための方法を示します。ただし、Pythonのインストールについては省略します

Pythonはインタープリター型の言語であるので、プログラムを逐次翻訳していきます。つまり、ほかの言語でいうコンパイルの操作が不要であることを意識しながら作業を進めましょう。

satomacoto - 「Xcode 4でPythonの開発環境を整える」
を参考にしました。
画像を多く使い、わかりやすく解説してくださっています。

pyファイルを実行するときには、
$ python (ファイルパス).py
を実行します

つまり、Xcodeのビルドボタンを押した時にこのコマンドが実行されるようにすればよいです

ファイルの作成は不要なtargetを削除して、Schemeの設定をしっかりすれば、Command Line ToolでもEmptyでもなんでもいいです。不安な方は上のリンクから参照してください。

ここでは、Xcode4と6とで見た目が違う、Schemeの設定について書きます
(僕の場合、プロジェクト名をpythontest、ファイル名はsource.pyにしました)


上のメニューのProduct→Scheme→Edit SchemeからRunタブのInfoタブをひらき、設定を画像のようにします。
"Executable"は"Other"を選択し、⇧⌘G (shift + command + g)で¥usr¥bin¥を入力して移動し、pythonを選択します。
それと、"Debug Executable"のチェックを外します。

終われば、Argumentsタブに移動します



"Arguments Passed On Launch"の"+"から
$(SOURCE_ROOT)/実行したいファイル名.py
を入力します。これがつまりコマンドライン引数になります。別の場所に.pyをおいている場合はそちらを指定します。

以上でSchemeの設定は完了です!



あとはコードとして、

print "hello world!"

とでもかいて、実行してみましょう!




ちゃんと実行できました!!

※2015/1/19追記
標準入力が動作しないことがわかりました。原因究明中です。

※2015/1/21追記
文字エンコードについて補足しました。コーディングしやすくなる方法です。
→<http://ha1f-blog.blogspot.jp/2015/01/python-with-xcode-6.html>
標準入出力については変化がありません。

2015年1月6日火曜日

HACK U 京都大学


ずいぶんと前の事になりましたが、2014/12/20に、HACK U×京都大学というイベントに参加しました。
京都大学 デザイン学大学院連携プログラム主催、ヤフー株式会社共催のハッカソンイベントです。

Yahooで行われるハッカソンイベントHack Dayの大学生版で、2週間で作ることが課題でした。特に与えられたテーマなどもなく、「創作」であればOKでした

そのイベントに向けて僕らが作ったアプリケーションがARound グルメです。

自分の周囲にある店の情報と、Twitterで特定のハッシュタグ付き(アプリ内でつぶやける)でつぶやかれたレビューとを、カメラ画像の上にAR(拡張現実)として表示するiOS用アプリケーションです。
経路案内機能、評価をサーバーに保存/平均をとって出力する機能、ツイート機能などもついてます。


このイベントのために、僕はSwiftを、友人がSwift, PHP, データサーバを0からはじめ、なんとか完成しました。ソースコードはとっても汚いです

そして、努力した甲斐があり、最優秀こそ取れなかったものの、「技術賞」を頂きました。栄誉あることです!


最優秀はなんと高校のロボット部の先輩のチームで、研究室(松野研)のメンバーで出場していたそうです。二週間ですごいロボット作っていらっしゃいました・・・凄いです・・・

ロボット部の先輩方は、僕より上には4年しかいないのですが、東大ロボコンチーム80人を率いるリーダーをしていた方、学部2回生から学術論文の投稿や学会発表をしていた方、SECCONで上位の方など、すごい方いっぱいいます・・・
僕もすごいことしたいのに、どこまでなれるでしょうか(泣

最後話が変わりましたが、とりあえずもっと色々頑張りたいです・・・!