2011年8月26日金曜日

Twitter bootstrapでmakeの際エラーが出たのでその原因をメモ。

エラー内容

/Users/user_name/.rvm/gems/ruby-1.9.2-p290/gems/less-2.0.6/lib/less/loader.rb:46:in `error': file 'reset.less' wasn't found. (Less::ParseError)

あれれ、、、reset.lessは存在するのになんでやろ。。。。 と思って、makefileの中身を覗いたところ、どうやらmakefileはnode.jsのless用に書かれているようで 自分の環境の場合rubyのlessが入ってるのが原因だと推測。。。

で、僕の環境だと

/Users/user_name/desktop/bootstrap% which lessc
/Users/user_name/.rvm/gems/ruby-1.9.2-p290/bin/lessc

ってなかんじで、lesscコマンドはrubyの方を参照していたので、makefileでnode.jsの方を参照するように書き直しました。

rubyのlessはアンインストールしようかとも思ったけど、sinatraとか依存してるみたいなので踏みとどまりました。

下記にmakefikeのコードも載せておきます。(node.jsのlessのパスは環境によって違ってくるかと思うので自分のパスを確認して下さい。)

DATE=$(shell DATE)
BOOTSTRAP = ./bootstrap-1.1.0.css
BOOTSTRAP_MIN = ./bootstrap-1.1.0.min.css
BOOTSTRAP_LESS = ./lib/bootstrap.less
LESS_COMPESSOR ?= `which lessc`
WATCHR ?= `which watchr`
#下記の1行を追加
LESS = /opt/local/lib/node_modules/less/bin/lessc

build:
  @@if test ! -z ${LESS_COMPESSOR}; then \
    sed 's/@DATE/'"${DATE}"'/' ${BOOTSTRAP_LESS} >${BOOTSTRAP_LESS}.tmp; \
  #下記の2行を訂正した。
    $(LESS) ${BOOTSTRAP_LESS}.tmp > ${BOOTSTRAP}; \
    $(LESS) ${BOOTSTRAP_LESS}.tmp > ${BOOTSTRAP_MIN} --compress; \
    rm -f ${BOOTSTRAP_LESS}.tmp; \
    echo "Bootstrap successfully built! - `date`"; \
  else \
    echo "You must have the LESS compiler installed in order to build Bootstrap."; \
    echo "You can install it by running: npm install less -g"; \
  fi

watch:
  @@if test ! -z ${WATCHR}; then \
    echo "Watching less files..."; \
    watchr -e "watch('lib/.*\.less') { system 'make' }"; \
  else \
    echo "You must have the watchr installed in order to watch Bootstrap less files."; \
    echo "You can install it by running: gem install watchr"; \
  fi

.PHONY: build watch

これで問題なくmake出来るはず(*´∀`*)ポワワ

ふふふ、最近makefileの書き方を勉強し始めたのですが、早速活用の場が出来て、嬉しくなったので些細なことだけどブログに書いたよ(*´ω`*)

Twitterのbootstrapいいですよね。フォークしたので色々カスタマイズしようと思います。

ではでは

2011年8月20日土曜日

rails3.1にだんだん慣れてきたのでどんな感じなのか自分なりに書いてみようと思います。

はじめに

特に意味もなく、なんとなく使ってみたいからと言う理由で 下記のような環境でwebサイトを作っています。

  • rails3.1.0rc5
  • haml
  • CoffeeScript
  • sass(compass)
  • mongodb(mongo_mappaer)

月末には3.1の正式版が出るので、それぞれの技術がどんな風にキモいのか、そして便利なのか、はたまたただ、紛らわしいだけなのか、自分なりに書いていこうと思います

rails3.1の特徴

そもそもruby on railsは一体なんなのか。。。というと、webサイトを作成するための最新技術を集めたフレームワークです。 一度インストールすれば

% rails new {your_webApp_name}

というコードだけを打てばそれだけでwebAppのほとんどの下地が出来てしまう大変便利なツールです。 さらに

% rails generate scaffold Blog name:string body:text
% rake db:migrate
% rails server

と続けて打てば、タイトルとコンテンツ内容を投稿していける簡単なブログサイトがデータベースの設定も済んだ状態で使えるようになります。さらにhttp://localhost:3000にはサーバーもたってます。

ブログを作るなら「楽さ」でいうとPHPのwordpressとかの方が効率的かな〜と使ってみて思ったんですが、多数のユーザーが参加するようなwebAPPはrailsの方が向いていると思います。 python使ってる人ならGAEを使ったことがあると思いますが、だいたいそれと同じような感じです。

僕なりの感想だと、GAEはある程度技術がまとまっていて、そこが学習コストを少なくさせていいところだと思います。(Googleのdocumentが素晴らしい) railsは今回のupdateで0.1増えただけなのにだいぶ変化があります。(coffee-scriptとかsassの導入) そういう使い方がコロコロ変わっていくのが(最新の技術を追いかけていく設計思考らしい)嫌いでないなら、railsを好きになれると思います。

hamlについて

railsでは標準では、erbという技術を採用してます。しかし、ゴニョゴニョすることにより、hamlを使っていくことも可能です。どちらもテンプレート言語です。

erbはこんな感じ

<!DOCTYPE html>
<html>
<head>
  <title>TestPJT</title>
  <%= stylesheet_link_tag    "application" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

ご覧のとおり、htmlの中にrubyのコードを<% %>の間に書くことによってして内容を出力できます。phpとかpythonのDjangoと似てます。HTMLを知っていれば簡単に修得することが出来るのがメリットです。

しかし、僕はhamlを選びました。その理由は…..

Pic 2011 08 20 11 07 51

こんなのところや

Pic 2011 08 20 11 04 48

こんなのとかを許せない人間になってしまったんです。。。。。

この閉じタグやら、閉じカッコを詰めると、コードが見づらくなるし、、、、かといってしっかり書くと、行数が増えるし。。。。なにより見た目が綺麗ではない。。。。

そうです。僕はインデント派の人間なのです。w だからもっとすっきり書くことが出来るhamlを選びました。下記はさっきのコードをhamlに変換したコードです。

hamlはこんな感じ

!!!
%html
  %head
    %title TestPJT
    = stylesheet_link_tag    "application"
    = javascript_include_tag "application"
    = csrf_meta_tags
  %body
    = yield

hamlは簡単にいうとcssのセレクタを書いてく要領ででエレメントを書いていくことが出来るテンプレート言語です。すっきりしてて素晴らしい。。。。かなり割愛して書いているので、もしhamlが気になった方がいたらググッて調べて下さい。(もしかしたらgoogle先生に"もしかしてhtmlの打ち間違い??"って言われるかもしれませんw)

調べてないけど、pythonにもこういうインデント系テンプレート言語あるのかなぁ。。。ありそうなきがするけど。。。

CoffeeScriot

CoffeeScriptはpythonやrubyのように書いたコードをjavascriptに変換してくれるツールです。

これもhamlを選んだ理由と同じ理由で使ってます。僕は、javascriptをそのまま書いている時いつもその冗長なところに嫌気を感じていました。そんなことを感じている人はcoffeescriptがおすすめです。

違いは見比べてみるのが一番わかりやすいと思うので同じ内容のコードを書いてみます。

ただのjavascriptの場合(jQeryも入れてみる)

$(function(){
  $("#hoge").click(function(){
    console.log("hello")
  });
});

いつもいっつも、まず、$(function());を書いて、$("#hoge")をかいて、.click();をかいてその中にfunction(){}って書いて、その中にしたいことを書く。。。。ってなことをず〜〜と続けて居たんですが、そういう冗長な行動をなくすことが出来ます。思えば、どれだけネストすれば気が済むんじゃ??ってかんじですよねw

CoffeeScriptだとこんな感じ

$ ->
  $("#hoge").click -> console.log "hello"

かなりすっきりします。まず$ ->で改行。これが$(function());です。そして、$("#hoge")は普通のと同じように書いて、その後ろに->を書きます。これはfunction(){}を意味します。そしてその横(もしくな開業してインデント)にしたいことを書く。。。ってかんじです。

慣れるまではコンパイルに失敗したり、独自の書き方に戸惑ったりするかもしれませんが、慣れたらかなり気持よくjavascriptを書いていけます。

 

sassについて

すいません。次回に持ち越しさせて下さいw 書くのに疲れちゃった〜〜wヽ(´ー`)ノ sassもhamlやcoffeescriptと同じように大変便利なツールです。

また暇があったら書くかもしれませんが、もしかしたら書かないこともあるかもしれませんw

 

最後に

かな~~~~りかいつまんで書いてあるので、興味をもったら、Google先生にいろいろ聞いてみてください。 また、なにかツッコミがあったら教えて下さい〜。

それではまた。

 

2011年8月4日木曜日

rubyのgem「em-websocket」を使ったらいとも簡単にwebsocketを導入できた。

とても簡単です。 10分もかからずに試せるのでよかったらどうぞ。

一応githubにソースも置いてますので、興味があるかたはそちらも見てみて下さい。(❍ʻ◡ʻ❍)

https://github.com/nihitok/Kantan-websocket

作るもの

websocketで動くチャット

最初に、gemでem-websocketをインストールします。em-websocketの詳細はこちら。https://github.com/igrigorik/em-websocket

$ gem install em-websocket

環境によっては依存するライブラリがなくて怒られたりするかもしれませんが、その場合はエラーメッセージでググッて見て下さい。

次に、適当なHTMLで「index.html」を作ります。

<html>
  <head>
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'></script>
    <script src='main.js'></script>
  </head>
  <body>
    <input id="input" type="text" />
    <div id="msg"></div>
  </body>
</html>

そして、クライアント側の動きを実装するmain.jsファイルがこちら

$(function(){
    ws = new WebSocket("ws://localhost:51234");
    ws.onmessage = function(evt) {
        $("#msg").append("<p>"+evt.data+"</p>");
    };

    ws.onclose = function() {
        console.log("閉じたよ")
    };

    ws.onopen = function() {
        ws.send("繋がったよ!(❍ʻ◡ʻ❍) ");
    };

    $("#input").keypress(function(e){
        if(e.keyCode ==13){
            var val = $("#input").val()
            ws.send(val)
            $("#input").val("")
        }
    });
});

ここで注意点が一つ。localの環境で試す場合は"ws:localhost:{好きなポート番号}"で大丈夫ですが、VPSなどで試す場合は、localhostの部分をそのVPSのIPアドレスか、ホスト名に変えて下さい。よく考えれば分かることなんですが、僕はこれで1時間ほどハマりましたw

そして、気になるサーバーの動きを実装するserver.rbがこちら。

#coding:utf-8
require 'em-websocket'

Process.daemon(nochdir=true) if ARGV[0] == "-D"
connections = Array.new

EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 51234) do |ws|
  ws.onopen {
    ws.send "繋がった〜(❍ʻ◡ʻ❍) "
    connections.push(ws) unless connections.index(ws)
  }
  ws.onmessage { |msg|
    puts "received "+msg
    ws.send msg #to myself
    connections.each {|con|
      #to other people
      con.send(msg) unless con == ws
    }
  }
  ws.onclose   { puts "閉じます〜" }
end

補足ですが、下記の部分はdaemonとして動かすために入れてます。rubyではたった1行加えるだけでそのスクリプトをdaemonにできるのですごく便利です。(daemon化するっていうのはバックグラウンドでずっと起動しぱなしにできるっていうことだよ(❍ʻ◡ʻ❍) )

Process.daemon(nochdir=true) if ARGV[0] == "-D"

これで、後はサーバーを起動するだけです。とりあえず、普通に起動します。(rubyのversionは1.9.2で試してます。多分、1.8.7とかだと動きません。)

$ cd {server.rbがあるディレクトリ}
$ ruby server.rb

index.htmlをブラウザで開いて、windowを2つ並べてこんな感じに動作すれば成功です。

Pic 2011 08 04 18 51 26

daemonとして起動したい場合は下記のようにします。

$ ruby server.rb -D

プロセスを終了したい時はちょっと面倒ですが下記のようにしてください。

$ ps ax |grep ruby
74583   ??  S      0:00.10 ruby server.rb -D
76807 s003  R+     0:00.00 grep ruby

みたいな感じでpidが確認できるので、"ruby server.rb -D"とかいてある方のpidを確認して

$ kill -9 74583
$ ps ax |grep ruby
76807 s003  R+     0:00.00 grep ruby
↑プロセスがなくなってたらちゃんと終了してます。

websocketの動きなどは筆者も説明出来るほど理解できてないのですが、みたらなんとなくピンとくるようなシンプルな構成です。サーバー側もクライアント側も同じメソッド名なので分かりやすいですね。

あと、今、これを更にいじってゲームっぽいものも作ってます。 公開できるようにがんばります〜〜。(いつも中途半端な状態で放り出すので期待するべからずw)では(❍ʻ◡ʻ❍)

2011年7月20日水曜日

vimからのHTMLコンバートのテスト

こんどからこれでコードを貼り付けていこう〜

 1 <html>
 2   <head>
 3     <title>Test</title>
 4   </head>
 5   <body>
 6     <div id="wrap">
 7       <div id="header"></div>
 8       <div id="content"></div>
 9       <div id="footer"></div>
10     </div>
11   </body>
12 </html>

2011年7月11日月曜日

FBのフレンドの間でけっこう流行っているNyan catをまとめます。

これは中毒性があります。

どこが面白いのか??

「何度も見てしまう中毒性」です。

 

最近、虚構新聞の存在が話題になっているので改めてどんなサービスなのか自分なりに整理してみる。

Kyoko

http://kyoko-np.net/

 

今日の朝、こんな記事を見ました。

 

「フォロワー300人以下は強制退会 SNS化を徹底」

http://kyoko-np.net/2011071101.html

 

なんとなくうそっぽい題名なので、虚構新聞だろうなぁと思ったらやっぱりそうでした。

ちょっと前に「Twitter有料化」云々の記事で、あまりよくない話題になっていましたが、それに懲りず活動を続けていて感心してます。

 

「Twitter有料化」の時は、僕の周り(Twitterのフォロワーの方)で釣られた方はあまりいなかったです。

一人だけ釣られたっぽい方を発見したんですが、もしかしたらその人は「釣られた振りをして居るだけなのかもしれない。。」と思い、特に突っ込んだりしませんでした。

 

虚構新聞というのは結構、昔からあるWEBページなので慣れている人からすればジョークとして理解できるんですが

そうでない人には少し悪質なサービスに感じてしまうかもしれません。

 

今回は、そんなネガティブな発想の方に「ああ、そういう楽しみ方をすればいいんだ。」と納得頂けるようなエントリを書きたいと思います。

 

 

-虚構新聞の歴史

2004年3月に、滋賀県在住の講師・UKによってすでに運営されていた個人ホームページ「楠木坂コーヒーハウス」上で、UK自身がエイプリル・フール限定のウソのニュースを掲載した事に端を発している。「1本だけ書くつもりがまとめて3~4本書いた」(UK・以下同)[1]そのウソニュースが好評を博し、その後もエイプリル・フールにとどまることなく、月に1~2本のペースで新しいウソニュースを投稿、20本ほどたまったところで「虚構新聞」としてサブページ化する事を思い立って作成されたものである。[1]

wikipediaより引用

 

こんな感じで始まったサービスらしいです。

2004年よりもっと前からあったような。。。。。。

そう思うくらい、コアなネットユーザーとしては馴染みの深いサービスだと思います。

一定期間で必ず更新されて、どっかのサイトにリンクが貼られているので「また、このページかよww?」っていう感動を僕らに常々与えてくれていました。

不思議です。内容はデタラメなのに、WEBコンテンツとしては一級品としての価値があるように思えます。

 

-なぜ面白いか

人それぞれ感想をお持ちだと思うんですが、僕なりになぜ面白いか分析したところ下記のような要素があります。

 

--インターネットの情報を鵜呑みにすることの危険さへの警告-

僕は、虚構新聞のサイトにアクセスするたびにインターネットの情報というものは鵜呑みにできないものだなぁ。。。と考えさせられます。

それは、正しい情報分析能力を開発する助けとなっている気がします。

 

--虚構と謳っているからこそ可能な社会的風刺-

内容をいくつか読めば、実感出来ると思うんですが、結構社会的な風刺が聞いててそれは真実として機能していると思うんですね。

そして、多くの現実の報道の風刺はどれも終わったことに対してしか訴えられませんが、

虚構新聞の場合は未来起こり得ることを先立って風刺しているのがいいですね。

 

--多くの記事が嘘でよかったと思える内容-

20110401 1930275

ちょっと、ドラえもんの画像をWEBから引用させて頂いたんですが、言いたいことわかりますよね?w

 

--ポリシーのある運営

2004年4月からの運営ということは、、、もうすぐ7年目です。

これだけ歴史の深いウェブサイトってなかなかないと思います。

一人だけで運営しているらしい(嘘か真かわからないが)にも関わらず、こうやって根気よく続けているのは本当に尊敬出来ることです。

ポリシーがあるからこそ運営なさっているんだろうなぁ。と思います。

WEBクリエーターとしては尊敬に値するサイトといえるのではないでしょうか。

 

 

他にも色々書くべきところがあると思うんですが、こんなところでエントリを終えます。

ちなみに、虚構新聞の広告って全部偽物だと思ってたんですが、GoogleAdsenseが貼られてますね。

つまり、Googleにちゃんとコンテンツとして認められているわけで。。。

すごいですよね。

 

では。

 

 

2011年7月10日日曜日

こういうTwitterの使い方をしていると頭がだんだん馬鹿になると思うこと。

Twitter bird logo by ipotion

Twitterってはまると抜け出せない中毒性がありますよね。

タバコの中毒性と似てると思います。

筆者はタバコは値上がりした時期にすぐに抜け出すことが出来たんですけど、Twitterからはなかなか抜けだせません。

 

煙草の場合は百害あって一利なしという風によく言われますが、Twitterも似たようなところがあると思います。

というと、語弊がありますので、訂正すると「害もあり利もある」というのが正しい分析だと思います。

 

そこでどういう使い方が害なのか、利なのか、ということを自分なりにまとめて見たいと思い、このエントリーを書くことにしました。

余り文章を書くのが得意ではないので箇条書きでまとめます。

なお、個人的な見解なので異論等あると思いますが、その場合気軽にコメントなどで意見なさってください^___^

また、「サービスの使い方はこうあるべきだ」と主張することはあまりCOOLではないと思いますのでこれを読んで影響受ける必要はないと思います。

使い方は「人それぞれであるべき」というのがベストだと思いますので「ああ、こういう意見もあるんだ〜」って言う風に読んでください。

 

害になると思うこと

  1. 主に情報[つぶやき]を受信目的のためにつかう
  2. ブログの発信を怠ること
  3. 自分の生の感情ばかり発信する。
  4. やたら有名になる

-解説-

まず、「主に情報[つぶやき]を受信目的のためにつかう」についてです。

インターネットにはいろんな意見が拡散してますので、100%正反対と思える内容がさも真実のように、それぞれと主張されています

意見の利き手ばかりになっているとあの情報も正しいし、この情報も正しい、、、と一見、柔軟な思考を持つことができる、知識が広がると錯覚しがちですが実際はただの優柔不断な性格になっている場合が多いです。

そういうふうになると、実際の仕事場などで自分の意見を主張するのが下手くそになってしまうので要注意です。

 

次に、「ブログの発信を怠ること」です。

Twitterでつぶやいてばかりいると、必ずブログの更新頻度が少なくなります。これはTwitterの情報発信コストが低いというメリットが働いていると思うんですが、140文字以内でしか情報発信をしないとだんだん文章構成能力が衰えてくるので注意しなくてはなりません。

日頃から頻繁に文章を書く仕事をしてれば問題ないと思うんですが、そうでない環境の方は本当にに話す内容がバカっぽくなるので、「長文を書かない習慣がつく」というTwitterの特徴は大変危険です。

 

そして、「自分の生の感情ばかり発信する。」です。

例えば、「あち〜〜〜」とか、「カレーうまかった〜〜〜」とか個人の感想系の話題ばっかり呟くことです。

このレベルであれば、否定べきではないとは思います。むしろ、一日に数回(他人が不快に思わない程度の回数)であればささやかなツイートだと思います。

しかし、そういう内容を一日に連続で投稿したり、「死にたい。。。」みたいなネガティブなつぶやきをしている人は要注意です。

まず、アンフォローされる確率が大幅に増えます

そして、こういうことを呟くと、自分だけは何故か満足してしまい(他人はうざいと感じているのに)自己中心的な性格になっていくのです。

極端なことを書いている気がしますが、こういう行為が習慣化すると確実に人格に影響してくると思うので(Twitterは中毒性があるので)、決して過言ではないと思います。

自己中心的というのは決してよいことではないと思います。

 

最後に、「やたら有名になる」です。

インターネットでは単なる一般人がなぜか一昔前のような有名人になることがあります。そういう人は憧れの対象となる一方、妬みの対象ともなりますので、ネガティブなコンタクトを受ける機会が増えます。精神的に強くないと、ひどいトラウマを抱えることになると思います。それがきっかけでインターネット恐怖症になることだってあると思います。

インターネットというのは間違いなく、人々が今後、密接に付き合っていかなくてはいけない、うまく利用していかなくてはいけないツールだと思います。

そのインターネットに対して、トラウマになったりするのって大変残念だと思うんです。

決して、有名になってはいけないというわけではないんですが色々リスクもあることを覚悟したほうがいいと思います。

 

他にも色々あると思いますが、今思い浮かぶのはこんな所です。次に利になることを解説していきます。ほとんどが前者と相反する内容です。

 

利になると思うこと

  1. 情報[つぶやき]を発信目的のために活用する。
  2. ブログをあわせてどんどん書いていくこと
  3. リアルな人間関係を構築するツールとして利用すること

-解説-

最初に「情報[つぶやき]を発信目的のために活用する。」です。

僕は、最初Twitterは「有名人のつぶやき」を聞ける面白いツールという認識を持っていたんですが、それは、あまり大きな利点ではありません。

様々な情報が行き交ってますので、情報を受信する事自体はメリットにならないのです。それらを選別して知識に取り込む必要があります。

(現在はGoogle先生ががんばって良いコンテツのみの抽出に頑張って頂いているが、ネットを使うに当たって必要な心構えだと思う。)

 

どうやって選別するか??という方法ですが。それは自分の考えを発信する習慣をつけることです。

自分の考えを明確にする。これが大事です。

日常会話でも、言葉のキャッチボールをしないと会話になりませんよね?

Twitterも含め、インターネットも日常会話と一緒だと思います。

受けた情報(ボール)は、投げ返さないといけません。

投げ返す対象はネットじゃなくても構いません。家族や友人、職場の人々でも、コンピュータに対して(コーディング)でもOK

でも、同じインターネットに投げ返すと可能性はもっと大きく広がると思います。

そうすることによって初めて、インターネット上での情報を選別する能力がつくと思います。

下手くそな文章でも構わないと思います。(そう言わないと自分が文章を書くのが得意じゃないので)

 

そして、そういう人はネット上でも評価の対象と成り得ます。

それって嬉しいことですよね??僕はそう思います^__^

 

次に、「ブログをあわせてどんどん書いていくこと」です。

そんな頻繁に書く必要はないと思うんですが、ある程度長い文章をブログに書くことは非常に良いことです。

TwitterにはRTやQTという便利な機能があって、さも自分が主張しているように他人の意見を主張できてしまします。(しかも手軽に)

 

これって、便利すぎるのが逆に弊害で、、、言葉に責任の重さがないんですよね。

責任のない言葉ばかり、吐いていると、ろくな大人にはなりません。。。。

重い責任を背負いきってこそ、成長していけると思うんです。

だから、ブログ(ある程度長い文章での情報発信)は非常に重要なことだと思います。

 

最後に「リアルな人間関係を構築するツールとして利用すること」です。

 

どんな人間関係が「リアルな人間関係」なのか定義するのは難しいと思うんですが、それは自分が「リアル」だと思えばそれが「リアル」だと思います。

自分なりの定義でOKです

僕は「自分の利益につながる人間関係」って決めてますが、人それぞれでいいと思います。

(ほんとは実際に会ったり、プロジェクトを進めたりできる人間関係も構築していきたいんですけど今のところそこまでインターネットをうまく利用できていません。)

 

そういうリアルな人間関係を構築するための仕組みとして働いているか??

ってことをたまに考えてあげるといいと思います。

 

 

さて、今日のエントリーはこんなところでおしまいにします。

実は、このエントリを書こうと思ったきっかけは「未成年のTwitter利用について」云々な内容の記事を読んでその所感を書いてみたくなったからです。

自分は小さい子どもはいませんが、子供が大人以上にネットを活用している現代なので、大人はもっとインターネットに対して理解を深めるべきだよなぁ。。。って思ったんです。

そして、正しい使い方を導く必要があるのかもしれない。。。

(ただ子供の方がよっぽど理解が深くて、逆に学ばされるかもしれない。。。)

 

 

 

なんていうようなことを思いつつ、今回のような題目をテーマに文章にしてみました。

ちなみに僕は今まで、馬鹿になるような使い方をしていましたw

油断するとそうなってしまうので、今後そうならないよう、心がけたいと思います^__^

なにか、共感頂ける部分があったりご意見があれば、フィードバック、コメント等頂けると嬉しいです。^__^

2011年7月9日土曜日

Google extentionsが簡単に作れるらしいので早速作ってみた。

参考したサイトはこちら

トラねこblog:簡単なGoogle Chromeの拡張を作ってみる その1(Simple Clock) - livedoor Blog(ブログ)

Google Chrome Extensions Tutorial: Getting Started (Hello, World!)

 

あとGithubで"chrome extentions"で検索して出てきた結果のいくつかのソースも参考にしました。

 

作ったものは。。。こんなんです。

Pic 2011 07 09 21 32 21

よく使うGoogleのサービスへのリンクボタンです。

わりと便利です。(*^^)v

 

ソースはgithubに置きました。(今回はじめてPushしてみました。いまいち使い方が理解できてないままで申し訳ない。。。)

https://github.com/nihitok/myGoogleMenu

 

 

 

今後は、どんなにつまらないプロジェクトでも、”公開する”という行為に慣れていきたいと思いますので

積極的にGithubを使っていきたいと思います。

 

で、作り方をかいつまんで説明すると

  1. まず、プロジェクトの名前のフォルダを作成
  2. そのなかに「manifest.json」という名前のファイルを作成。
  3. manifest.jsonの中に色々な決まりを書いていく(GAEでいうとapp.yamlみたいな存在)
    こんな感じの内容↓
    Pic 2011 07 09 22 17 32
  4. popup.htmlっていうのが今回の場合下記画面のポップアップウインドウメニューの内容が記載されているファイルです。
    Pic 2011 07 09 21 32 21
  5. popup.htmlは普通のHTMLを書く要領で書いていく。
  6. こんな感じに外部jsも読み込みできる。
    Pic 2011 07 09 22 21 14
  7. そのほかhttp://code.google.com/chrome/extensions/getstarted.htmlをみるとブラウザの挙動など色々操作できるメソッドがあるらしい。

 

書いたコードを実際に試すときはchromeをデベロッパーモードにして”パッケージ化されていないファイルを読み込む”っていう項目からプロジェクトのフォルダを読み込むと使えるようになります。

 

"こんなのがChromeで出来たらなぁ〜〜"っていう願望が結構あるので、そういうとき簡単に実現できることがわかった。

面白い遊び道具になりそうです。。。(*^^)v

sora_h君にブロックされたので、反省するためにその顛末をブログを書いてみる。

Rubyの若き開発者として有名なsora_hくん。

僕は、彼のちょっと生意気だけど若い世代のリアルを感じさせるツイートのファンでTwitter上でFollowしていたのですが今日、ブロックされてしまいました。

ブロックされた。。。(´・ω・`)

とてもショックでした。

今回、その顛末をブログに書いて、できればsora_h君に釈明をしたい。。。

そう思って、今キーボードを打ってます。

 

まず、ブロックされた原因は僕にあると思います。思いつく原因としては

 

自分のミーハーな性格(死語?)

馴れ馴れしすぎるコンタクト(Reply)

キモイUTF-8のかおもじ

気遣いの無さ

 

です。

 

具体的な顛末と一緒に説明しましょう。

 

まず、僕は今日(ブロックされた日)、google+が使えるようになったので大変テンションが高くなっていました。

新しいサービスを使うというのはとても楽しいことです。それがGoogleのサービスであればなおさら。

 

僕は"follow中"というサークル(google+)にTwitterでもfollowしている人を設定していこうと思い、

その中の一人としてsora_hくんもfollowしました。

 

そこで気付いたのが、Google+というのは始まったばかりのサービスなので利用者のネットワークがそれほど多く無いことに気付きました。

 

ちょっと分かりにく説明なので例をひとつ上げます。

例えばTwitterであれば、sora_hくんはフォローされているリストが3000以上ととても多い人数なので誰が自分をフォローしたかというということはあまり気にしないことだろうと予想できます。

しかし、Google+は始まったばかりのサービスなので、僕が確認した時のsora_hくんをフォロー中のユーザーは300人弱です。

300人でも大人数だと思いますが、Twitterと比べたら分母は少ないので、

「コンタクトしてみたら反応があるかもしれない。。。」

 

って思ったんですね。

これが僕の一つ目の反省すべき点、「自分のミーハーな性格」です。思えば自分の考えが恥ずかしいったらありゃしない。。。

ミーハーというのは"世の中流行芸能人動静に熱中したり、影響を受けやすかったりするような者に対しての呼称である" wilipediaより です。

今の世の中、インターネットの普及により、一昔前ではまるっきり手の届かなかった大人物にもネットを通してコンタクトが可能になりました。

僕は結構、こういった理由で有名人の方にQTしたりしてます。ほんと男のくせに恥ずかしいです。女みたいですよね><

 

ただ、結構、こういうミーハーな性格の人は多いみたいで、近頃のSNSが流行ったのもこんな僕のように虚栄心が強い庶民のがいるこそ、という説もあるみたいです。

それに、こういった行為事態は悪いことではありません。庶民ならみんなこういう願望をもってしまうものです。

 

僕の場合は、他にも悪かった点があります。

 

とにかく、そんなこんなで、sora_hくんにコンタクトしてみようと思ったのです。

伝えたかったこととしては、日頃、興味深いツイートをフォローさせてもらってるのでその感謝の意です。

実際に送ったのはこんな文章です。

Pic 2011 07 09 10 51 00

送った時はそれほど悪い文章ではないと思っていたのですが、(ただ、もしかしたらあまり印象の良くないアイコンかもしれない。。。)これをツイートしてから、約3~5秒後にsora_hくんはこのようなツイートをしました。

Pic 2011 07 09 11 23 01

あいかわらず、ちょっと刺のある言い方ですけど、そういうオブラートがない無垢なツイートが彼のツイートの魅力なんですよね。

大人には出来ないツイートなので、そこに価値があると思ってます。

 

ツイートの内容を見て自分のことじゃないだろうな。。。。と思いちょっと心配になってお気に入り登録してあります。

で、ちょっと彼のツイートを拝見したら

Pic 2011 07 09 10 41 17

オレンジのところはsora_hくんのフレンドです。(一応隠してあります。)

で、短縮URLは僕のツイートです。

 

どうやらキモいと思われてたみたいです。。。。。

もしかしたら(。◕ ∀ ◕。)←この顔文字がよくなかったのかもしれません。

これが「キモイUTF-8のかおもじ」です。

 

Pic 2011 07 09 11 28 10

続いてこのようなことを。。。。

どうやら、僕は「めんどくせー人種」として捉えられたみたいです。

 

多分、経験してみると共感頂けると思うのですが、「自分を否定される」ということはとても悲しいことです。

しかも、直接的にではなく、間接的に否定されるというのは気持ちのよいものではありません。

 

実際、僕はこれを見たときとても悲しかった。。。

 

でも、sora_hくんのことを責めることは出来ません。

たしかに、僕は”めんどくせー人種”と言われても否定出来ないですから。。。。

 

でそこで改めて思ったんです。

常人なら本当にめんどくさいことは言葉や行動には表さない。

彼は違いました。

めんどくさいにも関わらず、自己の主張を述べてくれているわけです。

 

そこで、やっぱり、sora_hくんはすごい。。。。

と思い、謝りたいと思いました。そこで、こんなReplyをしました。

Pic 2011 07 09 10 50 46

 

なぜ、"w"という記号をつけたのか、、、ちょっと悔やんでます。

これが「馴れ馴れしすぎるコンタクト(Reply)」です。

相手が例え年下でもネチケット大切ですよね。もっと、丁寧かつ誠実な文章を心がけるべきでした。

やわらかいニュアンスを出したかったんですが、、、

これが「気遣いの無さ」です。

そして、すぐこんなツイートが現れました。

Pic 2011 07 09 10 40 47

 

「まじかよ!!!」

って思って、確認したら本当にブロックされてて、その行動の速さにびっくりしました。

ブロックするまで5分もなかったような。。。。

ぼくなんて、本当に無視したい人にはブロックする行為すら面倒でなにもしないんですけど、、、、(何度も届くスパムは別)

彼は違う、、、、行動にすぐ移します。。。。

 

正直、憤りの感情がこみ上げました。

さっきも言いましたけど、”否定される”ということはとても気分の悪くなることですから。。。

その”否定されたことに”対して、大変不愉快な気持になった。。。

 

そして、同時にこの無垢な少年になんとか、釈明したい気持ちになりました。(自分のことを分かってもらいたい)

 

まず、自己分析(このブログのエントリーのこと)をしています。

大切な午前の時間をまるまる欠けて、大人気なくこんな文章を書いてます。

 

とにかく、sora_h君に伝えたいこととしては

●僕に悪気はなかったこと。

●僕は、ほんとにショックを受けたこと。(僕の行動が原因だけど)

●そして、今後もその無垢な内容のツイートのファンでいさせて欲しいこと。

(無垢だと言われて嬉しくないかもしれないが、それは本当に凄いことなんだ。)

●あと、勝手にこのような記事を書いていることをあらかじめ謝ります。

(もし、sora_hくんが読んで嫌に思ったら削除します。)

 

ただ、もし君が僕の誠実さを少しでも感じてくれるなら、それに対しては敬意を抱いてくれると嬉しいです。

ただ、そういうことを毎日誰しもに続けていたら、それは疲れることだと思う。

大人になるとそういうことが分かってきて、無視することがもっと上手くなっていきます。

そういう無視がうまくない(形容詞が変かもしれない)ところが、本当に尊敬すべき所だと思います。

 

sora_hくんの"無視する"という行動があまりにも能動的にだったので、レスポンスを返したい気持ちになった。

僕はsora_hくんの友達でもないし、知人でもない。(今後友達になりたいとおも思ってない。)

こんなことを書いているのは大人気ないし、バカげているとも思う。

嫌なこと(否定されたこと)は、早く忘れるのが一番かもしれない。

でも、sora_hくんを見習って自分の無垢な感情をブログに書いてみようと思った。

 

 

そして、自分と同じような感覚をもった同じ庶民の方も少なからずという気もして。。。

今後のwebコミュニケーションのあり方はどんどん変わっていってそれが分析されて明確になっていくと思うんですけど

それを見出すサンプルのような事例かな〜とも思ったので。

 

とにかく、自分の今後のWEBコミュニケーションの仕方を見直す必要性を非常に感じました。

こういう気持ちにさせてくれたsora_h君に本当に感謝!!!

 

ということで、このエントリはおしまいにします。

つまらない話題だったかもしれません。失礼しました。。。。

 

 

補足:

ふと、sora_hくんがブロックしたことについて改めて考えてみたが、もしかしたら過去に何かあって人一倍警戒感が強いのかもしれない。

それに、自分も小さい時には知らない人から声をかけられたら警戒しなくてはならないと教えられたので、未成年である彼としては当然の行為だったのかもしれない。。

それを理解していれば、うかつにReplyなどするべきではなかったのだろうなぁ。。。。と、Replyする行為自体、するべきことではなかったのかも。。。

その時点から自分のミスだったのかも。。。。

 

 

2011年7月8日金曜日

PythonでTwitterのフォローしてない人だけを全てフォロー解除してやる(´。◕ω◕。)

どんな処理をしているかというと簡単で

http://api.twitter.com/1/friends/ids.json?&screen_name=screen_nameで取得できるフォロー中のリストから

http://api.twitter.com/1/followers/ids.json?&screen_name=screen_nameで取得でいるフォローされているリストのuser_idを削除して

残りのゆーざー==”自分をフォローしてないゆーざー”

となるわけなので

それらをoauthtwitterで継承して作ったメソッドdestroy_users_from_queryで削除してます。

 

oauthtwitterについてはここをみて下さい。

http://code.google.com/p/oauth-python-twitter2/

 

 

#!/usr/bin/env python
# encoding: utf-8

import urllib2
import simplejson
import oauthtwitter


#format ここにTwitterの登録情報いれる
consumer_key = ""
consumer_secret = ""
oauth_token        = ""
oauth_token_secret = ""
screen_name = ""

class Twitter(oauthtwitter.OAuthApi):
    """oauthtwitter.OAuthApiに下記のメソッドをついかする〜"""
    def DestoryUser(self, user_id, options = {}):
        options['user_id'] = user_id
        self.ApiCall("friendships/destroy", "POST", options)

    
def destroy_users_from_query():
    twitter = Twitter(consumer_key, consumer_secret, oauth_token, oauth_token_secret)
    json1 = urllib2.urlopen("http://api.twitter.com/1/friends/ids.json?&screen_name=" + screen_name)
    json2 = urllib2.urlopen("http://api.twitter.com/1/followers/ids.json?&screen_name=" + screen_name)

    following_list = simplejson.load(json1)
    followed_list = simplejson.load(json2)
    for i in followed_list:
        if i in following_list:
            following_list.remove(i)
            pass
    num = 0
    print "prgress in deleting..."
    for i in following_list:
        try:
            twitter.DestoryUser(i)
            num +=1
        except Exception, e:
            print e
    return "Unfollowed:"+str(num)+" users"

def main():
    print "まじでやる?(´・ω・`)\n"+"put y"
    query = raw_input()
    
    if query == "y":
        print destroy_users_from_query()
    else:
        exit()


if __name__ == '__main__':
    main()

2011年7月6日水曜日

PythonでHTMLをパースする方法

 

HTMLParserの使い方がぐぐってもあんまりいい方法が出てこなかったのでブログに書きます。

よく使うりんくの抽出ならびにそのばりゅーを取得するクラスです。もっとうまくかけるはずだけどめんどいのであしからず。。。。w 必要な方はカスタマイズなさってください(。◕ ∀ ◕。)

#!/usr/bin/env python
# encoding: utf-8

from HTMLParser import HTMLParser

class My_parser(HTMLParser):#

    def __init__(self):
        HTMLParser.__init__(self)
        self.is_a  =False
        self.href = None
        self.val = None
        self.data = []

    def handle_starttag(self,tagname,attribute):
        if tagname.lower() == "a":
            #aタグの始まり時にself.is_aをTrueに
            self.is_a = True
            for i in attribute:
                if i[0].lower() == "href":
                    self.href =i[1]
                    
    def handle_endtag(self,tag):
        if tag.lower() == "a":
            #おわりにはself.is_aをFalseに
            self.is_a = False
            
            self.data.append({
                "url":self.href,
                "val":self.val
                })
            self.href = None
            self.val = None
                    
    def handle_data(self,data):
        #atagの中にいる時だけばりゅーを代入
        if self.is_a is True:
            self.val = data

def main():
    html ="""
	<h3>test</h3>
	<div>
		<a href="hello.html">hello</a>
    		<a href="world.html">world</a>
    	</div>
    """
    parser = My_parser()
    parser.feed(html)
    print [item for item in parser.data]
    #[{'url': 'hello.html', 'val': 'hello'}, {'url': 'world.html', 'val': 'world'}]

            
                
if __name__ == '__main__':
    main()

 

2011年6月29日水曜日

[Wordpress]カテゴリをcsvfileから一気に登録する自作関数を作った[PHP]

csvfileの中身は

-----

col1,col2

CategoriSlag,CategoriName

カテゴリのスラッグ,カテゴリの名前

----

的なものにする。

$csv_path = "http://hogehoge.domein/foo.csv";//

function registerCategies($csv_path)
{
	if( $handle = fopen( $csv_path, 'r' ) ){
		$term_id = 3;//1は未分類,2はブログロールの場合。!!それ以外の場合は修正が必要!!
	        while( ( $lines = fgetcsv( $handle ) ) !== FALSE ){
				$name=$lines[1];//カテゴリの名前
				$category_description = $lines[1]."のカテゴリ";//ここはご自由にカスタマイズしてね。
				$slug=$lines[0];//カテゴリのスラッグ
				$term_group=0;//カテゴリのグループ
				
//以下はwpのデータベースへの登録のメソッド
$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES (%d, %s, %s, %d)", $term_id, $name, $slug, $term_group) );
$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id,taxonomy,description) VALUES (%d, %s, %s)", $term_id, "category", $description) );
				$term_id++;
	        }
	}

}

これで出来てるはず(。◕ ∀ ◕。)

2011年6月26日日曜日

GoogleChromeの宣伝のキャラクターは冷静に見るとすっごく変!!!w

GoogleChromeいいですよね。速くて。(。◕ ∀ ◕。)

 

そんなChromeの、Webサーフィン中によく出会う広告について今回は書いていきます。

 

ふと、気づいたんですが かなり変な顔のキャラクターが多いんです。

まず、学生23歳

Pic 2011 06 26 12 54 28

 

多分、女の子だと思います。

一応、胸の割れ目があります。(ちょっとだけ)

 

メガネが四角いです。

きっとおしゃれな人なんだと思います。

 

まつげは下にだけついてます。

 

とにかく変ですw

 

次に、プログラマ28歳です。

Pic 2011 06 26 12 57 38

変な髪型ですね。。

一昔前のオタクファッション??

ボタンを上まで全部止めてるところが几帳面っぽいですよね。

きっとJavascript書くとき全部後ろに;をつけるタイプです。

 

次に研究者32歳

Pic 2011 06 26 12 58 45

白衣を着てるニートって感じですね。

いまどきこんな無精髭の人いるんだろうか?

おまけに目の向いてる方向もなんだか変です。

髪型もなんだかおそ松くんのイヤミみたい。。。

きっと現実にこういう人が「画面の表示、切り替えが早い気がする」って言われても

それは気のせいでは??って思っちゃいますよね。

 

まあ、実際Chromeは速いと思いますけどw

 

次に学生19歳

Pic 2011 06 26 12 58 48

胸が大きいですね。(方っぽだけ)

きっと、あまり本人には聞けないですが、乳がんの手術あとなのかもしれません。

わかいのに可哀相です。。。

"Autopatchwork"のことを説明してますが

なんだか自信なさげな表情です。(まゆげとか)

せっかく良い機能なんだからもっともっと自信をもっていいのに。

 

最後に、会社役員48歳です。

Pic 2011 06 26 12 58 52

顔が全体的に一方に偏ってますよね。

体の向きからして不自然です。。。

一応、役員っぽいヒゲがついてます。

「お気に入り」の同期が出来るのは非常に便利です。

 

そうですね。便利だと思います。

 

でも、そんな顔の部分だけそっぽ向いてる顔で言われても。。。

 

 

 

そんなこんなでGoogleの宣伝のキャラクターは冷静に見ると変です。w

2011年6月23日木曜日

気になること、やりたい事2011-06-23時点

特に意味はない覚え書きです。。。。
  • 顔認証のプログラム組みたいのでopencvについての勉強
  • Voip,p2pについての勉強
  • Blenderについての勉強
  • iTunes connnect でappの審査通過後そのことをブログに書く本日10日目、、、遅すぎる。。ダメなら早くリジェクトしてくれ〜〜><

2011年6月18日土曜日

(一応)Mac歴10年の僕がMacを買ったばかりの人に伝えたいちょっとした使い方

一応、Mac歴10年です。(。◕ ∀ ◕。)〜〜

http://blog.goo.ne.jp/backrow7/e/67994ad8aa70c545beea6713206395c7

上記のブログに書いてあるPowerPC G3が初めてのMacです。

その後、初代iMac(カラフルなやつ)→ちょっとwindowsに浮気→iMacG5(最後のpowerMac)→MacBook→MacBookPro→iMacってな感じです。

そんな僕が、Macにまだ慣れてない人に伝えたいことをつらつらと書いていきます。

 

Macの使えるキーボードショートカット

辞書機能

結構、Macの辞書APPが有能だということを実感して欲しい。マウスなどで文字を選択した状態で ⌘+ctrl+Dと押すと辞書が出てきます。

こんな感じ。

Dictionnary1

Pic 2011 06 18 0 19 44

辞書を引けるのは単語だけなんですが、結構使えます。

 

スクリーンショット

これは多分ご存知かと思うのですが、一応書いときます。

⌘+SHIFT+3で画面全体のスクリーンショット、⌘+SHIFT+4で選択部分のスクリーンショットを取ることが出来ます。

ちなみにこのブログの画像もこれでスクリーンショットを取得してます。

Google検索

文字を選択して⌘+SHIFT+Lでgoogleでの検索結果が出てきます。

ただ、絶対Safariのウインドウが開きます。

辞書機能もそうですがChromeとかだと使えません。(そこがSafariを使う理由になったりする。。。)

ウインドウを格納する

⌘+Mでウインドウをドックに格納出来ます。僕はこれを結構使います。

起動中のAPPの設定画面を開く

⌘+,(コンマ)で起動中のAPPの設定画面を開くことが出来ます。これを使うのに慣れるとわざわざマウスでPreferenceを開いている人を見るとイラつくようになりますw

他にも色々あるのですが、詳しくは「システム環境設定」の「キーボード」のキーボードショートカットタブで確認できるので、最初はひと通り確認することがおすすめです。

 

ちなみにもちろん自分ならではのショートカットキーも設定できるのですが、僕のオススメはスピーチ機能(英語のテキスト読み上げ)を設定することです。

僕の場合⌘+Ctrl+Sで設定して、辞書機能と併用して使いやすいようにしてます。

これで、英文のページを読むのに役立てています。

 

入れておくと便利だと思うAPP

まあ、個人の好みなんですけど、僕好みのAPPを紹介します。

 

Alfred

option+spaceでこんな検索フォームが画面の真ん中にでてきてそれに文字を入れるとMacの中の色々なものを検索できます。

Pic 2011 06 18 0 38 21

基本的に Spotlightと一緒なんだからCtrl+spaceを押せばいいんでしょうけど画面の真ん中にでてくるところとおしゃれなGUIが気に入って使ってます。

APPやファイル、ブックマークなどをこのように起動することによってDock上の必要ないものを整理できます。

僕はDockに極力アイコンを置かない主義で今は必要最低限のものをおいてます。

http://www.alfredapp.com/

 

iStat

こんな感じでMacの状態を右上のバーに表示してくれます。

Pic 2011 06 18 0 43 28

CPU,メモリ,HDD,通信状況、温度とかですね。

有料ですけど結構便利です。

なぜ、これを導入したかというと夏場にあまりにも筐体が熱くなるので温度管理が必要だと思い、常に温度が確認できるAPPを探したところこれを見つけました。

ファンの強さを変更できるように設定することもできるので大変便利です。

http://bjango.com/mac/istatmenus/

ROME

無料で使えるAdobeのAPPです。フォトショップとかイラストレーターとか買いたいけどお金が無い人におすすめです。

僕もあまり使いこなせてないのですが、これでたいがいのことは出来ると思います。

背景の透明化とか、アイコン作りとか、webのバーとかこれを使ってます。

欠点は全部英語のメニューというとこです。

http://rome.adobe.com/

 

TextMate

Macでのコーディング時に便利なテキストエディタです。色々、無料版を使ってみたのですがこれが一番動作も軽いしおしゃれなので使ってます。

dreamweaverも試してみたんですが、あまりにも重いのとUIが気に入らないのと高すぎる価格が気に入らず、僕は否定派ですw

こんな感じの画面です。(GUIはカスタマイズも出来ます。)

Pic 2011 06 18 0 56 51

http://macromates.com/

 

PinPoint

上のような黒い画面のエディタを使っていると、時にマウスカーソルがどこにあるのか見失うことがあります。

そういうときはかなりイラつきます。そんな時に発見したのがこのPinPointというAPPです。

よくYoutubeのプレゼン動画などで使われているマウスカーソルにエフェクトをかけることが出来ます。

下記はYouTubeの紹介動画です。

僕は波紋のエフェクトで色をWhiteに指定して使ってます。

http://itunes.apple.com/jp/app/pinpoint/id408265505?mt=12

 

MAMP

手軽にMac上でAMP環境を整えることができる便利なAPPです。

これでローカル環境でテストすると良いです。(最近はgoogleAppsEngine使っててあんまり使わないけどw)

http://www.mamp.info/en/index.html

 

Cyberduck

オープンソースのFTP等のクライアントです。無料ですが、有料の他のAPPより優れていると思います。

http://cyberduck.ch/

 

The Unarchiver

無料の解凍ソフトです。

Stuffit Expanderっていうソフトもあるんですけど、なんとなくこっちの方を使ってます。(デザインが気にいっているので)

http://wakaba.c3.cx/s/apps/unarchiver.html

 

Reader for Mac

iPhoneなどで人気のRSSリーダーのMac版です。

まだベータ版みたいですが無料でDL出来ます。

http://madeatgloria.com/brewery/silvio/reeder

 


今日はここまで。

また、暇があったらこういう系のこと書いていきます。(。◕ ∀ ◕。)〜〜

2011年6月16日木曜日

Pythonで htmlを逆escape(unescape)する

日本語のちゃんとした言葉がわからなくて申し訳ないのですが

 

'&amp;''&lt;',  '&gt;'

などを

&,<,>に変更する方法です。

 

import xml.sax.saxutils

xml.sax.saxutils.unescape('&amp;,&lt;,&gt;')


これでunescape出来ます。

 

 

 

ちなみに普通のescapeは

import cgi

cgi.escape(&amp;,&lt;,&gt;')

 

で出来ます。

2011年6月15日水曜日

これからiPhoneAPPを作りたいと考えている方に伝えたいこと2/3

前回の続きです。

前回の記事 これからiPhoneAPPを作りたいと考えている方に伝えたいこと1/3

 

前回は、iPhoneAPP制作のためにはHTMLから始まるweb制作のスキル習得が有効ということを書きました。

まあ、iPhoneAPPを作りたい人はそもそもそんな知識は当たり前のようにお持ちかもしれませんが、僕のような初めてプログラミングの勉強を始める方にはおすすめの勉強法です。

 

そんなこんなで、web制作のおおよそのことを浅く学んだあとは、、、、、ついにObjectice-Cに再挑戦!!

 

しかしまだまだ、スキル不足です。

 

現に僕の場合、約2ヶ月前に挑戦しましたが、見事2度目の挫折を味わいましたw

その時点でなんとなく書いてることは理解できるのできたのですが、長すぎるメソッド名を覚える気になれず(まあ、覚える必要はないんですが)とにかく、挫折しましたw

 

そこで、もう一度寄り道をしようと思い、次に学んだのがPythonです。

Python !!!


いいですよね。響きが。

ぼく、Python 好きです。

PHPがMicroSoftだとしたらPythonはMacです。特に日本だと、まだそれほどメジャーな言語ではないみたいなので、僕はそういう存在感を好みます。(*´∀`)

 

Pythonはオブジェクト指向の見本のような言語です。

僕はまだ勉強中なので人に教える余裕なんてないんですけど、オブジェクト指向を学ぶにはPythonがぴったりだと思います。

 

まあ、既に習得したPHPや、Javascriptももちろんオブジェクト指向なんですけど、HTMLと連携して便利すぎるところが、一体どこがオブジェクト指向なのか分かりづらくなってる気がします。僕の場合はそうでした。

 

僕の所感なので、余り自信はないんですけどオブジェクト指向を学ぶにはやはりPythonが一番のオススメだと思います。

Pythonだとたいがいのことはなんでもできるしね(*´∀`)

 

第一回では、本を読まなくてもWEBで十分と書きましたが、図書館にやさしいPythonという本があって、借りるのが無料だったのでそれを借りて勉強しました。

多分僕が住んでいるど田舎の図書館にあったので、読者の近くの図書館にもあると思います。

この本が実に分かりやすかったです。

Pythonの基本的な構文から、組み込みライブラリの使い方のリファレンスも書いてあっておすすめです。

あと、公式の日本語サイトもおすすめです。

http://www.python.jp/doc/release/

チュートリアルってとこから読み始めるとよいです。

 

Pythonには標準でついているライブラリも盛り沢山ですし、それ以外にも有名なライブラリがたくさんあります。

このライブラリを使うという作業を学ぶことが、のちのちiPhoneアプリを作るにあたって非常に役立つ感覚となります。

 

ライブラリ(設計図のようなもの)をダウンロードして、自分の作ったプログラムに組み込む。。。(importする)

その作業がまさにオブジェクト指向なんです。(多分)

 

うまく説明できてない気がするのが非常に残念なんですが、この作業を出来るようになることが非常に大事!!です。

 

 

標準ライブラリを適当に学んだあとは下記のライブラリで色々遊ぶといいと思います

 

BeautifulSoup

http://www.crummy.com/software/BeautifulSoup/

HTMLのDOMを解析できる便利なラッパーです。

(ラッパーの使い方あってます??自信ないので違ったら突っ込んでください><)

これでWebページの好きな画像だけUrlLibでダウンロードしてむふふな画像を集めたり出来ますw

あと、ブログの記事とか広告なしで見れたりするプログラムとか

多分read it later とかも同じようにDOM操作する仕組みなんだなぁと、その時理解が深まったのを覚えています。

 

Google Apps Engine

http://code.google.com/intl/ja/appengine/

言わずとしれたgoogleの無料で使えるナイスなサービスです。

Pythonを学んでこれを使いこなすだけで、非常に自分の勉強に有意義さを感じるのではないでしょうか?

これはリンクの公式マニュアルに全て書いてあります。

本とかは買う必要ないと思います。それだけ公式マニュアルが非常に分かりやすいです。

とりあえずチュートリアルをこなすといいと思います。

(これはiPhoneAPP制作にはあんま関係ないけど,サーバーサイドの動きが欲しいAPPを作る場合にGAEは便利に使えるかも。。。)

 

wxPython

http://www.wxpython.org/

PythonでwindowsでもMacでも動くGUIを作れるナイスなライブラリです。

多分これの使い方を習得するとXcodeでのiPhoneAPPなんて楽勝ですw

wxPythonでGUIAPPを作るのとxcodeでiPhoneAPPを作るのはほとんど一緒です。

 

pygame

http://pygame.org/news.html

Pythonでゲームが作れるナイスなライブラリです。

マリオのようなゲームが作れます。

インベーダーゲームみたいのだと、ちょっと勉強すれば作れます。

ここでRect(図形描写)という概念が学べると思います。

その概念はiPhoneAPPを作る際、非常に役立ちます。

 

詳しい使い方はググルとたくさん出てきます。

本は買う必要ないと思います。Webの情報で十分です。

 

僕はここまで、無計画に勉強していたのでHTML学習スタート時から上記のPythonの使い方習得まで約半年ほどかかりましたが、頑張って計画的に学べば仕事しながらでも1-2ヶ月で十分学べると思います。

 

ここまで、学んだら次にやっとxcodeを使ってiPhoneAPPを作ります。

もう、あとは楽勝です。多分w

一見関係ないと思える他の言語を学ぶことがiPhoneAPP制作の近道!!

その言語とは特にPython!

これが僕の持論ですね。

 

今回の記事でだいたいのことを書いてしまいましたが次回は

xcode関係の話を書いていこうと思います。

(正直ネタ切れですw全2回にすればよかった。)

 

なにか間違ったことを書いていたらツッコミしてくれるとありがたいです。(^_^;)

では。

2011年6月14日火曜日

これからiPhoneAPPを作りたいと考えている方に伝えたいこと1/3

最近やっとiPhoneAPPを作り、ストアに申請を済ませて審査待ちの状態なので、これから勉強したいと考えている方に少しでも力になれば。。。と思いこの記事を書きます。内容は、僕が今に至ったまでの経緯です。

 

僕がはじめてiPhoneAPP制作の勉強のための本を買ったのは約1年前のことです。 今はもう、Amazonで売ってしまいましたがこの2冊の本を買いました。

今手元にないので記憶はおぼろげですが確か、この2冊だったと思います。

選んだ理由としてはまず、Objective-Cを理解するにはC言語の理解が必要ということでやさしくC言語が理解できる本が必要と思ったのでC言語関係の入門書と、Objective-Cの本はその書店で一番フィーリングのよかったものを買いました。

 

まず、C言語入門書を読んでC言語とはなんなのかということを学びました。

ifやswitchなどはわりかし理解できたのですがポインタや構造体のことがうまく理解できなかったのを覚えています。

その時の僕は「早くiPhoneAPP」が作りたい一心でしたのでC言語をあまり理解しないまま「XcodeによるObjective-C入門」を続けて読みことを試みました。

 

しかし。。。。見事撃沈。。。。。(*´∀`)

 

NSLog()という文字出力の組み込み関数だけしか理解できませんでしたw

そもそも,Objectという仕組みの理解の章があったのですが、そこが全く理解できなかったのを覚えています。

オブジェクトとは入れ物です」みたいなことが書いてあっても、ちんぷんかんぷんでした。

 

それで、挫折して半年ほど、プログラミングのことはなにも勉強しませんでした。

なにせプログラミングは本業ではありませんので、普通に仕事に励んでいたわけです。

 

そして、約半年前ほどから、ホームページ制作の勉強をしてみようと思い、HTMLやPHP、javascriptなどを勉強しました。

そこで決めたルールがあります。

冒頭で紹介した書籍ですが、ご覧のとおり決して安い値段ではありません。(プログラミング系の本はだいたいこんな値段ですが)

高い本を買ったのはいいけど、あまり理解が出来なかった痛い経験をしたのでw

「勉強することは全てGoogleで調べる!!!」

という一つのルールを決めました。

 

つまりは本は高いから買わなかったわけですw

そして、結果から伝えますと、だいたいのことはGoogle先生に聞けば答えがかえってきます。(正しくいうと、先駆者の方々のありがたいブログのおかげです。)

つまり、本はそれほど必要ではありません。(あれば、やっぱり便利だけど)

 

何を伝えたいかというと、パソコン一つあれば勉強はいくらでも出来るということですね。

 

さて、そこで役立ったサイトをいくつか紹介ます。

 

w3school

これは神サイトです。内容は英語ですが、web系の言語のほぼすべてはここで学べます。中学生程度の英語力で多分理解できると思います。それほど、完結にシンプルに内容が記載されているのです。僕はここでHTML、JavaScript,XML,CSS,SQL,PHP,DOMの仕組み,AJAX,jQuery,HTML5などを学びました。中には英語で理解の難しい内容もありますが、そういう場合には日本語のサイトがあるか調べてみます。そこでいくつかのサイトを見た後、このw3Schoolを見ると理解が深まります。あと、リファレンスとしても便利なサイトです。

このサイトを見ると、日本語のサイトがいかに分かりづらく解説しているか感じますw

Javascriptは全世界で最もメジャーな言語です(多分)。もちろんiPhoneAppでも使います。(WebViewの操作時とかに使う)

それに最近のはやりではjavascriptでiPhoneAPPを作ることが出来るパッケージもあります。

↓こんなやつ

http://www.appcelerator.com/products/titanium-mobile-application-development/

http://www.phonegap.com/

 

PHP Manual

言わずと知れたPHPの公式HPです。なぜ、PHPがこれほどまでメジャーになったかというと、多分、公式サイトが優れているからだと思います。わからない関数があったらこのサイトですぐ調べることが出来ます。

PHPはiPhoneAPPを作るに当たっては、特に必要のない知識なのですが、XMLの処理や、RESTなAPIを処理するノウハウを学びやすいのはこの言語かなぁと思います。なくてもいいけど、メジャーな言語だし学んでも損はないです。

あの、FaceBookのザッツバーグもPHPでfaceBookを作ったわけですし。やはりPHPは偉大だと思います。。。僕は今は使ってないけどw

 

短期間でプログラミング言語を覚えるのに役に立ちそうなサイトまとめ

これは2chのスレッドのまとめ??だと思うのですが、サクっと学ぶにあたっても有効だし、復習したりするのにも有効なまとめです。

 

ほかにも色々なサイトをみて勉強した記憶があるのですが、あとは忘れました。

ここでご理解頂きたいのは、iPhoneAPPを作るには、既存のメジャーな言語を先に学ぶのが(僕にとって)非常に有効だったということです。

Webでよく使われているXML(もしくはJSON)は作りたいAPPの幅を広げるにあたって必要だと思うし、やっぱ、HTMLやJavascriptは必須です。そして、今後はそれらをより使いやすいようにまとめたHTML5(僕なりのHTMLの解釈)だけでAPPを作れるようになってきそうだし。(すでにそうなってる?)

 

iPhoneAPPを作ろうと思うならまず、HTMLから学ぶのが近道だと思うのです。

HTML→javascript→CSS→SQLのデータベースの理解→PHP(なくてもOK)→AJAXの仕組み(なくてもOK)→JSONとXMLの理解という感じでしょうか。。。

 

次回はその後に僕が学んだことを書いていきます。

 

記事の内容に間違いがあったり、わからないことがあったらコメントくださ〜〜い(´。◕ω◕。)

では。

2011年5月30日月曜日

MacOSのアイコンは通常気づかないところが凝っている!!

不意に拡大してみたら、このように紙質を再現するためにノイズのような柄があることに気付きましたw

 

Macのアイコンって細かいところ(見えないところ)にこだわっていてCoolですよねw

Pic 2011 05 30 13 29 24

 

というわけで他にも拡大してみました。

ほら、拡大しないと読めない文字があります。

Internal Hard Disk って書いてありますww

だから、なんだ?って感じですけどね。

Pic 2011 05 30 13 34 32

 

アドレスブックも拡大してみると結構高級感があります。

Pic 2011 05 30 13 36 15

 

ちょっとドアが大きすぎる家。。。w

Pic 2011 05 30 13 39 33

 

ほかにも色々あるんですけど。

今日はここまでで。

MT4でinvalid integer number...というよなエラーが出たときの原因

こんなエラーが出たときはもしかすると僕と同じように列挙型のstringをパラメータに設定しているのかもしれません。

invalid integer number as parameter 2 for Indicator call function

 

 

誤:

   string timeFrame1 = "PERIOD_H1";
  double bandH1UpperCurrent2=iBands(NULL,timeFrame1,20,2,0,PRICE_HIGH,MODE_UPPER,0);
   double bandH1UpperPrevious2=iBands(NULL,timeFrame1,20,2,0,PRICE_HIGH,MODE_UPPER,1);
   double bandH1LowerCurrent2=iBands(NULL,timeFrame1,20,2,0,PRICE_LOW,MODE_LOWER,0); 
   double bandH1LowerPrevious2=iBands(NULL,timeFrame1,20,2,0,PRICE_LOW,MODE_LOWER,1);

正:

   int timeFrame1 = PERIOD_H1;
  double bandH1UpperCurrent2=iBands(NULL,timeFrame1,20,2,0,PRICE_HIGH,MODE_UPPER,0);
   double bandH1UpperPrevious2=iBands(NULL,timeFrame1,20,2,0,PRICE_HIGH,MODE_UPPER,1);
   double bandH1LowerCurrent2=iBands(NULL,timeFrame1,20,2,0,PRICE_LOW,MODE_LOWER,0); 
   double bandH1LowerPrevious2=iBands(NULL,timeFrame1,20,2,0,PRICE_LOW,MODE_LOWER,1);

はまった人の確認用に投稿しました。(´。◕ω◕。)

2011年5月15日日曜日

localizationの際のコマンド

このページを参考した
http://d.hatena.ne.jp/chaoruko/20110416/1302967225
genstrings -a $(find . -name "*.m")

iPhone appのアイコンの規定

PNG形式 デフォルトのファイル名は「Icon.png」(「Info.plist」ファイルで変更可) アイコンサイズは57px×57px(iPadは、72px×72px、iPhone 4は、114px×114px) 角の丸みと光沢のエフェクトはシステムが自動的に付加(Info.plistファイルで変更可) アプリケーションのトップディレクトリに配置

2011年5月14日土曜日

xcodeで Code Sign error ~~~というようなエラーが出たときの対策

こんなエラー内容でずいぶんハマってました。。。 Code Sign error: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain Googleで検索したら、認証鍵の設定を変えてみて。。。と書いてあったので試したけどエラーは消えず。。。それも当然、iPhoneシュミレータでのデバッグではなく実機でのデバッグをする!というような設定だったため。。。 同じように困っている人がいた場合は下記の動画を御覧ください。 見たらわかります。

2011年5月13日金曜日

objective-Cで配列や辞書のループをする。高速列挙も使ってみる

高速列挙はPythonのように簡単だ!ლ(・ิω・ิლ)
int main (int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    
    //for分を使って配列を参照
    NSArray *arr =[NSArray arrayWithObjects:@"aaa",@"bbb",@"ccc",@"ddd",@"eee",@"fff", nil];
    for(int i=0; i<[arr count]; i++){
        NSLog(@"index: %d, value:%@",i,[arr objectAtIndex:i]);
    }
    
    NSLog(@"----------------");
    
    //for分を使って辞書を参照
    NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:
                         @"1",@"a",
                         @"2",@"b",
                         @"3",@"c",
                         @"4",@"d",
                         @"5",@"e",
                         @"6",@"f",
                         @"7",@"g"
                         , nil];
    NSArray *keys = [dict allKeys];
    for(int i=0; i<[keys count]; i++){
        NSLog(@"key:%@ value:%@\n",
              [keys objectAtIndex:i],
              [dict objectForKey:[keys objectAtIndex:i]]);
    }

    NSLog(@"----------------");

    //NSEnumeratorを使う
    //arrayをループ
    NSEnumerator *enumerator =[arr objectEnumerator];
    id obj;
    while(obj =[enumerator nextObject]){
        NSLog(@"value:%@",obj);
    }

    NSLog(@"------dictをループ----------");

    //辞書の値の列挙
    NSEnumerator *enumerator2 =[dict objectEnumerator];
    id obj1;
    while(obj1 =[enumerator2 nextObject]){
        NSLog(@"value:%@",obj1);    
    }
    //辞書のキーの列挙
    NSEnumerator *kEnumerator =[dict keyEnumerator];
    id key;
    while(key =[kEnumerator nextObject]){
        NSLog(@"key:%@",key);            
    }
    
    //高速列挙
    NSLog(@"-----高速列挙-----------");
    
    //NSArrayをループ
    NSLog(@"NSArrayをループ");
    for(id obj2 in arr){
        NSLog(@"%@",obj2);
    }
    //NSdictをループ
    NSLog(@"NSdictをループ");    
    for(id key in dict){
        NSLog(@"key:%@ value:%@",key,[dict objectForKey:key]);        
    }
    //NSEnumeratorをループ
    NSLog(@"NSEnumeratorをループ");
    NSEnumerator *enumerator3 = [dict objectEnumerator];
    for(id obj3 in enumerator3){
        NSLog(@"%@",obj3);    
    }
    
    [pool drain];
    return 0;
}

NSDictionaryの使い方--Objective-C--

int main (int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    //NSDictionaryを作成
    //値、キー,値、キー,・・・・・の順で指定していく
    NSDictionary *dict1 =[NSDictionary dictionaryWithObjectsAndKeys:
                          @"John",@"name",
                          [NSNumber numberWithInt:8],@"age",
                          @"blue",@"color"
                          ,nil];
    NSLog(@"%@",dict1);// age = 8 color = blue name =Jhon
    
    //値とキーをそれぞれ配列で指定して作成する
    NSArray *keys =[NSArray arrayWithObjects:@"name",@"age",@"color", nil];
    NSArray *vals =[NSArray arrayWithObjects:@"Paul",@"7",@"brown", nil];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:vals forKeys:keys];
    NSLog(@"%@",dict2);// age = 7 color = brown name =Paul

    //キーを指定して要素を取得
    id obj1 =[dict1 objectForKey:@"name"];
    NSLog(@"%@",obj1);//John
    
    //値とキーをそれぞれ配列として取得
    NSArray *kArr =[dict1 allKeys];
    NSArray *vArr =[dict1 allValues];
    NSLog(@"%@and%@",kArr,vArr);//(name,age,color) and (John,8,blue)
    
    //辞書の要素数を取得
    NSUInteger dictCount =[dict1 count];
    NSLog(@"%d",dictCount);//3
    
    //辞書の比較
    BOOL isDictEquals =[dict1 isEqualToDictionary:dict2];
    NSLog(@"%d",isDictEquals);//0(False)
    
    [pool drain];
    return 0;
}

NSMutableArrayの使い方--objective-C--

int main (int argc, const char * argv[])
{
    
    NSAutoreleasePool *pool =[[NSAutoreleasePool alloc]init];
    
    //NSMutableArrayは自由に要素を追加、置換、削除できるクラスです。
    
    //空の可変配列を作成
    NSMutableArray *mArr = [NSMutableArray array];
    
    NSLog(@"%@",mArr);//()空白が出力
    
    //固定の配列をコピーして、可変する配列を作成
    NSArray *arr = [NSArray arrayWithObjects:@"aaa",@"bbb",@"ccc",nil];
    NSMutableArray *mArr2 =[arr mutableCopy];
    
    NSLog(@"%@",mArr2);//aaa,bbb,ccc
    
    //要素の追加、挿入、置換
    [mArr addObject:@"ABC"];//追加
    [mArr insertObject:@"DEF" atIndex:1];//挿入
    NSLog(@"%@",mArr);//ABC,DEF
    [mArr replaceObjectAtIndex:1 withObject:@"XYZ"];//置換
    NSLog(@"%@",mArr);//ABC,XYZ
    [mArr addObjectsFromArray:arr];//別の配列からコピーして追加
    NSLog(@"%@",mArr);//ABC,XYZ,aaa,bbb,ccc
    NSLog(@"%@",arr);//aaa,bbb,ccc(前の値はそのまま)
    
    //要素の削除
    //インデックスを指定して削除
    [mArr removeObjectAtIndex:3];//bbbを削除
    NSLog(@"%@",mArr);//ABC,XYZ,aaa,ccc
    
    //要素を指定して削除
    [mArr removeObject:@"aaa"];//aaaの要素を削除
    NSLog(@"%@",mArr);//ABC,XYZ,ccc
    
    //複数の要素を指定して、それらを削除
    [mArr removeObjectsInArray:[NSArray arrayWithObjects:@"ABC",@"XYZ", nil]];
    NSLog(@"%@",mArr);//ccc
    
    //一旦追加
    [mArr addObjectsFromArray:[NSArray arrayWithObjects:@"abc",@"def",@"ghi", nil]];
    NSLog(@"%@",mArr);///ccc,abc,def,ghi
    
    //範囲を指定して複数を削除
    [mArr removeObjectsInRange:NSMakeRange(1, 2)];
    NSLog(@"%@",mArr);//ccc,ghi
    
    //最後の要素を削除
    [mArr removeLastObject];
    NSLog(@"%@",mArr);//ccc
    
    
    [pool drain];
    return 0;
}

NSArrayの使い方

int main (int argc, const char * argv[])
{
    
    NSAutoreleasePool *pool =[[NSAutoreleasePool alloc]init];
    
    //配列の作成
    NSArray *array = [NSArray arrayWithObjects:@"abc",@"def",@"ghi",@"jkl",nil];
    NSLog(@"arra: %@",array);//arrayの要素が順番に出力
    
    //配列の要素数を取得
    int arrCount = [array count];
    NSLog(@"arrCount:%d",arrCount);//4
    
    
    //配列の要素を取り出す
    id obj01 = [array objectAtIndex:2];
    id obj02 = [array lastObject];
    NSArray *array2 =[array subarrayWithRange:NSMakeRange(1, 2)];
    
    NSLog(@"obj01: %@",obj01);//obj01: ghi
    NSLog(@"obj02: %@",obj02);//obj02: jkl
    NSLog(@"array2: %@",array2);//def,ghi
    
    //要素のインデックスを取得
    NSString *val = @"pqr";//array["pqr"]を取り出す
    NSUInteger objectIndex = [array indexOfObject:(id)val];
    if(objectIndex == NSNotFound){//ない場合はNSNotFoundという返り値になる
        NSLog(@"ないよ!");//これが実行される
    }else{
        NSLog(@"あるよ!");
    }
    
    //ある要素が含まれているか確認
    NSString *val2 =@"abc"; 
    BOOL isObjectContain =[array containsObject:val2];
    if (isObjectContain){
        NSLog(@"True");//これが実行される
    }else{
        NSLog(@"false");
    }
        
    
    //配列の比較
    NSArray *array3 = [NSArray arrayWithObjects:@"abc",@"def",@"ghi",@"jkl", nil];
    BOOL isArrayEquals =[array isEqualToArray:array3];
    
    if(isArrayEquals){
        NSLog(@"いっしょだよ!");
    }else{
        NSLog(@"違うよ!");
    }

    
    [pool drain];
    return 0;
}


2011年5月11日水曜日

base64の使い方 --python--

'''base64の使い方'''

part = base64.b64encode('pass')

print(part)#cGFzcw==
print(base64.b64decode(part)) #pass

'''URLのパラメータとして使う場合は下記'''
part = base64.urlsafe_b64encode('pass')

print(part)#cGFzcw==
print(base64.urlsafe_b64decode(part))#cGFzcw==

md5,shaの使い方 --python--

'''md5の使い方'''

m = md5.new('pass-word')

print (m) #
print (m.hexdigest()) #ed0eacb4e34e50c1c53f9698600d4b86

import urllib

'''多分クオートしないとエラーになる...'''
try:
	print m.digest()
except UnicodeDecodeError:
	print u'UnicodeDecodeErrorなのだ'


'''URLのパラメータとして使用する場合はクオートする必要がある'''
quoted =''.join([urllib.quote_plus(x) for x in m.digest()])

print quoted #%ED%0E%AC%B4%E3NP%C1%C5%3F%96%98%60%0DK%86
'''shaの使い方'''

m = sha.new('pass-word')

print (m) #
print (m.hexdigest()) #ed0eacb4e34e50c1c53f9698600d4b86

import urllib

'''多分クオートしないとエラーになる...'''
try:
	print m.digest()
except UnicodeDecodeError:
	print u'UnicodeDecodeErrorなのだ'


'''URLのパラメータとして使用する場合はクオートする必要がある'''
quoted =''.join([urllib.quote_plus(x) for x in m.digest()])

print quoted #%ED%0E%AC%B4%E3NP%C1%C5%3F%96%98%60%0DK%86

pickleの使い方--python--

'''pickleの使い方'''

'適当なオブジェクトを用意する'
o = [1,2,3,(1,2,3),{1,2,3,4,(1,2)}]

print o #[1, 2, 3, (1, 2, 3), set([(1, 2), 1, 2, 3, 4])]


"""書き込みモードで開く"""
opened = open('test.dump','w')

'''pickle化'''
pickle.dump(o,opened)		
'''同ディレクトリにtest.dumpとして保存されている'''

opened.close()

'''dumpファイルを開く'''
opened2 = open('test.dump')

o2 = pickle.load(opened2) 

print o2 #[1, 2, 3, (1, 2, 3), set([(1, 2), 1, 2, 3, 4])]
'''ちゃんとオブジェクトとして再現できる'''
print o2[3][2] #3

o2.append({'hoge':'foo'})

print o2 #[1, 2, 3, (1, 2, 3), set([(1, 2), 1, 2, 3, 4]), {'hoge': 'foo'}]
opened2.close()

opened3 = open('test.dump','w')
	
'再度保存するときはdump'
pickle.dump(o2,opened3)

shelveの使い方--python--

import shelve


def main():
	
	"""shelveの使い方"""
	
	'''shelvetestという名前のファイルを保存'''
	d = shelve.open("shelvetest",writeback=True)
	
	'辞書と同じ使い方でデーターを挿入'
	d.update({"one":"1","tow":"2"})
	
	print(d) #{'tow': '2', 'one': '1'}
	
	'''closeした時点でファイルとして保存される'''
	d.close()
	print "-"*30
	
	'ファイル名を指定して開く'
	d2 = shelve.open("shelvetest")
	
	print(d2) #{'tow': '2', 'one': '1'}

	d2.close()
	
if __name__ == '__main__':
	main()


xcode4でpythonを使う

参考したURLが英語だったので日本語に訳す。

  1. Xcode4を開く
  2. メニューバー→File→New→New Projectと選ぶ
  3. Mac OSXの範囲にあるOtherを選ぶ
  4. External Build Systemを選んでNext
  5. 任意のProduct nameを入力する
  6. Build Toolに/usr/local/bin/python3、/usr/bin/python等とpythonの位置を指定してNext
  7. 任意の保存場所を指定してCreate

 

 

  1. メニューバー→File→New→New Fileと選ぶ
  2. Mac OSXの範囲にあるOtherを選ぶ
  3. Emptyを選んでNext
  4. 任意の保存するディレクトリをえらんで.pyのpython形式でファイル名を指定してSave

 

  1. メニューバー→Product→Edit Schemeと選ぶ
  2. 左側にあるRunという項目をクリックする
  3. infoタブにあるExecutableをOtherに変更
  4. ⇧⌘Gと押すと隠しフォルダを指定して移動できるのでExternal Build Systemとして指定したファイルを指定(この方法は今回初めて知った!!便利>o<)
  5. Debuggerの項目はNoneに変更
  6. Base Expansions Onの項目に作成したproduct nameを指定
  7. Arguments Passed On Launchの項目の下にある+ボタンをクリックして・・・

ここからわからん。。。。w

一度保留して、hello worldを試してみたけど、xcodeがすぐ落ちる。。。

だれか、教えて〜〜〜><

  1. Click the "+" icon under "Arguments Passed On Launch". You may have to expand that section by clicking on the triangle pointing to the right.
  2. Type in "$(SOURCE_ROOT)/" without the quotes and then the name of the Python file you want to test. Remember, the Python program must be in the project folder. Otherwise, you will have to type out the full path here.
  3. Click "OK".
  4. Start coding.

原文:http://stackoverflow.com/questions/5276967/python-in-xcode-4

2011年5月2日月曜日

Python覚え書き

file = open('index.html') html = file.read()

↓短縮

html = open("index.html").read()

2011年4月26日火曜日

画像とかのクリックをかんたんに無効にするCSS

簡単な方法なのに使いたい時には忘れてしまい、なおかつ検索してもなかなか出てこないのでメモしてみる。 pointer-events: none; これでクリック無効出来ます。

2011年4月25日月曜日

google.appengine.api メモ

覚えられないのでブログでメモしてみる

from google.appengine.api import users

でインポートする。

user = users.get_current_user()

でインスタンスを作って。。。

インスタンスメソッド

user.user_id()

Googleにおけるユーザー独自のIDを取得するメソッド

user.nickname()

ニックネーム(@の前を取得)を取得するメソッド

user.email()

ユーザーのemailアドレスを返すメソッド

create_login_url(dest_url)

訪問したユーザーに Google アカウントでログインするように促し、それから dest_url で指定した URL にリダイレクトします。この URL はリンク、ボタン、リダイレクトに適しています。

dest_url は、URL のフルパスとユーザー アプリケーションのドメインの相対パスのどちらでも構いません。

create_logout_url(dest_url)

訪問したユーザーをログアウトさせ、それから dest_url で指定した URL にリダイレクトします。この URL はリンク、ボタン、リダイレクトに適しています。

dest_url は、URL のフルパスとユーザー アプリケーションのドメインの相対パスのどちらでも構いません。

get_current_user()

現在のユーザー(処理中の要求を行ったユーザー)がログインしている場合は、そのユーザーの User オブジェクトを返し、そのユーザーがログインしていない場合は None を返します。

is_current_user_admin()

現在のユーザーがログインしており、このアプリケーションの管理者として現在登録されていれば、True を返します。

関数

nickname()

ユーザーの「ニックネーム」(表示名)を返します。ニックネームは、そのユーザーのメール アドレスがアプリケーションと同じドメインにある場合はそのユーザーのメール アドレスの「名前」部分、それ以外の場合はそのユーザーのメール アドレスそのものになります。

email()

ユーザーのメール アドレスを返します。アプリケーションが表示名に nickname を使用するようにしてください。

user_id()

ユーザーの一意で永続的な ID、str を返します。この ID は、ユーザーが自分のメール アドレスを変更した場合でも、常に同一です。

参考したURL

http://code.google.com/intl/ja/appengine/docs/python/users/userclass.html

http://code.google.com/intl/ja/appengine/docs/python/users/functions.html

2011年4月23日土曜日

pygameでのflag = not flagの使い方になるほどと思った。


flag = not flag

if flag:
	print "Trueの時の動作"
elif:
	print "Falseの時の動作"
呼び出される度にTrueとFalseが入れ替わるので便利です。

2011年4月14日木曜日

自作APIを作っています。

サイトを作るときに楽が出来るように自作APIを増産していってます。 JSONやxml形式のFEEDの下地があるだけでサイト制作はずいぶん楽になると思うのです。 調べてみたらDashcodeでiphoneサイトも楽に作れそうだし。 まあ、それはまた別の機会にでも。。。

何が出来るのか

DBに登録されているblogコンテンツを下記のフォーマットですぐに引き出せます。
  • json
  • xml
  • atom
  • html

URL

nihito.geo.jp/api/blog/show/(user名).(形式)

(user名)にはDBに登録されているscreen_nameを入れて (形式)にはフォーマットを指定します。

例:
  • http://nihito.geo.jp/api/blog/show/nihitok.json
  • http://nihito.geo.jp/api/blog/show/username.xml
  • http://nihito.geo.jp/api/blog/show/hoge.atom
  • http://nihito.geo.jp/api/blog/show/foo.html

パラメータ

  • limit:記事数を設定できます
  • page:ページ数を設定出来ます。
  • categori:カテゴリを設定できます(まだ使えない。)
  • id:記事IDを設定できます(まだ使えない。)
例:
  • http://nihito.geo.jp/api/blog/show/nihitok.json?page=3&limit=3
showというのはメソッド名を設定してます。 他にもregisterとかpostとかも作っているところなので できたらまた公開します。 これでこんどブログサイトを作るときには楽になりそうです(*´ω`*)

2011年4月7日木曜日

BLOG開設

さあ、ブログを作ってみました。
いつもブログをさあ書こう!!と思ってもなかなか続かずに挫折してばっかりでしたが、こんどこそしっかりしたブログを書こうと決意して自分でCMSをつくろうかwordPressにしようか色々迷った挙句、結局Bloggerを選んで開設した次第です。

Bloggerが一番Googleの検索結果に出てきやすい感じがするし、テンプレートもシンプルで自分好みだったので。。。

ブログを開設した理由


正直にいうと僕は文章を書くのが余り得意ではありません。むしろ苦手です。

それに、Twiiterもやってるし、facebookもやっています。情報発信はTwiiterで事足りるし、WEBでのコミュニケーションもFBで満足しています。今まではブログの利用価値というのを今まではあまり見いだせずにいました。

しかし、そこそこ長めの文章に書いて発信したい!とふと思うことが最近増えてきたのでやっぱりブログの一つくらい持っておかないといけないと思い開設することにしました。

それに、日頃から長文を書かないと、書く機会がないと頭が馬鹿になりますからね。w

Twitterをやる前はブログも結構やってたんですけど、Twitterばかりやるようになってからは頭が馬鹿になった気がしますw

ブログ友も作ってみたい!

インターネットを始めたばかりの初々しい気持ちを取り戻して日本人のWEB友を作っていきたいとも思います。
FBを使ってからはWEB友=外国人みたいになってしまったので、やはり初心に帰ってインターネットの楽しさを取り戻したい。。。

こういう目的もあります。

なんにせよ。有意義な行為となるようにしたいと思いますので、このブログを読んでいる人、気軽に絡んでくださいね〜〜。WEBクリエーター系の人たちと仲良くなりたいです〜〜。

そんなこんなですがよろしくお願い致しますm(_ _)m