shareSRC Version2 Beta リリースしました!

とうとう、shareSRC Version2 Betaがリリースです。
以前のダサいデザインや使いにくいUIなどがよくなった気がします。多分。



shareSRC - http://sharesrc.appspot.com



Version2の新機能

  • 1,コードレビュー
    • 共有されているコードにレビューが書けるようになりました。
    • 某大手掲示板のように「>>数字」と書くと、その数字の行に対してコメントができます。
    • ユーザーIDは好きな名前で結構ですし、匿名でも結構です。
  • 2,Good!ボタン
    • 某f◯cebo◯kの「いいねボタン」と同じようなもので、
    • コードにイイなとおもったら押してください。
  • 3,検索機能
    • v2では「タイトル検索」、「タグ検索」、「フレーズ検索」の3つの検索が行えます。
    • フレーズ検索では、コードの中を検索することができます。
    • たとえば「<div id='test'>」なんていう検索もできます。
  • 4,CUIクライアント
    • いちいちファイルをコピーしてアップロードするのが面倒、という方へ。
    • このクライアントを使えば、楽にshareSRC上へアップロード出来ます。
    • きちんとタグもつけられます。
    • ダウンロードもできます。トークン或いはタイトルでコードをダウンロードします。
    • CUIクライアントのダウンロードはaboutページからできます。



新機能はざっとこれくらいです。
あとはコードページが見やすくなったりしています。
v1ではコードにつく付随情報は「タイトル」、「トークン」、「どこからフォークされたか」という情報だけでしたが、
v2では「タイトル」、「トークン」、「作成された日付」、「タグ」、「レビュー件数」、「どこからフォークされたか」という多くの情報をコードが持っています。
とにかく使ってみてください。




これから追加していきたい機能

これから追加したい機能は、forkされている流れがみえる「forkツリー」などです。
これ以降、随時開発を続けてもっと多くの機能をつくっていきたいと思っています。




なお、バグをみつけた場合は、@Alice1017へリプライいただくか、
このブログのコメントにてお願いします。



shareSRC - http://sharesrc.appspot.com

jQueryで$("form").submit()が効かなくなる

先週くらいから、jQuery$("form").submit()が動かなくなるということがおこっていました。
たったいま、正常に動き始めましたので、メモ & 他の人のために書きます。


効かなくなる理由

自分はinput:buttonでsubmitボタンを書き、他のinput要素が空でないかをjavascriptで確認したあと、submitするという処理をかいていたのですが、そのinput:buttonのidがsubmitだったのです。


これが理由でした。
ちなみに、idではなくclassがsubmitだった場合は正常に動きます。(多分。というかclassで書いてたときに動いてたので。)



というわけで、jQueryの$("form").submit()が効かなくなったら、ボタンのidを確かめましょう!

GAEのListPropertyについて

今日、現在絶賛開発中のShareSRCVersion2にタグ機能を実装しました。
そのときに使ったのがListPropertyで、なかなか面白いので紹介します。


クラスでデータストアモデルを設計するときには、

class TestData(db.Model):
       namelist = db.ListProperty(item_type=str)

このような書き方をします。
item_typeはリストの中身の型。
つまり、

namelist = ["apple","android","docomo"]

というような文字型のリストであればitem_typestrになります。


データを取り出すときは、db.Query(データストア名).filter()を使って面白いことが出来ます。たとえば…

db.Query(TestData).filter("namelist =", "android")

このように書くと、"android"という値がnamelistにある要素を取得することができます。
つまり、

>>> db.Query(TestData).filter("namelist =", "android").get().namelist
["apple","android","docomo"]

こういうことですね。


これでタグ機能及びタグ検索機能を実装することができます。
タグ検索の場合は、全体のタグをもつ新しいデータストアを設計する必要があります。

class Tags(db.Model):
    Tagname = db.StringProperty()

Tags(Tagname="python").put()

このようにして、たとえばpythonというタグで検索を書けるときには、パラメータかなにかでタグ名をわたして、

tag = self.request.get("tag")
filter = db.Query(CodeData).filter("tags =", tag)
data = filter.fetch( filter.count() )
for item in data:
    print item.title

このようなコードを書けば、pythonというタグがあるコードのタイトルを表示させることができるわけです。


もし、リストの値が数値ならば、filter()メソッドで論理演算子をつかうことができます。

db.Query(DBname).filter("valuelist >", 10)

この場合は、リストの各数値が10より大きいかどうかを調べるfilterです。


詳しくは以下のURLへどうぞ。


型とプロパティ クラス - Google App Engine
http://code.google.com/intl/ja/appengine/docs/python/datastore/typesandpropertyclasses.html#ListProperty

最近の開発環境の変化について

こんにちは。
最近、僕の開発環境が変わってきたので、報告をしてみます。


ざっと報告すると、

  • 1, Vimerになりました
  • 2, screen使いになりました

これだけです(笑)



僕はMacBookProユーザなのですが、以前つかっていたエディタはCotEditorというGUIのものでした。
このエディタは、シンプルですが使いやすく、シンタックスハイライトも多くの言語をサポートしていて、
開発のために使っても申し分ないエディタです。


ですが、このエディタはタブ機能が無く、複数のスクリプトを見ながら作業するということが容易にできません。
これがMacユーザになってからの悩みでした。正直、GUIのエディタを捨ててvimerになるという選択肢がここでもあったのですが、やはりタブ機能がないのと、キーマップを覚えなければいけないことと相まって、なかなかVimに手を伸ばせない状態でした。




で、この僕がVimerになるきっかけになったのがscreenです。


screenとは、GNUによって開発されたフリーな端末多重接続ソフトウェアである。1台の端末や接続したリモートの端末から、全く別々の複数の端末へと同時に接続する事が出来る。コマンドライン上で複数のプログラムを実行したり、シェル上でプログラムを実行させたまま接続を解除したりする時等に非常に役に立つソフトウェアである。

GNU screen - wikipediaより引用


この複数の端末への同時接続が出来ることによって、これをタブ機能と同じように使うことができるのです。


たとえば、一つ目の端末にはPythonスクリプトvimで開き、


二つ目の端末ではHTMLファイルをvimで開けば、
これでもうHTMLファイルを見ながらPythonスクリプトを書く、という作業ができるのです。
僕はまだscreenに慣れていないので使い切れていないのですが、
このscreenでは他にも画面を分割したりできるので、すごくおすすめです。



これでscreenの良さに気づき、否が応でもVimerになろうと決意しました。


ここで「なんでemacsユーザにならなかったの?」と思う人もいらっしゃると思いますが、
僕は以前から、十数行くらいのスクリプトvimで書いていたので、vimに慣れていたんですね。
emacsでもよかったんですが、新しくキーマップを覚えるのに抵抗がありまして。
なのでvimというCLIエディタを選びました。


Vimerになったのには他にも理由があり、vimプラグインが豊富なんですね。
僕もvimerになろうと決意した時に、二つのプラグインを入れました。
このプラグインのインストールやキーマップで、twitterのフォロワーさんにいろいろと教わりました。
キーマップを覚えるのに少し時間はかかりますが、vimは直感的に操作できるのでとても便利です。


いれたプラグインは、

このふたつです。
どちらもおすすめです。


vimプラグインのインストールは、
$HOME/.vim/plugin下に.vimスクリプトを置けば完了です。


screenのインストールは、MacユーザならMacPortsを使ったインストールが早いでしょう。
port search screen などしてからversionが一番高いものをインストールすると良いと思います。


CLIエディタとGNU screenの相性はとても良いので、みなさんもつかってみてはいかがですか?
ここまで記事を読んで下さり、誠にありがとうございました!

僕がプログラミングを始めたきっかけ

@Sn0wNightくんを中心にtwitterで流行っているので、僕も書いてみます。
中高生プログラマじゃないのにすいません><



言語

  • HTML(+css)

  • マークアップ言語ですが、一番最初に手を付けた言語です。
    普通のWEBサイトならそこそこ書けるくらい。HTML5はかけません。
    CSS3はそこそこ。IEとか氏ねば(ry


  • XML

  • HTMLよりXMLが好きだったりする。RSSフィードとか手書きしてる時代が僕にもありました。


  • C言語

  • 「プログラミング」として初めて書いた言語。
    途中でpythonに移行してしまったので、今でも四則演算くらいしか書けません。
    でも最近バイナリと逆アセンブルを触り始めたのでまた書く機会が増えています。


  • python

  • 愛してるよ!!
    大好きpython。プログラミングができる頭をつくってくれたのはこの子です。ありがたや。
    Cに比べてとっても扱いやすかったので、触った感触がとてもよかったのを覚えています。実際すぐ覚えましたし。
    Googleとかで大活躍ですね。最近はGoogleAppEngineでpythonを使ってます。
    MySQLとか使ってPHPWEBサービス立ち上げるよりも簡単にできるんで、慣れちゃうとWEBサービスが簡単に立ち上げられちゃいます。
    でもそのGoogleAppEngineもPreviewを脱して有料化って話を聞いて(´・ω・`)です。


  • php

  • 一番最初にWEBアプリを書いたのはこの子かな。
    CGIをやりたかったんだけどperlとかが手になじまないのでPHPを勉強した(気がする)。
    セキュリティとか勉強したときにPHPを使いましたね。自分でXSS仕様のものを作って、どれだけの被害がでるのかーとかやってました。


  • アセンブル

  • リードオンリー。読むだけならできる。




    経歴

    1989/10/17 - 生まれる。逆子だったので生まれたときから親を苦しめていましたすいませんほんと


    小学校3年 - 担任の持ってきたワープロにいち早く触る。迷路とか作ってた。


    小学校5年 - パソコン部っぽい部活に入る。友達はPCでゲームしてたんですが、僕だけワード使ってはがきとか作ってた気がする。
    このころから浮いてた(ry


    中学1年 - 情報の授業でオフィスソフトを習う。ワードくらいは極めた。


    中学2年 - HTMLを始める。ネットサーフィンでたくさんのサイトを見てきて、自分もこういうの作りたいと思ったのがきっかけ。


    高校3年 - プログラミング始める。高校入ったときくらいからやりたかったんだけど、成績も悪かったし、プログラミングができるかどうかちょっと怖かった、っていうのもあって。でも言語はすべて独学。勉強するために本はあんまり読まなかった。より詳しく知るために本を買った、というのはあったけれども。


    大学1年 - ブラッディ・マンデイというドラマを見始めてから、なんとpythonを始める。厨二病乙。Linuxに憧れて、デスクトップに入ってたwindowsを間違えて消しちゃったり再インストールしたりしながら頑張ってLinuxを導入。こういう経験が大事なんだよなーと今は思う。
    ユーザーに何かを入力させて、そのデータを取得して加工するっていう作業が好きだった気がする。これは今も好きで、PHPとか勉強したときもフォームとかを使っていかに相手にデータを入力させるか、っていうのを重視して勉強してた。


    大学2年 - 周りみんながリア充(というかDQN)で僕だけ一人で浮いてた大学のゼミでperlを触り、ミニミニtwitterもどきを作った。さわり心地は微妙だったのでやっぱりpython一筋と決意。講義でVBも触ったけど、当時ではVBの良さに気付けず。


    大学3年 - isidaiさんなどから影響を受けて、セキュリティ関係の勉強を始める。主にPHPで、XSSだとかCSRFだとかの脆弱性について学んだ。XSSひとつ見つけてはしゃいでました。大学2年から3年にかけては、自分のサイトを作りたかったんですが変なところにこだわりがあってサイトを作っては消し、作っては消し、という作業を続けていました。なんでも自分ひとりでやろうとして、日記のコメント機能とか実装して@xrekkusuくんとか@Sn0wNightくんにXSSを仕込まれたり…いろいろありました。


    大学4年 - pythonを愛でながらいろんなWEBアプリ、モジュールを作っている現在。21にしてバイナリアンを目指す。



    以上が僕のプログラミングをはじめたきっかけと経歴です。


    まとめ

    中学生プログラマーになりたかった(泣
    でも、大学生からプログラミングを始めても、これだけたくさんの人に出会えることができたのはとても嬉しいです。
    出会いが財産です。


    HTMLに関して。今でも父親のWEBサイトとか、はたまたお客さんのWEBサイトとかつくる機会があるので、
    HTMLを最初にやったのは結果的によかったのかなーと思う。(あとはセンスがあればいいんですが。センスが来い


    できるなら、これからもっといろんな言語に触れて、もっとプログラミングしたかったんですが、
    もうそんなに時間はなくて、プログラミングに当てる時間が少なくなってる、というのが現状です。


    でも、それを選んだのは僕自身なので、弱音は吐きません。
    税理士、という目標をつかむことができたら、また仕事と並行してプログラミングやっていきたいと思います。
    ここまで記事を読んでくれてありがとうございました!

    FTPterm2.0をリリースしました!

    こんにちは。もうすぐ4月ですね。


    今日(2011/03/27 16:30頃)にFTPtermVersion2.0をリリースしました。

    目次




    FTPTermとは

    FTPtermとは、コマンドラインインターフェースのFTPクライアントです。
    FTPクライアントってGUIばかりが多いですよね。


    僕が初めてFTPtermをリリースしたのは、PYPIによるとどうやら2011/01/21みたいです。
    Version1.*の時の仕様はwhile文とif文しか主につかっていませんでしたが、
    今回のVersion2.0では、仕様を一新しました。





    使い方

    • 何もオプションを付けずに起動させると、スクリプトがホスト名、ユーザー、パスを聞き出します。
    • -c--use-confオプションを付けると、設定ファイルを指定してデータを収集後、起動します。
    • -u--uploadオプションを付けると、ファイルをアップロードできます。
      • オプションは3つ必要です。
      • 1, アップロードするファイル名
      • 2, 起動につかう設定ファイル
      • 3, アップロード先のファイルパス





    仕様変更

    1. argparseを使い、option周辺のプロセスを最小限に収めました。
    2. Pythonスクリプトの書き方を変えました。
    3. ヒストリーを記憶できるようになりました。上キーで履歴を参照できます。
    4. コマンドがいくつか増えました。
    5. 設定ファイルのシンタックスを変えました。




    設定ファイルのシンタックスについて

    [Setting]
    host = xxxxx.xxxx.xxx
    user = xxxxxx
    pass = *******
    設定ファイルのシンタックスiniファイルの構文を使いました。






    ダウンロード

    PYPIGithubにうpしてあります。