Feeds:
投稿
コメント

Archive for 2012年3月

Inker改造してみた

http://dl.dropbox.com/u/12260653/InkerCustomized.zip
というわけでhttp://bleign.bufsiz.jp/inker/で公開されてるInkerにDirectInputを利用した
キーバインドを使っていろいろできるようにした改造版を置いておきます

Inker自体が.Net 3.5ということだったので今や使えないDirectX for Managed Codeを利用しました
DirectXのランタイムがないと初期化中に落ちるかもしれません

ちなみにこの辺の処理にあたってはhttp://sorceryforce.com/manageddirectx/directinput.htmlなどを参考にさせていただきました

短いですがこんくらいで

広告

Read Full Post »

最近App Hubの審査遅いなーと

まあ通ったしいいです

というわけでTwiangle version1.7となります
http://www.windowsphone.com/ja-JP/apps/7ef40ada-1a39-4507-8167-68991c357bb4からどうぞ
今日の0時30分くらいにメール来たので30日のそんくらいの時間には大丈夫かなーと思います
今回の変更点は
・タイムラインの取得数の設定がおかしくなる場合に対処
・取得可能な回数を表示できるように  
・ネットワークに接続されていない場合は自動でお気に入り追加するように  
・過去の分のお気に入りを取得可能に
となります
おもにver1.6のバグ対処となけなしの新機能です

そういえばふぁぼキューがなんか間違われて見られてますけどあれはあくまでお気に入り追加のプロセスの補佐にしかならないと思ってます
確かに一斉追加になりますし使い方いじれば砲撃できますが普段からそんな使い方するためのものじゃないのでできればもっとスタンダードになってかないかなーとかなんとか

とりあえず書くことがないですはいw

新機能の解説ちょっとしようかと思ったけど取得なんちゃらはどうでもいいか
取得可能な回数だらだらはApplicationBarのメニューに追加しました。メッセージボックスでAPI Limitを表示します

ネットワークになんたらはネットワークつながってないばあいはふぁぼキューに追加します
試用版ではできません

過去の分のお気に入りは前できなかったので放置してたんですけど見たらできるようになってたので対応しました

とりあえずこんくらいで

Read Full Post »

とか作りました

https://www.sugarsync.com/pf/D6585046_2746461_604553からどぞ

まあ無保証ですしそもそも何番煎じかも知りませんし調べてもないんですが
すでにこの辺のアプリケーション使ってる人いたら教えてほしいなーとか
…運用できてるしいいかな…

これ自体の原理はすごい簡単でショートカット作ってそっから起動すると東方のゲームが起動してゲームが終了したらスコアを自動でコピーするだけです
説明不足感やばい

設定でexeファイルの位置を指定してそのパスを保存。次に本体のアプリケーションへのショートカットを生成します
exeファイルへのじゃないです
本体アプリケーションをショートカットから起動したら指定したゲームを起動してくれますよってことです

まあバックアップってもスコアファイルコピーするだけだし手動でもいいよねーとか思いますけど私めんどくさかったので…

ちなみにほかのゲームにも応用効く気がしますけどハードコーディングしちゃったので無理です
もうちょっとロジックちゃんと分離しますはい…

そんくらいですたぶん

追記:そういやこれでバージョン管理っぽいことできますがディレクトリバージョン管理です。Subversionとかみたいに高度なあれ使えませんはい

Read Full Post »

はい…

えっ通るならいいじゃないとか言われましてもですね

というわけでとりあえずTwiangle v1.6が審査通りました
明日のこの時間にはダウンロードできると思います
http://www.windowsphone.com/ja-JP/apps/7ef40ada-1a39-4507-8167-68991c357bb4

今回の変更ではローカライズちゃんとしてなかったせいで俗にいう中華フォントになってたのを修正しました。
また試用版も同時に開始となります
試用版は色振り分け機能、v1.2以降に追加された機能をすべて使用不能にしています
自動お気に入り追加は試せるのでぜひ!

あとは
・ツイート失敗時に内容を投稿欄に戻すように
・お気に入り追加時にエラーが起きた場合にお気に入り自動追加を行うように 
・認証時にクラッシュする場合に対処 
・取得した中でもっとも新しいツイートより新しいツイートを取得する設定を追加(通信量が減ります)  
・取得数を少しだけ変更可能に
という変更点となります

ツイート失敗時に投稿欄に戻すようにしたためいちいち同じ文章入れなくても投稿可能です
ただし一部の失敗では戻しません

エラー時にお気に入り自動追加というのはWebException出た時の対処です
あとはリモートエラー?も?だっけ?

認証時クラッシュはスタックトレース大量に来たのでささっと対処しました

もっとも新しいうんにょろは取得する際にすでに取得したツイートをとらない ということを行います
つまりすでにとった分が減るので通信量も減って電池が節約可能です

で、今回のリリースで最も問題となる取得数変更
これ設定できるようにしたのはいいんですけどどーも初回読み込み時に取得数が40から変更されてしまうらしく
取得しようとしてもなんか少なくなってしまってウオオオアアアアアアアってなりました
アップデート申請消せなくてもういろいろあれな日々でした

早めに直して出すつもりなので避けるとか設定しなおせば問題ないのでそんな感じでお願いしますはい
ユーザーがいるのか知りませんが…w

こんくらいでとりあえず

Read Full Post »

調べたけどぜんぜんでないですね…w

VSTOなんでせっかくだし自前でフォーム作って出したりとかしたいとおもうじゃないですか。
しかしApplication.TopとかからExcelの位置取れる気がしなかったのでもうちょっと楽に攻めます

http://msdn.microsoft.com/ja-jp/library/cc364769.aspx
ということでGetWindowRectを使いましょう。
GetWindowRectはhWndをとれるアプリにはかなり有効です

http://msdn.microsoft.com/en-us/library/bb177579(v=office.12).aspx
にある通りApplication.Hwndでとれます
え? Longじゃんって? VBAではLong=Integerなのですはい(Longが32ビット整数でした)

とりあえず書くと次のような感じ

'GetWindowRect周り。メインの関数と構造体定義
Imports System.Runtime.InteropServices
Public Class GetWindowLocation
    <DllImport("User32.dll")>
    Public Shared Function GetWindowRect(hWnd As IntPtr, ByRef rect As Rect) As Integer

    End Function

    <StructLayout(LayoutKind.Sequential, pack:=4)>
    Public Structure Rect
        Public left As Integer
        Public top As Integer
        Public right As Integer
        Public bottom As Integer
    End Structure

End Class

'~~~~~~~~~~~~~~~~~~~~~~
'使い方。Sheet1のコードビハインドでやるとしたら次のような感じ
    Dim myRect As GetWindowLocation.Rect
    GetWindowLocation.GetWindowRect(New IntPtr(Application.Hwnd), myRect)
'integer返ってくるけど扱わなくても問題ないか?

C#? アトリビュートかけない(

はい、これでLeft,Topが無事取れました。
Height,Widthは逆算すれば出るかなーとか思ったけど値が足りないので適当に出します

Graphics.Hwnd(IntPtr hWnd) (System.Drawing Namespace)を使ってまずGraphicsクラスを作成します
これもさっきのApplication.HwndでとってIntPtrのコンストラクタに放り込むだけです

次にGraphics.VisibleClipBounds
を使います。これでRectangleFが取れるのでSystem.Drawing.Rectangle.RoundしてRectangleFをRectangleにします
RectangleにはHeight,Widthがあるのでこれを使います

こんな感じに取れます

Dim grphcs = Graphics.FromHwnd(New IntPtr(Application.Hwnd))
Dim rect = System.Drawing.Rectangle.Round(grphcs.VisibleClipBounds)

これのrectを扱いましょう

今回はこんな感じで

追記:hWnd(WINdow Handle)はウィンドウハンドルのことです

Read Full Post »

というわけで宣伝でもないですが

https://www.sugarsync.com/pf/D6585046_2746461_698579

Ayatter 0.8.1.577のほうをリリースさせていただきました
普段リリースごときでブログなんて書かないのですがちょっと書きたいことあったので

今回はおもにWebでのテンプレート展開のほうをAyatter側で展開する機能のベータ版を追加しました。
ベータ版なのはユーザー情報更新などに対応していないため、およびツイートのクラスがINotifyPropertyChangedを実装していないためです。
これにより、{{user.statuses_count}}などはツイート取得(正確にはインスタンス生成)時の情報のままとなります。

なお{{retweeted_count}}はAPIリクエスト制限によりほぼ完全には追えません
というかほとんどのデータは完全には追えないと思います。ユーザー情報は一元的に扱ってますがたぶん無理です

ちなみに{{user.favourites_count}}のほうには対応しております
また{{created_at}}はAPIで取得したデータをそのまま表示しますので割と見づらいかもしれません。
さらに{{user.name}}のほうには対応しきれませんでした。{{user.nickname}}で代用できます

retweeted_statusを先頭のクラスとして参照することが可能です。

とりあえずちゃんとした解説はまともに対応したら書きますたぶん

今回のリリースには一時的な対処とした設定読み込み時クラッシュの対策が一部なされています。
これはおもに設定ファイル書き出し時にファイル破損等によりイニシャライザでクラッシュする現象が起きた場合の対処です。
しかし、今回は設定のみにしか対応できておらず、他のユーザー情報などが破損した場合同様の現象が起きる可能性があります。
もし起動時にクラッシュする場合は設定ファイルをすべて消すことで直る可能性があります

このこともあるように、Ayatterの設定の読み書きは結構悲惨な状態にあります。
とりあえず設定の読み書きにシリアライザーを使うように変更できたらなというように感じています
ただまあ時間がないので厳しい…

次のアップデートはおそらく4/2になるかなと思うんでそれまでになんとかできるところはしたいです

とりあえずこんくらいで

Read Full Post »

期間が空いたような
これはいったいいつまで継続できるのか怪しいところがありますね

さてさて、前回言った通り認証まででもゆるふわ記述します。

Twitterからの認証にはまず2種類あります。PINとリダイレクトですね(通じる気がしない)
リダイレクトはおもにServer-Flowとかいう名前で説明書かれてる気がするあれです。
PINはClient-Flowとかいう…んですかね……  とりあえず7ケタの数字を入力して認証を行います。
PINはおもにデスクトップクライアント向けっぽいあれではあるんですけどMetroアプリとしては全画面表示しまくりでIEにナビゲートしてなんたらとかもめんどくさいところがありますのでServer-Flowのほうがいいかなーと思います。
(私がリダイレクトのほうが好きっていうのがありますが)

というわけで強引に認証方式決めたので話を進めましょう。
認証についてのあれはかける気がしないのでBing先生に頼みましょう
とりあえずServer-Flowだとrequest_tokenの時にoauth_callbackを認証ヘッダに追加する必要があります。
access_tokenの時はPINを入れてたoauth_verifierにURLから拾ってきたやつ突っ込めば終わりです

これでいいのかわかりませんが進めましょう
さてRequest_token拾ってURL生成したらブラウザにナビゲーションしてoauth_verifierなどなどを回収しなくてはなりません。
私みたいに非同期スレッドを認証に使ってコード回収するまで回し続けるなどというあれな行為は避けましょうね
(Taskでrequest_token呼び出し→共有インスタンスにURL渡す→イベントでページにナビゲートする→コード回収するまでWhile)

まずはページ作ってみましょう
今回はBasicPageでいいかなーとおもいます。Blankで一面ブラウザでもいいかもしれませんけど

ここでWebBrowserコントロールがいらっしゃらないので下位互換のWebViewさんを使います
厄介なのはNavigatingがないのでLoadCompletedイベントで拾ったりしないといけないところでしょうか
Sourceをボーリングしてもいいのかな…
LoadCompletedというイベントの性質上callbackにtwitterみたいに勝手にリダイレクトしてくれるURLを指定しないほうが賢明です。twitter.com/なんたら みたいなのだと破滅的URLを扱わなくてはなりません
まあLoadする時間削れる意味でも存在しないURLが妥当かなと思います
(サブドメインとか)

さてLoadCompletedでoauth_verifier拾ったらメインのページに戻れなくてはなりません。
BasicPageだと標準で実装されてますし実際そのボタンクリックさせてもいいんですがFrame.GoBack (Windows.UI.Xaml.Controls Namespace)っていうのがありますんでこれ使いましょう
ボタンもこれ使ってるっぽいので大して変わりませんけど

逆に認証ページに飛ばすためにはFrame.Navigate(System.Type) がありますのでこれで飛ばします。
認証ページのGetTypeでもすればいいかなと

はてさてここで一つ問題があります。
私がさっき書いた頭悪い方法だとイベント発行→Frame.Navigateに進めません(TaskなのでUIスレッドではない)

というわけでおなじみにDispatcher使います。(Windows.UI.Core Namespace, CoreDispatcher class)
CoreDispatcherとなってますが普通にPageとかならDispatcherで取れます

そしてなぜかMSDNにInvokeとInvokeAsyncの解説ないというなんだこれ

たぶんInvokeはDispatcher.InvokeでInvokeAsyncはDispatcher.BeginInvokeだろうと思いながら
CoreDispatcher.Invoke(CoreDispathcerPriority priority,InvokedHandler freeThreadedCallback,Object sender,Object context) と
CoreDispatcher.InvokeAsync(CoreDispathcerPriority priority,InvokedHandler freeThreadedCallback,Object sender,Object context) というわけで
引数的にはまったく同じように見えますね
priorityには優先度入れます。低い、普通、高い です
freeThreadedCallback(名前すごいな)にはSub() でも入れましょう。 ラムダ式いけます。デリゲート入れる場合はInvokedHandlerにキャストする必要あるかもです
senderはsender入れます。よくわかりませんけどNothing入れたら例外はいてめんどくさいのでPageで使ってる場合はMe(this)とか入れとけばいいのでは
contextはよくわかりません。わからないのでNothing(null)でもいい気が

というわけでイベントをハンドルした引数でDispatcher.Invoke(CoreDispatcherPriority.Normal,Sub() Frame.Navigate(GetType(AuthenticatePage)), Me, Nothing) とかやってページに飛ばすことができました

あっちなみにMessageDialogもDispatcherつかわないで非同期スレッドからアクセスすると例外出ます
Invokeしてもなんかよくわからないメッセージでます
なんだこれ…

というわけで今回はここまでに
次回何するんでしょうかね…w まあ進んだら適当に

Read Full Post »

Older Posts »