FC2ブログ
2020年01月 / 12月≪ 12345678910111213141516171819202122232425262728293031≫02月

2010.02.08 (Mon)

python-twitterプログラミング進捗報告

先週、
   「週末にはフォローしてくれた人をフォローし返すプログラムを作る予定。」
と書いた。
だが、フォローし返すプログラムは作ってません。
土日でやってたのは、

  ・botクラスのbaseとなるクラスをぼんやりとイメージ
  ・bot用アカウントでログイン
  ・follower/friend の名前取得
  ・follower/friend の名前リストをログファイルに出力
  ・follower/friend の名前リストをログファイルから取得

とか。
pythonになれなかったり設計を途中で変えたりで、結構エラー出しまくって作業がはかどりませんでした。
まぁ、ネトゲやらニコニコやらを見ていたというのもはかどらなかった大きな原因ですが。

さて、では今週中、というか金曜前までに済ませておきたいのは、

  ・follower/friend のログデータと現在のデータとの差分算出
  ・followerをfollowする

あたりの機能。
そして、金~日で GoogleApiEngine を使って動くようにしたい。
フォローしてくれた人をフォローし返すだけのbotだけど、まぁ最初としてはそんなもんでいいでしょ。

テーマ : プログラミング ジャンル : コンピュータ

02:09  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.07 (Sun)

pythonでのカプセル化について

pythonでクラスを作っていたら、publicやらprivateやらのアクセス制限はどうしているのかと調べてみた。
どうやら、名前を工夫するらしい。
具体的にどうするのかというと、アンダースコア(_)を変数名やメソッド名の頭に付加すれば良い。
アンダースコアの付け方には2種類あり、1つだけ付加する場合と2つ連続で付加する方法がある。

1つだけの場合は、pythonのシステムが制限してくれるわけではなく、あくまでプログラマが「これは非公開である」という認識を持ってクラスを利用しなければならない。
そのため、書き換えようと思えば書き換えることができる。
プログラマが正しい使い方をしてくれることを信じるわけですな。

2つ連続で付加する場合は、pythonのシステムが内部で変数名を変換してクラスの利用者からのアクセスをできないようにする。
見ることも書き込むこともできない。
ただし、あくまで内部的に変数名を変化させるだけなので、内部でどのような変換がおこなわれているかを知ることができれば、アクセスして書き換えることが可能となる。


う~ん、どうもpythonのこのやり方はしっくりこないなぁ。
イマイチ制限が弱い気がする。
スクリプト言語はコンパイラと違って色々やりにくいのかね、この辺。
具体的な例はありませんが参考URLは貼っておきます。
Rubyなんてソースを見たことすらないけど、要点だけあって見やすかった。

テーマ : プログラミング ジャンル : コンピュータ

06:57  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.03 (Wed)

pythonでファイル出力+python-twitterでフォローする

寝たいので軽く書きます。

まずpythonでファイル出力。
プログラムのせるだけ。

# ファイル出力
print "Test of output to file."
output_list = ["hello", "world", "cloud_1919", "chest"]
file_name = "output_test.txt"
fw = open(file_name, "w")
for out_list in output_list:
fw.writelines(out_list+"\n")
fw.close()


次にpython-twitterで任意のアカウントをフォローする方法。
twitter.Apiの中にある、CreateFriendshipという関数を使えば良い。
引数はフォローしたいアカウント名。

# Create Frendship
api = twitter.Api("AccountName", "Password")
api.CreateFriendship("holy_Knight_api")



時間がないのでサラッと。
ちなみに、python-twitterの練習用アカウント作りました。

   「holy_Knight_api」

という名前なので気が向いたらフォローお願いしまふ。
とりあえず、週末にはフォローしてくれた人をフォローし返すプログラムを作る予定。

テーマ : プログラミング ジャンル : コンピュータ

01:07  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2009.09.24 (Thu)

TopCoder SRM 449 DIV2 後書き

初挑戦だった、TopCoderSRM。
結果を先に言うと、

   ・プログラムをSubmitしたもの:250pt、500pt
   ・チャレンジで崩されたもの:500pt
   ・チャレンジ成功したもの:500pt ×2
   ・チャレンジ失敗したもの:500pt ×1

   ・プログラムによるScore = 171.98 + 0
   ・チャレンジによるScore = 50 + 50 - 25
   ・合計 Score = 246.98
   ・Rating 1336


1000ptの問題には目を通してすらいません。
とりあえず、500ポイントの欠陥プログラムは落とされることは予想してました。
処理に数十秒かかってたので。
で、自分の問題点が分かっているので、あとは同じような人を探せばチャレンジが成功するわけで。。。
ただ、調子に乗って一つ失敗してしまった orz

今回参戦して思ったのは、まず英語力が欲しい。
英語がネイティブだったりする人たちとは、それだけでハンディになる。
次に、単に実力不足。
DIV2なのに500Ptで頭抱えるんだから、まだまだダメダメです。


さて、肝心の問題。
目を通した 250pt と 500pt についてだけ書きます。
ここに書くのは解答の解説ではなく、あくまで問題内容と自分の作ったプログラム・アルゴリズムについて。
まだ解法がよくわからないものもあるので。。。

では、詳しくは「追記」(More)へどうぞ。

テーマ : プログラミング ジャンル : コンピュータ

03:06  |  プログラミング系  |  TB(0)  |  CM(2)  |  EDIT  |  Top↑

2009.09.22 (Tue)

古い Visual C++ ソースを読みながらのメモ

Visual C++ 6.0 くらいの時代のC++ソースを読んでます。
意味不明な記述、疑問があったら、ここにメモっていきます。
C#についてもついでにメモします。
基本的に、COMだとかATLだとかがよくわからん。
てか、今のVisualStudio2008とかだと、ほとんどVC++6.0のプロジェクトはビルドできない。
マジで面倒。



VC++

・「#define __T(x) L ## x」
   解決済み。既に別の記事に記載。

・「__stdcall」とは?
   windowsAPI関連の規約。
   VBとかVC++とかの整合性を保つための、.Net以前の産物。
   多分。

・コメント部分。「//@」や「//!」、「//! \name」など。
   おそらく、VisualStudio6.0時代のコメント。
   現在ではとかとかに相当すると思う。

・ATLTRACEの意味が不明
   ATLTRACEのコメントを外した時、デバッガに情報を渡す役目を持つぽい。


・Visual C++ の関数の各引数のコメントに、[In] とか [Out] などの記述が。
   引数の役割の説明らしい。
   こんな感じ ⇒ /*! \param area - 面積 [Out]
   [In]:入力用引数、[Out]:出力用引数、[In/Out]:入出力用引数

・C++ 属性リファレンス [retval], [out], etc...
   C++の属性リファレンス。
   DLLを作成した後も、処理を変更するためのものらしい。
   おそらく、上のもそれ関連。

・4種類のキャスト
  C++には static_cast, reinterpret_cast, const_cast, dynamic_cast の4種類のキャストがあるらしい。
  これは完全に初耳。
  詳しくは こちら   

・FormatMessage() 関数とは?
   メッセージ文字列を書式化します(書式を割り当てます)。
   MSDN参照
  
・GrobalFree() 関数とは?
   指定されたグローバルメモリオブジェクトを解放し、そのハンドルを無効にします。
   MSDN参照

・デフォルト引数
   そういえば、こんなのもあったね。
   C#にはデフォルト引数無かったけど、C#4.0になって「オプション引数」という名前で機能が追加されるらしい。

・例外指定
   初耳。
   関数の投げ得る例外を、関数宣言時に記述する。

・__declspec(novtable)
   余分なコンストラクタの初期化を省く。
   一種の最適化。
   参照

・CComPtr
   COMインタフェースのポインタを扱うためのクラス。

・CoCreateInstanceメソッド
   指定されたCLSIDに関連付けられたクラスの1つの未初期化オブジェクトを作成します。ローカルシステム上で1オブジェクトを作成したい場合に呼び出します。
   ソース



C#

・C#には unsigned char がない。char があるから uchar もあると思ってたら無かった。
   unsigned char → byte
   unsigned short → ushort
   unsigned int → uint
   unsigned long → ulong

・C# で Operator を使うとき、const や ref は使えないのか?
   ムリポぃ。

・C#の sealed は、これ以上派生させたくないクラスにつける修飾子。
 C++にもあったような・・・。完全に忘れてた。

・System.Diagonastic.Trace でデバック用の処理ができる

・「 .ToString() 」 にはいろいろな使い方がある。
 C の printf 便利だったのになぁ~、なんて思ってたけど、多少は融通が利きそうだ。
  DOBON.NET

・C#でのvoidポインタ「void **」について
   ポインタがどこを指しているかを考えなければ、IntPtrを代わりに使えば良いらしい。
   DOBON.NET掲示板


テーマ : プログラミング ジャンル : コンピュータ

15:23  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2009.09.20 (Sun)

プログラミングメモ ”define と ワイド文字列”

とあるC++のソースを呼んでいて、わけのわからないものがあった。

#define __T(x) L ## x

「 L ## x 」はどういう意味だろうと思い、ぐぐったら、ワイド文字列の処理を行うものだと判明。

たとえば、「_ _T("abc") 」 は 「 L"abc" 」 に展開されるらしい。
そして、 「L"abc"」 というのはワイド文字列の 「 "abc" 」 という意味らしい。
ワイド文字列なんて完全に忘れてた。
「##」 はダブルクオテーションで囲む、といった意味だろうかね。
[2009/09/21:追記] 「##」の意味は、コメントに詳細有り。

Yahoo知恵袋

テーマ : プログラミング ジャンル : コンピュータ

17:57  |  プログラミング系  |  TB(0)  |  CM(2)  |  EDIT  |  Top↑

2009.09.05 (Sat)

プログラミングコンテストを扱うサイト TopCoder への登録と使い方

最近、TopCoder というサイトを利用してます。

TopCoder というのは、さまざまなプログラミングコンテストの問題があって、それを解くというもの。
問題を解くとポイントがもらえるのですが、高難易度の問題をより早く解くことで、より多くのポイントが入ります。
他に、他人のプログラムのバグを出すテストケースを作成し、それを送ることでもポイントが入るようです。
なお、失敗するとペナルティだそうです。
コンテストによっては、賞金がもらえるような記載があった気が・・・?
専用のブラウザで問題を選んだりコードを書いたりコンパイルしたり送信したりします。

ほんとうにごく最近始めたばっかりなのでよく分からないことだらけ。
サイトやシステムはすべて英語なので、なおさら。
利用方法の簡単な手順を書いておきます。

[ 登録手順 ]
TopCoderにアクセスし、右上の「Register Now」をクリック。
すると、チェックボックスが4つ出てきます。

1番上はTopCoderに参加する意思があるかというものだと思います。
なんで、これはチェック必須。
2~4はどのコンテストに参加するかという質問。
2番目の「TopCoder Contest」は、アルゴリズムやバグトレースなどの問題のようです。
3番目の「TopCoder Contest Studio」は、グラフィックデザイナーとか、Flash作る人とか、そういう人向けのコンテストみたいです。
4番目は中学生や高校生向けのコンテストです。

自分は1と2だけチェックしました。
もう大学生だし、グラフィックとかはよくわからんです。
続いて、いろいろな情報をだらだらと入力していきます。
名前、住所、電話番号、大学名、職種、紹介者、本当にいろいろ聞かれます。
住所とか電話番号は適当に書いちゃいました。
紹介者という欄もあって、これも入力しないといけません。
テキトーに書いても問題ありません。


[ 試しにSRMの過去問をやってみる ]
いろいろと情報を入力すると、登録終了だったと思います。
そしたら、最初に張ったURLの右上の「Login」からログインします。
左側にいろいろ項目が表示されていると思うので、「Algorithm」→「Launch Arena」をクリック。
すると、Javaアプリのインストーラがダウンロードされ、起動されます。
インストール後ソフトを起動したら、ユーザネーム+パスワードを入力。

ソフトにログインすると、上に「Practice Rooms」というところがあります。
そこから「SRMs」を選択、さらにいつの過去問をやるかを選択します。
選択すると、その過去問の部屋に移ります。
次に、「Select One」というところの3種類の難易度から問題を選択します。
表示されているのは点数で、大きいほど難しくなります。
また、問題を解くのに時間をかけていると、点数が減少していくので注意。
問題を選ぶとエディタが起動されます。
ここで問題を読み、コーディング、コンパイル、テスト、送信します。
送信してもシステム側で行うテストを通らなければ減点なので注意しましょう。
ちなみに、「Save」しておけば一旦エディタを終了しても、再起動したときにプログラムが残っているみたいです。
ただ、このエディタは機能が少ないため、ほかのエディタでプログラムを作り、それからコピペしてコンパイルする人が多いようです。
私も Visual Studio に一旦書いたりしています。


とりあえず、TopCoder の説明は以上です。
まだ問題2つしか解いていないので、また慣れてきたら記事を書こうと思います。

テーマ : プログラミング ジャンル : コンピュータ

07:55  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2009.05.31 (Sun)

C#のC++やCとの違い

今「独習C#」を読んでます。
とっても、まだ5章あたりで半分も進んでないんだけどね。
C#の文法にはいい本だと聞いたので。
一応入門書という位置づけなので、5章くらいはサクサク読めてます。
ていうか、C++触ったことがあるから被ってる部分多し。

さて、この記事を書いたのは、C#独自の文法があったため、それをまとめようと思いました。
配列の宣言やら、新しいループの文法やら。
まぁ、これぐらいかなぁ・・・


[一次元配列の扱い]
・配列宣言
CやC++
    型名 変数名[];
C#
    型名[] 変数名;

・配列の使用
CやC++
    すぐに使うことができる
C#
    「new」演算子で動的に作成する必要がある。
    変数名 = new 型名[];
    みたいな感じ。


[多次元配列の扱い]
・はじめに
    C#では、2種類の多次元配列が存在する。
    一つは、従来どおりの正方形状の配列。
    もう一つは、ジャグ配列という、大きさがある程度自由になる配列。

例として2×3の2次元配列を考える。

・C,C++の配列宣言および初期化
    int array[2][3] = { {0, 1, 2}, {3, 4, 5} };

・C#での普通の配列宣言および初期化
    int[,] array = { {0, 1, 2}, {3, 4, 5} };
   または、
    int[,] array = new int[2, 3];
    array[0,0] = 0; array[0,1] = 1; …

・C#でのジャグ配列の宣言
    int[][] jagArray = new int[2][];
    jagArray[0] = new int[3];
    jagArray[1] = new int[3];

ジャグ配列は、各次元の配列サイズをバラバラに決めることができる。
そのため、上の例は
    int[][] jagArray = new int[2][];
    jagArray[0] = new int[5];
    jagArray[1] = new int[3];
のように宣言することができる。


[foreach文]
C#には、forやwhileなどのループ構文に、foreach文というものが追加された。
foreach文は配列の中身を調べるときに使われる。
書式は次のような感じ。

    foreach(型名 変数名 in コレクション) 文;
型名:次にくる「変数名」の型。「コレクション」と互換性のあるものでないとダメ。
変数名:「コレクション」を代入する変数名。
in:「in」は「in」だ。
コレクション:調べたい配列などのオブジェクトのグループ。

ここで新しく作られた変数は、読み込むことはできても、書き込むことはできない。






途中から、まとめる気力が失せました。
ごめんなさい。


テーマ : プログラミング ジャンル : コンピュータ

20:39  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2009.05.24 (Sun)

VisualStudio2008 C# 「パッケージ」の仕方

訳あって最近VisualC#を勉強せねばならないことになった。
で、今読んでるのが「10日でおぼえるVisualC#.NET」という本。
正直内容は薄いけど、C#の環境に慣れたり空気を掴むのにはちょうどいいかもしれない。

で、一通り読み終わりました。
この本では最後の方でもぐら叩きゲームを作成する。
そして付録に「作成したソフトを配布する手順」みたいなのが載ってたので、その手順を適当にまとめてみる。
これをやれば、簡単にインストールプログラムを作成できる。
作成手順は大きく2種類あって、「リリース」と「パッケージ」がある。




[ リリース ]
1.上の方に実行ボタンがあり、その脇には「Debug」となっているので、「Release」に変更する。
VS_C#_パッケージ0

2.次に、[ビルド]→[リビルド]を実行する。その結果、「Release」というフォルダが新しく作られる。
3.「Release」フォルダに、実行に必要な画像ファイルなどを入れる。


[ パッケージ ]
1.
「セットアッププロジェクト」という新規プロジェクトを、配布したいソリューションに作成する。
[ファイル]→[新規作成]→[プロジェクト]⇒[その他のプロジェクトの種類]→[セットアップと配置]→[セットアッププロジェクト]を選択。
その際、「ソリューションに追加」を選ぶこと。

2.「表示」→「エディタ」→「ファイルシステム」を選択し、「ファイルシステム」というタブができる。
3.その中の[アプリケーションフォルダ]を右クリックし、[追加]→[ファイル]を選択。
4.「Release」フォルダ内にある、実行ファイルと画像などのメディアファイルを指定して追加。
5.
次に、ソリューションエクスプローラから新規作成した、セットアッププロジェクトのプロパティを設定する。
ちなみに、「Manufacturer」を設定しないとビルドできない。

6.再び「Release」を選択し、「(新規作成したセットアッププロジェクト名)でビルド」という項目からビルド。
すると、「Release」フォルダができて、以下のような種類のファイルが作成される。

・「setup.exe」:コレを実行すれば、インストール開始
・「.msi」:実行ファイルやイメージファイルが詰まっている

7.作成されたファイル(フォルダ)を配布。




まぁ、コレだけ。
結構簡単だね。
試しにモグラたたきをインストールしてみた。
どうやら、デスクトップとかスタートのプログラムメニューには、ショートカットがインストールされないみたい。
実行するには、直接インストールしたファイルにアクセスしないとダメ。
ショートカットの設定も、ありそうだから今度調べてみようかな・・・。


テーマ : プログラミング ジャンル : コンピュータ

15:47  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2008.08.06 (Wed)

Qt re-try

寮のノートPCは持ってきませんでした。
なんで、いま使えるのはXPの入ったデスクPCのみ。
Qt使える状態じゃないので、インストールしました。


で、Web上のTutorialのサンプルプログラム動かそうと思ったんだけど、どうも [ qvbox.h ] が見つからないようだ。
このWebにあるリファレンスは、Qt2のやつなのが原因なんじゃないかと思う。
今の最新はQt4である。
ちょっとずつ仕様が変わっていってるのだと思う。
なんで、この前買った本を参考にしながら、帰省中にQtを勉強しようと思う。


テーマ : プログラミング ジャンル : コンピュータ

19:36  |  プログラミング系  |  TB(0)  |  CM(1)  |  EDIT  |  Top↑
PREV  | BLOGTOP |  NEXT