2013/04/30

[C#]Twitterizerでブロックしているか調べる、とか

,
 Twitterizerであるユーザーをブロックしているかどうか調べる、だけの話です(完全に覚書です)。

 コードはこんな感じになります。
private void blockToolStripMenuItem_Click(object sender, EventArgs e)
{
    //ブロックしているかどうか調べる
    const string screenName = "***********";
    var resp = TwitterBlock.Exists(token, screenName);
    if (resp.Result == RequestResult.Success)
    {
        //ブロックしている
        MessageBox.Show("yes");
    }
    else
    {
        //ブロックしていない
        MessageBox.Show("no");
    }
}

 TwitterResponse<TwitterUser>型で返ってきますが、ブロックしているかどうか、はTwitterResponse.ResultがSucceedならブロックしている/それ以外ならブロックしていない。となるみたいです。TwitterResponseにはRequestURLメンバがありますが、デバッグで見る限りは"http://api.twitter.com/1/blocks/exists.json?screen_name=[screenname]&include_entities=true"を取得してるみたいです。
 respにはTwitterUser型のUserメンバもあり、[screenName]さんのUser情報がそのまんま入ってました。

 ブロックしていない相手の場合、resp.ResultはFileNotFound、Contentは"{\"errors\":[{\"message\":\"Sorry, that page does not exist\",\"code\":34}]}"が返ってきてました。
ブロックしていないとき
で、ブロックしているユーザー一覧も取得できるはずなんですけど、次のコードだと何も返ってきません…

private async void ブロック一覧ToolStripMenuItem_Click(object sender, EventArgs e)
{
    var dialog = new ShowUsersDialog();
    dialog.Text = "ブロックしているユーザー一覧:";
    dialog.Show();
            
    var options = new BlockingOptions();

    await Task.Run(() =>
    {
        //ブロックしているユーザーのIDを取得する。
        //TwitterBlock.Blockingだとエラーが返ってくる
        var ids = TwitterBlock.BlockingIds(token);
        if (ids.Result == RequestResult.Success)
        {
            foreach (var u in ids.ResponseObject)
            {
                dialog.richTextBox1.Text += u + "\n";
            }
        }
        else
        {
            //取得出来ませんでした
            MessageBox.Show(ids.Result.ToString());
        }
                 
    });

}
実装されてない、とかなんですかね?OAuthとかjsonとかその辺りをC#で自分で処理できるようになりたいですね…

Read more →

2013/04/29

[C#]Twitterizerを使う

,
 Twitterizer(Twitterに関するライブラリ)を使ってみたお話です。と言うよりは、.NETのバージョンによるdllがホニャララな問題に苦戦した跡地です。

 動機は、某botが凍結され新垢が作られ、ふと、そういう一斉ブロックツールとか無いかなあ、と思ったことです。
 
 Twitterizerの使い方は簡単で、GitHubからZipをDLし、解答してできたフォルダのうち/Twitteizer2/Twitterizer2.csprojをビルド?すればobj/Debug/Twitterizer2.dllが作成されるので、それを参照に追加でとりあえずは使えました。(/Debug/Twitterizer2/Full/Twitterizer2.dllを使うべき?)
 VS2012で/Twitterizer.slnを開くと、一部(Twitterizer2.Async.SilverlightとTwitterizer2.Streaming.Silverlight)が使用不可と出るので、それを使った奴は知りません…
 StreamingAPIを使うためには、Twitterizer2.Streaming.dllを使う必要があります。また、Newtonsoft.Json.dllも必要です(GettingStarted.txtに書いてある)。

※2013/07/31追記 API 1.0は使えなくなりました。1.1に移行する必要があります。Twitterizerは開発が止まっているのか(GitHubよく読んでないからわからん)、有志の方による1.1に対応したdllを使う必要があります。随分古く何もない記事なんですけど、Twitterizerでググったら意外と上位に出てきてしまったので…書いておきます
 

 Twitterizerを使うにあたって、以下のサイトが参考になりました。

[C#] TwitterizerでスクリーンネームからTwitterのIDを取得する http://bit.ly/ZKGZ6P
Twitter タイムラインの取得、投稿 (C#) | 夏研ブログ http://bit.ly/ZKH76i
Twitterizerで特定ユーザーのフォロワーを取得する|Paco's style http://amba.to/ZKHaPw
Twitterizerメモ – 非同期処理 | サツキふぁくとりー http://bit.ly/ZKHfTc
Twitterizer で UserStream を取得する。 | みむらの手記手帳 http://bit.ly/ZKHhuo
C#でtwitterizerをつかってみた2 Twitterizerを使ったMyTwitterToolsクラス[.NET][C#][twitterizer][twitterAPI] - merusaiaのゲーム開発(奮闘)日記 http://bit.ly/ZKHkX6

 別にあとに残しておくほどのコードを書いてませんが、こんな感じで自分のIDなども取得出来ます。

/// <summary>
/// ユーザーのScreenNameやアイコンを、ラベル1,2に表示する
/// <summary>
/// <param name="token" />アクセストークン
private async void showUserProfile(OAuthTokens token)
{
    var r = TwitterAccount.VerifyCredentials(token);
    if (r.Result == RequestResult.Success)
    {
        label1.Text = r.ResponseObject.ScreenName;
        label2.Text = r.ResponseObject.Name;
        await Task.Run(() => pictureBox1.Load(r.ResponseObject.ProfileImageLocation));
        pictureBox1.Show();
    }
}

 で、最初既に存在していたdllを使ったところ、dllのバージョンの違い?によるエラーに悩まされました。エラーが出たのはTwitterUser.Show()を呼び出した時に発生した例外で、その内容は
ファイルまたはアセンブリ 'System.Windows, Version=2.0.5.0,Culture=neutral, PublicKeyToken=7cec85d7bea7798e'、またはその依存関係の 1つが読み込めませんでした。
といったもの。ググって出てきた解決策(UACに再登録すること。参考)してもエラーは直りませんでした。
こんなエラーが出ます…

 以下は私の考えですが、Versionが2.0なのは.NET Framework2.0用?で、試しに追加参照にSystem.Windows.dllで2.0のものを追加しても、ビルド時に下のようなエラーが出てしまう。競合してる模様。
"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" と "System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" の間の競合を解決する方法がありません。一時的に、"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" を選択します。

 で、結局Twitterizer2を自分でビルドしたらエラーは直りました。

苦戦した跡
こんな感じになってた

 一時期Twitterizer2ではなくTweetSharpにしようとしましたが、どうにもAPIリファレンスも見つからず、あまりにも資料を見つけられなかったので投げました。まず、OAuth認証するときにPINコード入力するようにするのが不明(TwitterDevelopmentでアプリケーションがWebなのかClientなのか指定できなくなっている?)なので…

 パッケージの復元は既定で無効になっています。確認のため、Visual Studio の [オプション] ダイアログ ボックスを開き、Package Manager ノードをクリックして、[NuGet がビルド中に存在しないパッケージをダウンロードするのを許可する] チェック ボ…
というエラーが出た場合は、VS2012だと何故か[Package Manager]が無いので、手動でNuGetフォルダをコピーした記憶があります。
 
 呟くまで、は c# - How to get the Twitter Usertimeline with Tweetsharp - Stack Overflow http://bit.ly/11rnIEe とかが参考になりました。
Read more →

2013/04/24

[電子工作]Attiny13AのPCINTで外部ピン変化割り込み

,
 Attiny13Aを使ってちょっと遊んでいます。で、Attiny13Aにはピン変化(0→1、1→0とか)で割り込みを発生させる機能があります。割り込みにはINT0を使ったもの、PCINT[5..0]を使ったものの2種類が存在します。これらの違いは、使えるポートの数、割り込みに立ち上がり/立下りなどの制限をかけられるか、などなのですが、詳しい解説は以下のページを見てください。

AVR/ペリフェラル/外部割り込み - プロえく http://bit.ly/11L2QXi

 INT0を使ったものは便利なのですが、PB1しか使えず、今回既にLEDのための出力に使ってしまっているので、PCINTによる割り込みを使ってみることにしました。

 回路図は以下のような感じです。
fig.1 schematic
PB2にLED出力、PB4がスイッチ入力の単純な回路ですね。
 割り込みのためにプッシュスイッチを使ったのですが、チャタリングが発生してしまうため、防止のためにRC積分回路を入れています。時定数をどうするかは経験則だと思ったので、次のページを参考にさせて頂きました。

チャタリング防止回路のCR時定数 http://bit.ly/ZL38Nx

 基板を作ってて、最初はやっぱり動きませんでした。バグの原因は多分、

1)スルーホールだから裏側に配線あたってれば大丈夫だろうと思ってた(スイッチがGND落ちてなかった)
2)入力を見るレジスタを間違えていた(PORTBではなくPINB)
3)見るポートを間違えてた(2ではなく4)

だと思われます…今後のために置いておきます…


コードはこんな感じです。

#include <avr/io.h> 
#include <avr/interrupt.h>

//外部ピン変化の割り込み
ISR(PCINT0_vect){
   //自分でピンが立ってるかどうかチェックしなければいけない
   if(bit_is_set(PINB, PORTB4)){
      PORTB ^= (1 << PORTB2); //PB2を反転
   }  
}
 
//ピンの変化による割り込みを許可する
void initIOInterrupt(){
   //割り込みを有効にする
   GIMSK |= (1 << PCIE);

   //割り込み許可するポートを選ぶ
   PCMSK = 0b00010000; //PB4

   //全割り込みを許可
   sei();
}
 
void main(){
   //PORTBの入出力の方向を設定(PB4が入力、PB2が出力)
   DDRB |= (0 << DDB4) | (1 << DDB2);

   //PORTBの出力値を設定
   PORTB = 0b00010100;

   initIOInterrupt();

   while(true)
   {
      //TODO:: Please write your application code
   }
}

 ISR(PCINT0_vect)が、割り込んだ時に呼ばれる関数です。設定はinitIOInterrut()で設定しています。といってもやることは少なく、

1)GIMSKレジスタのPCIEにフラグ(1)を立て、PCINT割り込みを許可すること
2)PCMSKレジスタで割り込みに使うピンのところにフラグを立てること

の2つだけです。

 PCINTでは、割り込みが立ち上がりによるものなのか、立下りによるものなのかはユーザーが調べないといけません。なので、PINBを見ることで入力値を求めています。bit_is_set(A, B)は<avr/io.h>で読み込まれる?<avr/str_defs.h>でdefineされたマクロで、AのBビット目が1ならtrueになる…のかな。
 
 また、PCINT割り込みはポート変化が出力でも割り込みは発生するらしい(有志の方による日本語翻訳版データシートならp.31)。なので、関係ないポートは出力値を変えてもいいように、PCMSKを0にしておきます。

 INT0を使った割り込みは、次のBlogさんがとてもわかりやすい解説を書いてくださっているので、ぜひそちらを…
 
AVR入門(3) ピン入力と割り込み | stastaka's Blog http://bit.ly/11L86dz


 さて、AVRをちょっとは便利な道具として扱えるようになって来ました。後はADCとシリアル通信、RESETピンのI/Oポートとしての使用、が課題です…
Read more →

2013/04/23

[IDE]AVRISPmkIIをWindows8で使う

,
 PCを新調してWindows8にしたので、IDEも入れ直しです。AVR使いたくなったのでAVRISPmkIIのドライバを入れるお話です。

 何のことはなく、ググって見つけたこのpdfの通りにやるだけで動きました。
How to: Atmel AVRISP mkII programmer with Atmel Studio 6 in Windows 8 http://bit.ly/11FhdfV 

 こんな感じで使えます。

 どちらかというと、AVRISPmkIIはターゲットへの電源供給がないのを知らなくて、後使えなくなった電池をつないでたりして時間ロスしました…

 参考までに、AtmelStudioの画面はこんな感じなんです。Intellisenseもちゃんと効きます。VS使ってたこともあって、めっちゃ便利に感じます。

 AtmelStudioこんなに使いやすいのに、なんでPICの方が人口多そうなんですかね。
Read more →

2013/04/15

[旅行記]東京湾フェリー・成東線

,
 横浜→久里浜→(バス)→東京湾フェリー久里浜→浜金谷→蘇我→大網→成東→千葉→品川

 青春18切符を使いたかったので、東京湾フェリーに乗って千葉の方へ行ってみようと思いました。

 まずは横須賀線で終点久里浜まで行きます。東京湾フェリーののりばは久里浜ですが、横須賀線の久里浜駅からはそれなりに距離があります。京急バスが駅前から出ている(久8 東京湾フェリー 野比海岸 ゆき)ので、それに乗っていきます。

 フェリー乗り場には、既に何組かの家族連れや、お年寄りの人がいました。印象に残ったのはスーツを着たサラリーマンの方で、そういう人も使ってるんだなあ、と。

東京湾フェリーの切符
2F船室です。船はあまり乗ったこと無いのですが、フェリーというイメージになかなか合ってます
沖に出る前の久里浜の眺め
東京湾はひっきりなしに貨物船が往来しています。

浜金谷につきました。
浜金谷でフェリーを降りると、乗船待ちのゴルフ帰りの客が行列を作ってました。高速バスに押されてどんな客層がいるのか謎でしたが、なるほどと思うシーン。
 そこから浜金谷駅までは徒歩で10分くらいです。鋸山ロープウェイを正面に見ながら、鄙びた港町の中を歩いていきます。釣り道具屋が見えてくると浜金谷駅です。ここは駅舎に待合室があるだけの田舎駅なんですけど、乗り降りする客はそれなりにいました。
浜金谷駅
1時間ほどかかって蘇我に着きます。ここで外房線に乗り換え、大網へ。千葉近郊の路線とあって、お客さんで一杯で座れませんでした…
 大網からは東金線に乗ります。5駅だけの短い路線です。最初は椅子が埋まる程度の混雑でしたが、東金につくまでにそのほとんどが降りて行きました。
成東駅改札
成東では次の電車まで40分ほど時間があったので、駅の周りにあるコンビニかどこかでご飯を調達することにしました。本当はモスバーガーに行きたかったのですが、時間的に余裕があまりなかったので、途中のローソンで妥協しました。
 成東駅は特急しおさいも止まる駅なのですが、想像していたよりも閑散としていました。駅の裏側は真っ暗で、蛙?の鳴き声が聞こえて来ました。
夜のホーム
成東
これに乗って帰ります
最後に、千葉で横須賀線に乗り換えて帰宅です。
おしまい
Read more →

[旅行記]熊本・別府に行ってきました その4

,
Read more →

[旅行記]熊本・別府に行ってきました その3

,
 この日は、熊本から別府まで、久大本線を使っての移動がほとんどでした。

宿泊していた三井ガーデンホテル
  まずは熊本駅から久留米まで新幹線で移動します。その熊本駅なのですが、とても綺麗なのでびっくりしました。新幹線開通とともに整備したんでしょうか?
熊本駅新幹線口

改札



在来線側の出入り口、白川口

このTSUBAMEの時計本当にかっこいいですね、でも売ってるかと思ってたけど売ってなかった

みずほの座席
  九州新幹線は全体的にトンネルが多く、外の眺めを期待していた私にとっては少し興ざめでした、残念です。でも、
車窓


























Read more →

[旅行記]熊本・別府に行ってきました その2

,
 九州旅行の2日めです。この日は博多から熊本へ移動し、細川刑部邸、熊本城、唐人町、小泉八雲旧居の順に見て回りました。天気は生憎雨が降ったりやんだりだったので、あまり桜が映えなくて残念でしたが…熊本城は丁度桜が散る間際だったので、まだ咲いててよかったです。



博多駅。コンコース含めとても綺麗でした。
博多駅(2)
800系つばめです。このデザイン大好きなんです。一度乗ってみたかった。
米に燕のマークも号車表示もイカしてますね、白地に黒と赤の帯が入ってるのもよし。
座席はこんな感じです。荷物掛けるところが多くてよかったです。東日本もこうなってくれ…
細川刑部邸に来ました。
家までが遠い…
やっと門につきました
典型的な武家屋敷らしいです。重厚な玄関ですね

銀の間です。時代劇とかで見たことはあるんですけど、実際にこういう所で学んでたのかーって感動しました。

お昼ご飯は城彩苑の中の日本料理屋で食べました。メニューの中で気になったのが一文字ぐるぐるというものなのですが(次の写真の)、どうしてこのネーミングになったんですかね…

一文字ぐるぐる
とても美味しかったです
城彩苑から熊本城までは無料のシャトルバスが出ているので、わざわざ坂を歩いて登らなくともいいんです、こういう観光客にとって便利なように交通手段が整備されてるとほんと楽でいいです… 
シャトルバス
熊本城は築城された時の構造とほとんど変わっていないので、城攻めされにくいように曲がりくねってたりするわけです。観光客も攻め入る(?)わけですから、天守閣までが遠くて大変です…

頬当御門につきました。ここから天守閣まで歩いていきます
桜と天守閣。空が青空ならとてもいい構図だと思ったんですが…
本丸御殿は新しく復元されたもので、柱などが真新しくてちょっと見応えに掛けるものがあります…しかし、やはり大広間の奥まで畳がずらっと並んだ様は圧巻でした。また、藩主さまが家臣とかと合う場所?である昭君之間は、どこも金色が使われ様々な絵が書かれた綺羅びやかな場所で、これも見て驚きました。その豪華絢爛さが藩主の地位の高さを表してるように思えました。

昭君之間
帰りに見つけた骨董品店。実は銃弾みたいなのが店頭にありました…
  ホテルに一旦荷物を置いてから、古い建物が沢山残っているという唐人町に行ってみました。市電で2駅だったので、歩いて行ってみたのですが、途中は普通の町でしたね…


古い建物を活かしたカフェ。是非中に入ってみたかったです(時間なかった)
唐人町から、熊本で一番の繁華街通町筋まで市電に揺られていきます。通町筋のアーケード街には、若い人達、制服姿の学生さんとかがいっぱいいました。小泉八雲旧居はそこから2ブロックほど離れたところに、木々に囲まれて落ち着いた佇まいでひっそりと建っていました。

小泉八雲旧居
こういう昔の書類が見れるの、いいですね
通町交差点から見た熊本城
  夜は熊本名物馬刺しです。この食感といいなんといい一度食べたらハマっちゃいますよね。美味しかったです。
馬刺し
3日めに続きます

Read more →