スキップしてメイン コンテンツに移動

投稿

C++: STL algorithmのlower_boundとupper_boundの使い方

C++ STLのalgorithmに入っているlower_boundとupper_boundが間違えやすいのでメモ。 vector<int> で定義されたコンテナ v の要素のうち、A以上、B以下の要素を求める場合。 vector<int>::iterator a = lower_bound(v.begin(), v.end(), A); vector<int>::iterator b = upper_bound(v.begin(), v.end(), B); if (a != v.end() && b != v.begin() && *a <= *(b - 1)) cout << "[" << *a << ", " << *(b - 1) << "]" << endl; else cout << "no element" << endl; *a が最小の要素、 *(b-1) が最大の要素になる。 A以上、B 未満 の場合。 vector<int>::iterator a = lower_bound(v.begin(), v.end(), A); vector<int>::iterator b = lower_bound (v.begin(), v.end(), B); if (a != v.end() && b != v.begin() && *a <= *(b - 1)) cout << "[" << *a << ", " << *(b - 1) << "]" << endl; else cout << "no element" << endl; 因みに、lower_boundとupper_boundに渡すコンテナはソートされている必要がある。...

JavaScriptで素数を計算して動的に表示する

JavaScriptを使って素数を計算して、それを動的に表示してみた。今更という感じもするけど、10行そこそこでこのような動的な表示ができるというのは、とても便利だと思う。とは言え、普段はあまりJavaScriptを使ったHTMLは書いてないな。 までの素数 テキストボックスに数字を入力すると、その数までの素数を計算して表示する。最大入力桁を5桁にしたので、99,999までの素数を求めることができる。括弧内の数値は求めた素数の数を示す。 複数のブラウザ(Google Chrome, Firefox, IE8, Safari4)で確認してみたけど、最近はどのブラウザもJavaScriptが速い。今後、ますますJavaScript、特にAjaxなどは要の技術になっていくのだろうな。 以下にソースを示す。 <script type="text/javascript"><!-- function calcPrimes(data) { var primes = []; if (data.value >= 2) primes.push(2); for (i = 3; i <= data.value; i += 2) { for (j = 0; i > primes[j] * primes[j] && i % primes[j] != 0; j++); if (i < primes[j] * primes[j]) primes.push(i); } document.getElementById("primes").innerHTML = primes.length ? " (" + primes.length + "): " + primes.join(", ") : ""; } // --></script> <form><input type="text" size="5" maxlength="5" onk...

結局Pythonを使ってコマンドラインで動作するTwitterクライアントを作ってしまった

Twitterのアカウントを取ってから既に1年半になるが、活発に使っているとは言い難い。その原因の一つとして Twitterのクライアント がある。どうにも自分が利用するのにピッタリだと思うクライアントが見つからなかったのだ。そこで結局、自分の好みに合わせてコマンドライン上で動作するシンプルなTwitterクライアントをPythonで作ってしまった。しかも、ワンライナー(1行プログラム)。 最初の頃はいくつかのクライアントを使ってみたのだが、PCでの作業はシェルで行うことが多いので別のウィンドウを開きたくなかったり、Windows、Unix、MacなどのOSが変わっても同じクライアントを使いたかったり、GUIじゃなくてCUIで操作したかったり、それほど使い込むつもりがないので極力シンプルでコンパクトになっていて欲しかったり、そもそもクライアントをインストールしたくなかったりと、かなり条件を厳しく求めていたら使えるクライアントがなくなってしまい、結局、公式サイトもしくは 自分で作成した掲示板 からたまにつぶやくだけになってしまった(ただし、 Twitterfeed は利用している)。 しかし、最近になってタイムラインをよく眺めるようになり、これが結構面白いと気がついた。自分と違う考え方に触れるのは楽しい。そして、自分ももう少しつぶやいてみようかと思ったのだが、公式サイトや掲示板からのポストはいちいちブラウザを開かなくてはならず手軽だとは言い難かった。 そこで、先日、 PythonのワンライナーでTwitterを使える ようにしたこともあり、もう少し改良してそれをクライアントにすることにした。Pythonスクリプトなら、Pythonが入っていればどのOSでも動作するし、使い方はどこでも一緒で、コマンドラインでそのまま使え、タイムラインをgrepなどで簡単に選択表示できる。それに、たった1行のソースコードなので簡単に中身を確認でき、パスワード漏洩やキーロガーなどを心配しなくてもいい。 tw.py でタイムラインを取得することができ、 tw.py つぶやき tw.py つぶやき http://handasse.blogspot.com/ ブログのURLです。 tw.py "つぶやき&つぶやき" tw.py "つぶ...

PythonのワンライナーでTwitterを使う

Twitterでつぶやいたり、タイムラインを取得したりするPythonのワンライナー(1行プログラム)を作ってみた。取り敢えずWindowsで動作は確認した。Pythonさえ入っていればどこでも動くと思う。シェルやcronに組み込んだり、ウェブアプリや自作プログラムで利用したり、Python以外に必要なものがないから手軽に使えるんじゃないかな。ただ、ユーザ名とパスワードは生テキストなのでその辺は気をつけるべきかも。 まず、Twitterでつぶやくワンライナー。 python -c "import urllib,urllib2;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com',' username ',' password ');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));urllib2.urlopen('http://twitter.com/statuses/update.xml',urllib.urlencode({'status':' つぶやき '.decode('cp932').encode('utf-8')}))" 次に、タイムライン取得。 simplejson を使っている。 python -c "import sys,urllib,urllib2,xml.sax.saxutils,simplejson;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com',' username ',' password ');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));sys.stdout.write('...

Windows PowerShellを便利に使うための10のミニテクニック

Microsoftが提供していてWindows 7では標準搭載になるWindows PowerShellがもっと広まって欲しいこともあって、 CodeZine の Windowsのコマンドプロンプトを便利に使うための10のミニテクニック のPowerShell版を書いてみた。 まず、 Windows PowerShell 2.0 CTP3 をダウンロードして、インストールする。さらに便利に使うために PowerShell Community Extensions から PSCX 1.2 をダウンロード・インストールする。 さて、これで準備が整った。因みに以下のテクニックは、Windows XP、Vista、Windows 7のどのOSでも使えると思う(ただし、確認したのはXPのみ)。 コマンドプロンプトからエクスプローラに移動する 以下のように起動するだけ。 ii . エクスプローラからコマンドプロンプトに移動する これは標準では難しいと思う。自分はエクスプローラの使い勝手には非常に不満を持っているので、ずいぶん前からWindowsでは FileVisor を使っている。FileVisorであれば以下のコマンドをホットキーに登録しておくことで、現在のディレクトリをカレントディレクトリとして一発でPowerShellを開くことができる。 C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoExit -Command Set-Location $P カレントディレクトリを記憶し、あとで戻ってくる これはそのまま、 pushd . と popd が使える。 2つのディレクトリを行ったり来たりする これもほとんど一緒。 doskey /exename=powershell.exe d1=cd $pwd 一時的にネットワークドライブを割り当てる必要はない PowerShellではcdでそのままネットワークをまたげるので必要ないと思う。 cd \\computer1\project1\program1 処理結果をクリップボードにコピーする ocb (Out-Clipboard)を使う。 dir | ocb tree | ocb 因み...

Google App Engineを利用してmixiアプリを作成する

最近、mixiアプリの正式版がリリースされたらしい。以前、オープンベータが始まったときにちょっと興味を抱いたのだが、そのまま忘れてしまっていた。しかし、この正式版リリースでまた興味が湧き、Google App Engine (GAE)と絡めてちょっといじってみたので、GAEを利用したmixiアプリの作成方法を説明してみようと思う。 まず、GAEを初めて利用する場合は、 Google App Engine - Google Code でアカウントを取得する。SDK一式を落としてきて使えるようにしておくこと。次に、mixiアプリを申請できるように、 デベロッパー登録 をしておこう。 さて、ここから本格的にmixiアプリを作成するわけだが、誰でも(自分を含めて)簡単に理解できるように「 はじめてのmixiアプリ 」の「Hello, world!」アプリケーションを元に作成することにした。 ところで、GAEを単なるファイル置き場として使うだけであれば、次のように設定すればいい。まず、作業ディレクトリにgadgetsディレクトリを作成して、そこにGadget XMLファイル(ここではhello.xmlとする)を置き、app.yamlのhandlersに以下の設定を追加する。 - url: /(.*\.xml) static_files: gadgets/\1 upload: gadgets/(.*\.xml) これを、そのまま以下のコマンドでアップロードする。そして、mixiアプリ登録で、Gadget XMLファイルのURLを、 http://アプリケーション名.appspot.com/hello.xml のように指定するだけだ。 appcfg.py update アプリケーション名 しかし、ファイル置き場にするだけならば、GAEである必要はないわけで、ここではちゃんとGAEを利用した使い方を説明する。 Google App Engineを利用したmixiアプリ「Hello, world!」 GAEを利用するということで、「Hello, world!」アプリケーションの表示を「Hello, ユーザ名!」から、時間に応じた挨拶に変更してみる。朝なら「おはよう, ユーザ名!」、昼なら「こんにちは, ユーザ名!」、夜なら「こんばんは, ユ...

HTTP CookieとFlash Cookieとで同期を行う

前回 に引き続き、今回もCookie関連の記事だ。 ITmedia の ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という記事で、「ユーザーが削除したHTTP cookieを、Flash cookieを使って復活させているケース」があると書かれているが、技術的には簡単だ。 まず、HTMLのhead内にJavaScriptでdocument.cookieを設定・取得する関数を定義する。Flash (ActionScript 3.0)側では、flash.external.ExternalInterfaceを利用してHTTP Cookieを取得する。もし、取得できなければFlash Cookie (Local Shared Object, LSO)の取得を試みる。両方とも取得できない場合は、初めての利用と判断される。どちらか一方を取得できたのなら、もう一方に対して取得した値を渡す。これにより、どちらかが削除されたとしても再読み込みした際に、HTTP CookieとFlash Cookieとで同期され、削除されたデータは復元する。 異なるCookieの同期はデータの永続性を強固にする利点があるが、削除したつもりのデータが実は消えていないということも起こり得るわけで、セキュリティの面からするとあまり良くないかもしれない。これを防ぐためには、Cookieの制御に関する正しい知識を持つしかないだろう。 前回の記事 でも書いたが、Flash Cookieについては グローバルストレージ設定パネル の「今後表示しない」を選択することで禁止することができる。既に書き込まれているFlash Cookieは、 Webサイトの記憶領域設定パネル から、削除や禁止、ディスク容量の調整などが行える。また、HTTP Cookieについてはブラウザの設定で削除できる。 最後に、「 ActionScript 3.0でFlash Cookieを利用する 」で作成したプログラムを、HTTP CookieとFlash Cookieとで同期させるように変更してみたので、そのソースコードを以下に示しておく。赤字は前回からの修正箇所となる(クラス名などは除く)。使用する際は、HTMLのhead内に、 <script language="JavaScript...