約 3,007,224 件
https://w.atwiki.jp/mboxlist/pages/90.html
【登録タグ KAITO 曲 TI】 INVOKE 歌手名:TMR 番組名:機動戦士ガンダムSEED
https://w.atwiki.jp/android/pages/39.html
概要 ドキュメントのHowtoに次のような一節がある。 Setting Alarms Android provides an AlarmManager service that will let you specify an Intent to send at a designated time. This intent is typically used to start an application at a preset time. (Note If you want to send a notification to a sleeping or running application, use Handler instead.) しかしサンプルではごく一部にHandlerが登場するだけで、その使い方がよく分からなかった。 Looper を中心にスレッドメッセージキューの実装を調査してみる。 Looper LooperクラスにはstaticなThreadLocal変数が定義されている。 クラスメソッド Looper.prepare() はこの変数にLooperオブジェクトを格納する。prepareできるのはスレッドごとに最初の1回だけで、2回目以降はRuntimeExceptionになる。 Looperのコンストラクタはプライベートメソッドであるため、Looper.prepare()以外の方法でLooperオブジェクトを作成することはできない。 static Looper.myLooper() はprepareされたLooperオブジェクトの参照を返す。 static Looper.myQueue() はprepareされたLooperオブジェクトの中にあるMessageQueueの参照を返す。 quit() は対象のLooperの中のキューに特別なメッセージを MessageQueue.enqueueMessage する。 loop()はブロックし、特別なメッセージやエラーが発生するまでメッセージキューの中身を Message.target.dispatchMessage(msg) し続ける。使い終わったメッセージは Message.recycle() される。 Handler Looperのメッセージキューにメッセージを追加する際は、同一パッケージ中のコードでなければ HandlerのsendMessageAtTime()かsendMessageAtFrontOfQueue()を経由することになる。この2つのメソッドはどちらもMessage.target をHandlerオブジェクト自身に上書きする。なので、Looper.loop()がメッセージをディスパッチする際にはメッセージを送るのに使ったHandlerが必ず関わる。 Handler.dispatchMessage() は、メッセージにコールバックが設定されていればそれを呼び、でなければHandler.handleMessage()を呼びだす。Handlerの派生クラスを作成することでコールバックより効率の良いメッセージハンドリングが可能になるわけだ。 MessageQueue MessageQueueはMessage内部のリンク構造を管理することでヒープ管理コストを軽減している。MessageQueue.enqueueMessage のアクセス権はpackage であるため、ユーザが直接利用することはできない。 メッセージは処理時刻順にキューのなかでソートされている。 addIdleHandler() でidleHandlerを複数登録できる。 用途 Activity の onCreate() で Looper.prepare() してみると 例外がでて Only one Looper may be created per thread というエラーメッセージが得られる。 アプリケーションのメインスレッドがLooperを使っていることは間違いない。 メインスレッド上でLooper.myLooper()を使用してLooperオブジェクトを取得して、 それを扱うHandlerを構築すれば、他のスレッドから任意のcallbackをメインスレッド上で動作させることができる。 これはIntentを使うよりもスマートなやり方だ。 おまけ WindowsのSendMessageや J2SEのSwingUtilities.invokeAndWait にあるような 呼び出し側が待機して同期する機能は次のようなコードで実現できる。 Handlerにpostした後、待機するコード class InvokeKnock implements Runnable{ private InvokeKnock(){} private Runnable mCallback; private CountDownLatch mCount; @Override public void run(){ try{ mCallback.run(); }catch(Throwable e){ Log.e("InvokeKnock","error in callback.",e); } mCount.countDown(); } // スレッドのHandlerにcallbackをpostした後、その処理が終わるまで待つ public static void call(Handler h,Runnable callback){ // 呼び出し元と呼び出し先が同じスレッドならキューを通さずに直接実行する if( Looper.myLooper() == h.getLooper() ){ try{ callback.run(); }catch(Throwable e){ Log.e("InvokeKnock","error in callback.",e); } return; } // countDown()と組み合わせたRunnableをHandlerにポスト InvokeKnock iw = new InvokeKnock(); iw.mCallback = callback; iw.mCount = new CountDownLatch(1); h.post(iw); // 処理されるのを待つ try{ iw.mCount.await(); }catch(InterruptedException e){ Log.d("InvokeKnock","calling thread is interrupted while waiting."); Thread.currentThread().interrupt(); // 再送出 } } }; 使用例 (メインスレッド) handler = new Handler(Looper.myLooper()); (別スレッド) ... catch(final Throwable e){ InvokeKnock.call( handler,new Runnable(){ @Override public void run(){ onError(e); } });
https://w.atwiki.jp/bemanidbr/pages/1461.html
VERSION GENRE TITLE ARTIST bpm notes 属性 21 SPADA TRIBE CORE invoker Caladborg 195 3240 - 攻略・コメント 名前 コメント
https://w.atwiki.jp/sp12ex-hard/pages/214.html
GENRE TITLE ARTIST bpm notes エクハ難度 TRIBE CORE invoker Caladborg 195 1624 3 曲・譜面情報 既存難易度投票 IIDX ID書き込みは任意です。 既存難易度投票はツリーのどこでも構いません。コメントの先頭に、詐称(+1.1とカウント),強(+0.6とカウント),やや強(+0.3とカウント),中(±0とカウント),やや弱(-0.3とカウント),弱(-0.6とカウント),逆詐称(-1.1とカウント)を明記した上、半角スペース1つの後、理由を記載してください。(理由は必須ではありませんが、なるべく入力してください。) コメントミスの際は、その下へコメント欄に「コメントミスです。」とご記載ください。 難易度変更が決定した際、管理者がそのツリーに難易度変更したことを記載します。 その際、新たな難易度変更提案は親コメントへお願いします。 管理者の難易度変更コメントより後ろの同じツリー内の投票は無視されます。 ご了承ください。 詳しいことは、投票時のルールをご覧ください。 弱 - 0521-8561 2016-12-24 01 46 42 弱 - 9890-9132 2017-01-11 16 29 20 弱 - 名無しさん 2017-03-20 08 25 07 IIDX ID 攻略情報・コメント ID書き込みは任意です。 IIDX ID コメント すべてのコメントを見る
https://w.atwiki.jp/qkwiki/pages/139.html
【検索用:くいずのっくのやまもと|登録タグ:2019年 く 山本祥彰】 日本のKEK スイスのCERN QuizKnockの山本 関連動画 関連項目 山本祥彰
https://w.atwiki.jp/quotewiki-qk/pages/13.html
概要 クイズプレイヤー・伊沢拓司を編集長として創設された「楽しいから始まる学び」を提供するWebメディアで、東大発の知識集団として「学び」や「好奇心」をテーマにした数々のコンテンツを生み出し続ける。クイズをメインコンテンツとし、視聴者に楽しく学ぶ姿を見せることで幅広い層に支持されている。2019年4月に会社化。 東京大学を中心に、京都大学、早稲田大学、慶應義塾大学、東京理科大学、東京芸術大学などの現役大学生・大学院生や卒業生で構成。 Webサイトでは、「丁寧でカルトだが親しめる」をコンセプトに時事問題の解説記事や様々な難易度のクイズ記事を毎日配信し続けている。 2017年4月にYoutubeチャンネルを立ち上げ、メインチャンネルの登録者数は200万人を突破、累計動画再生回数は20億回超えとなっている。 メインチャンネルの他に、「QuizKnock会議中」「GameKnack」「QuizKnockと学ぼう」の3つのチャンネルを運営している。 また、「限界しりとりMobile」を筆頭としたアプリ開発や「High School Quiz Battle WHAT」などのイベント運営も手がける。 メンバー メンバー紹介はこちら。 関連リンク(外部) Webサイト Twitter Youtubeチャンネルリンク(外部) QuizKnock QuizKnock会議中 GameKnack QuizKnockと学ぼう
https://w.atwiki.jp/android/pages/38.html
Selector androidだとSelector.openが使えない。 W/dalvikvm( 540) No implementation found for native org/apache/harmony/luni/platform/OSNetworkSystem.createSocketImpl (Ljava/io/FileDescriptor;Z)V W/***( 540) java.lang.UnsatisfiedLinkError createSocketImpl W/***( 540) at org.apache.harmony.luni.platform.OSNetworkSystem.createSocketImpl(Native Method) W/***( 540) at org.apache.harmony.luni.platform.OSNetworkSystem.createSocket(OSNetworkSystem.java 80) W/***( 540) at org.apache.harmony.nio.internal.SocketChannelImpl. init (SocketChannelImpl.java 151) W/***( 540) at org.apache.harmony.nio.internal.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java 79) W/***( 540) at org.apache.harmony.nio.internal.PipeImpl$SinkChannelImpl. init (PipeImpl.java 160) W/***( 540) at org.apache.harmony.nio.internal.PipeImpl. init (PipeImpl.java 46) W/***( 540) at org.apache.harmony.nio.internal.SelectorProviderImpl.openPipe(SelectorProviderImpl.java 55) W/***( 540) at org.apache.harmony.nio.internal.SelectorImpl. init (SelectorImpl.java 99) W/***( 540) at org.apache.harmony.nio.internal.SelectorProviderImpl.openSelector(SelectorProviderImpl.java 63) W/***( 540) at java.nio.channels.Selector.open(Selector.java 48) SocketChannel SocketChannel単体だと使えるのかどうかは未確認。 Socket 普通のソケットは使える。非同期アクセスできないのでスレッドを余計に消費する書き方にならざるを得ない。 おまけ メインスレッドをブロックせずにソケットを使う例。 コード中で使っている InvokeKnockについては Looper を参照。 abstract class SocketManager{ // 派生クラスが実装するべきメソッド abstract protected void onError(Throwable e); abstract protected void onConnect(); abstract protected void onDisconnect(String reason); abstract protected void onRecvLine(String line); // 接続先の情報 protected String mRemoteHost; protected int mRemotePort; // 文字コード protected String mCharset; // メインスレッドのメッセージハンドラ protected Handler mHandler; // 受信スレッド protected Thread mThread; // ソケット protected Socket mSocket; // 進行状況 protected CountDownLatch mCloseWait = new CountDownLatch(3); // 切断理由 protected String mDisconnectReason; // 次に送信キューがカラになったら出力を閉じる protected boolean mOutputCloseGraceful = false; // シャットダウン関連の処理 protected void setDisconnectReason(final boolean bShutdownInput,final boolean bShutdownOutput,final String reason){ InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ // 切断理由がまだ設定されていないなら覚える if( mDisconnectReason == null ) mDisconnectReason = reason; // 入力のシャットダウン if( bShutdownInput !mSocket.isInputShutdown()){ try{ mSocket.shutdownInput(); }catch(Throwable e){} mCloseWait.countDown(); } // 出力のシャットダウン if( bShutdownOutput !mSocket.isOutputShutdown()){ try{ mSocket.shutdownOutput(); }catch(Throwable e){} mCloseWait.countDown(); } // シャットダウンを指定しなかった場合、 // この後に出力キューがカラになったら閉じる if( !bShutdownInput !bShutdownOutput ) mOutputCloseGraceful = true; } }); } ////////////////////////////////////////// // 出力処理 protected OutputStream mOutputStream; // 出力キューは行単位で、高優先と低優先の2つ protected ConcurrentLinkedQueue byte[] mSendQ1 = new ConcurrentLinkedQueue byte[] (); protected ConcurrentLinkedQueue byte[] mSendQ2 = new ConcurrentLinkedQueue byte[] (); // 行の末尾に付与する改行文字 public static final byte[] crlf = new byte[]{ 0x0d,0x0a }; // IRC用のFlood protection protected long timePreCall; protected long timePenaltyLeft; // Handler経由で定期的に出力 protected Runnable mWriter = new Runnable(){ @Override public void run(){ try{ // ソケットの出力が完了している if( mSocket.isOutputShutdown() ) return; // 前回呼ばれてから経過した時間 long now = SystemClock.uptimeMillis(); long delta = now - timePreCall; if( delta 0){ // ペナルティ時間を減らす timePenaltyLeft -= delta; if( timePenaltyLeft 0 ) timePenaltyLeft =0; } // キューの内容を出力 int nWrite =0; for(;;){ byte[] line = null; if( !mSendQ1.isEmpty() ){ if( timePenaltyLeft 0 ) break; line = mSendQ1.poll(); }else if( !mSendQ2.isEmpty() ){ if( timePenaltyLeft 0 ) break; line = mSendQ2.poll(); }else{ // キューがカラ if( mOutputCloseGraceful ){ // 出力完了 setDisconnectReason(false,true,null); return; } break; } mOutputStream.write(line); mOutputStream.write(crlf); mOutputStream.flush(); ++nWrite; timePenaltyLeft += 1000 + (line.length*1000/45); } // 少し待ってから再実行 mHandler.postDelayed(mWriter,300); }catch(final Throwable e){ setDisconnectReason(true,true,e.getMessage()); InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onError(e); } }); } } }; // 受信はreadがブロックするので別スレッド protected Runnable mReader = new Runnable(){ @Override public void run(){ try{ mSocket = new Socket(mRemoteHost,mRemotePort); try{ InputStream in = mSocket.getInputStream(); mOutputStream = new BufferedOutputStream(mSocket.getOutputStream()); // 接続成功 mCloseWait.countDown(); InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onConnect(); } }); mHandler.post(mWriter); int buf_size = 4096; int buf_used = 0; byte[] buf = new byte[buf_size]; byte[] buf2 = new byte[buf_size]; while( mDisconnectReason == null ){ if( buf_used = buf_size ){ setDisconnectReason(true,true,"too long line received."); break; } // 読めるだけ読むか、ブロックするかもしれないけど1バイト読む int delta = in.available(); delta = (delta =0?1 delta (buf_size-buf_used)?(buf_size-buf_used) delta); delta = in.read(buf,buf_used,delta); if( delta == -1 ){ setDisconnectReason(true,false,"end of input stream."); break; } // 改行で区切って文字コード変換 int line_start = 0; int buf_used_pre = buf_used; buf_used += delta; for(int i=buf_used_pre;i buf_used;++i){ if( buf[i] != 0x0d buf[i] != 0x0a ) continue; if( i-line_start 0 ){ final byte[] fBuffer = buf; final int fStart = line_start; final int fLength = i-line_start; InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ try{ // 受信データの文字コード変換 String line = new String(fBuffer,fStart,fLength,mCharset); // 通知 onRecvLine(line); }catch(UnsupportedEncodingException e){ onError(e); } } }); } line_start = i+1; } int new_used = buf_used - line_start; if( new_used 0 ){ // 残った部分をbuf2の先頭に移動する System.arraycopy( buf,line_start,buf2,0,new_used); // bufとbuf2をswap byte[] tmp=buf;buf=buf2;buf2=tmp; } buf_used = new_used; } // 受信ループ終了。 // 出力側も閉じられるのを待つ mCloseWait.await(); }catch(final Throwable e){ setDisconnectReason(true,true,e.getMessage()); InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onError(e); } }); }finally{ // 出力コールバックを停止する mHandler.removeCallbacks(mWriter); // ソケットを閉じる try{ mSocket.close(); }catch(Throwable e){} // 接続停止を通知する InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onDisconnect(mDisconnectReason); } }); } mSocket = null; }catch(final Throwable e){ InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onError(e); } }); return; } } }; // コンストラクタ public SocketManager(){} // 接続開始 public boolean start( Looper looper,String thread_name,String host,int port,String charset){ mRemoteHost = host; mRemotePort = port; mCharset = charset; mHandler = new Handler(looper); mThread = new Thread(mReader,thread_name); mThread.start(); return true; } // 接続停止 public void stop(String reason){ if( isAlive() ){ setDisconnectReason(true,true,reason); mThread.interrupt(); } } // 接続中か調べる public boolean isAlive(){ return mThread != null mThread.getState() != Thread.State.TERMINATED; } // 行をバイト配列に変換して、送信キューに追加 public void sendLine(boolean bPrior,String line){ try{ (bPrior?mSendQ1 mSendQ2).add( line.getBytes(mCharset)); }catch(final Throwable e){ InvokeKnock.call( mHandler,new Runnable(){ @Override public void run(){ onError(e); } }); } } } 利用側 mSocketManager = new SocketManager(){ @Override protected void onError(Throwable e){ Log.e("hoge","onError",e); } @Override protected void onConnect(){ Log.i("hoge","onConnect"); mSocketManager.sendLine(true,"NICK "+ conf_nickname); mSocketManager.sendLine(true,"USER "+conf_username+" 4 * "+conf_realname); } @Override protected void onDisconnect(String reason){ Log.i("hoge","onDisconnect reason="+reason); } @Override protected void onRecvLine(String line){ Log.i("hoge","onRecvLine "+line); } }; mSocketManager.start( Looper.myLooper(),"hoge SocketManager",host,port,charset);
https://w.atwiki.jp/bemani2sp/pages/4919.html
GENRE TITLE ARTIST bpm notes CLEAR RATE TRIBE CORE invoker Caladborg 195 1009 n%(yyyy/mm/dd) 攻略・コメント 名前 コメント
https://w.atwiki.jp/bemanidbr/pages/1460.html
VERSION GENRE TITLE ARTIST bpm notes 属性 21 SPADA TRIBE CORE invoker Caladborg 195 2948 - 攻略・コメント 名前 コメント
https://w.atwiki.jp/bemanidbr/pages/650.html
VERSION GENRE TITLE ARTIST bpm notes 属性 21 SPADA TRIBE CORE invoker Caladborg 195 1842 - 攻略・コメント 名前 コメント