<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1268225070885728651</id><updated>2012-02-17T00:28:17.391+09:00</updated><category term='linux'/><category term='サービス'/><category term='AR'/><category term='Software'/><category term='Hardware'/><category term='その他'/><category term='論文'/><category term='行ってきた'/><category term='java'/><category term='Android'/><category term='English'/><category term='読書'/><title type='text'>ayakix-lablog</title><subtitle type='html'>気になったハードウェア，ソフトウェア，サービス等の情報技術を紹介</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ayakix-lablog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>72</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-3667355569728371386</id><published>2011-09-22T11:11:00.008+09:00</published><updated>2011-09-22T15:58:39.206+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] GridView内に非同期で画像を表示する方法</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-3NtTs_EpkyE/TnqeVFXILgI/AAAAAAAADNI/jfQhbRSdg5Q/s1600/Untitled-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 171px;" src="http://1.bp.blogspot.com/-3NtTs_EpkyE/TnqeVFXILgI/AAAAAAAADNI/jfQhbRSdg5Q/s400/Untitled-2.png" alt="" id="BLOGGER_PHOTO_ID_5655006367170702850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-84CNPAoliSw/TnqeNigh9pI/AAAAAAAADNA/6mZjMQS4Xmg/s1600/Untitled-2.png"&gt;&lt;br /&gt;&lt;/a&gt;【構成】&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-5uxTBT3o240/TnqghSRumKI/AAAAAAAADNQ/9Gmw1asLD8U/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-22%2B11.09.28%2BAM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 277px; height: 337px;" src="http://4.bp.blogspot.com/-5uxTBT3o240/TnqghSRumKI/AAAAAAAADNQ/9Gmw1asLD8U/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-22%2B11.09.28%2BAM.png" alt="" id="BLOGGER_PHOTO_ID_5655008775819401378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;【AsyncGridViewActivity.java -メインアクティビティー】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.GridView;&lt;br /&gt;&lt;br /&gt;public class AsyncGridViewActivity extends Activity {&lt;br /&gt;private GridView gv;&lt;br /&gt;private List&lt;string&gt; urlList;&lt;br /&gt;&lt;br /&gt;/** Called when the activity is first created. */&lt;br /&gt;@Override&lt;br /&gt;public void onCreate(Bundle savedInstanceState) {&lt;br /&gt; super.onCreate(savedInstanceState);&lt;br /&gt; setContentView(R.layout.main);&lt;br /&gt; // グリッドビュー&lt;br /&gt; gv = (GridView) findViewById(R.id.gv);&lt;br /&gt; // ダウンロードURLリスト&lt;br /&gt; urlList = new ArrayList&lt;string&gt;();&lt;br /&gt;&lt;br /&gt; urlList.add("http://example.com/test.png");&lt;br /&gt;&lt;br /&gt; gv.setAdapter(new ImageGridViewAdapter(this, urlList));&lt;br /&gt; gv.invalidate();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【ImageDownloadTask.java -非同期の画像ダウンローダー】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedInputStream;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.net.URL;&lt;br /&gt;&lt;br /&gt;import android.graphics.Bitmap;&lt;br /&gt;import android.graphics.BitmapFactory;&lt;br /&gt;import android.os.Handler;&lt;br /&gt;import android.util.Log;&lt;br /&gt;import android.widget.ImageView;&lt;br /&gt;&lt;br /&gt;public class ImageDownloadTask {&lt;br /&gt;private ImageView iv;&lt;br /&gt;private String url;&lt;br /&gt;private Bitmap bitmap;&lt;br /&gt;&lt;br /&gt;public ImageDownloadTask(ImageView iv, String url){&lt;br /&gt; this.iv = iv;&lt;br /&gt; this.url = url;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void execute(){&lt;br /&gt; final Handler mHandler = new Handler();&lt;br /&gt; new Thread(new Runnable() {&lt;br /&gt;  public void run() {&lt;br /&gt;   bitmap = getBitmap(url);&lt;br /&gt;   if(bitmap == null) return;&lt;br /&gt;   // ポスト処理&lt;br /&gt;   mHandler.post(new Runnable() {&lt;br /&gt;    public void run() {&lt;br /&gt;     // 画像のセット&lt;br /&gt;     iv.setImageBitmap(bitmap);&lt;br /&gt;    }&lt;br /&gt;   });&lt;br /&gt;  }&lt;br /&gt; }).start();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * 画像のダウンロード&lt;br /&gt; */&lt;br /&gt;public Bitmap getBitmap(String url){&lt;br /&gt;    Bitmap bitmap = null;&lt;br /&gt;    try{&lt;br /&gt;  BufferedInputStream in = new BufferedInputStream((InputStream) (new URL(url)).getContent());&lt;br /&gt;  bitmap = BitmapFactory.decodeStream(in);&lt;br /&gt;  in.close();&lt;br /&gt; } catch (Exception ex){&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;    return bitmap;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【ImageGridViewAdapter - グリッドビューアダプター】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.view.LayoutInflater;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.ViewGroup;&lt;br /&gt;import android.widget.BaseAdapter;&lt;br /&gt;import android.widget.ImageView;&lt;br /&gt;&lt;br /&gt;public class ImageGridViewAdapter extends BaseAdapter {&lt;br /&gt;private List&lt;string&gt; urlList;&lt;br /&gt;private LayoutInflater inflater;&lt;br /&gt;&lt;br /&gt;static class ViewHolder{&lt;br /&gt; ImageView iv_image;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ImageGridViewAdapter(Context context, List&lt;string&gt; urlList) {&lt;br /&gt; this.urlList = urlList;&lt;br /&gt; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public View getView(int position, View convertView, ViewGroup parent) {&lt;br /&gt; View view = convertView;&lt;br /&gt; ViewHolder holder;&lt;br /&gt; if (view == null) {&lt;br /&gt;  holder = new ViewHolder();&lt;br /&gt;  view = inflater.inflate(R.layout.imagegridview, null);&lt;br /&gt;  // 画像&lt;br /&gt;  holder.iv_image = (ImageView) view.findViewById(R.id.imagegridview_iv_image);&lt;br /&gt;  // 画像の非同期DL&lt;br /&gt;  new ImageDownloadTask(holder.iv_image, urlList.get(position)).execute();&lt;br /&gt;  // 登録&lt;br /&gt;  view.setTag(holder);&lt;br /&gt; } else {&lt;br /&gt;  holder = (ViewHolder)view.getTag();&lt;br /&gt; }&lt;br /&gt; return view;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public long getItemId(int position) {&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public Object getItem(int position) {&lt;br /&gt; return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public int getCount() {&lt;br /&gt; return urlList.size();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【imagegridview.xml -グリッドビューの各要素のレイアウト定義】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;RelativeLayout&lt;br /&gt;xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:layout_width="wrap_content"&lt;br /&gt;android:layout_height="wrap_content"&amp;gt;&lt;br /&gt;&amp;lt;!-- 写真 --&amp;gt;&lt;br /&gt;&amp;lt;ImageView&lt;br /&gt; android:id="@+id/imagegridview_iv_image"&lt;br /&gt; android:layout_width="fill_parent"&lt;br /&gt; android:layout_height="fill_parent"&lt;br /&gt; android:adjustViewBounds="true"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【main.xml - メインアクティビティーのレイアウト定義】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;  android:orientation="vertical"&lt;br /&gt;  android:layout_width="fill_parent"&lt;br /&gt;  android:layout_height="fill_parent"&lt;br /&gt;  &amp;gt;&lt;br /&gt;&amp;lt;GridView&lt;br /&gt;    android:id="@+id/gv"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:verticalSpacing="10sp"&lt;br /&gt;    android:horizontalSpacing="10sp"&lt;br /&gt;    android:numColumns="4"&lt;br /&gt;    android:stretchMode="columnWidth"&lt;br /&gt;    android:gravity="center"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【AndroidManifest.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    package="com.ayakix"&lt;br /&gt;    android:versionCode="1"&lt;br /&gt;    android:versionName="1.0"&amp;gt;&lt;br /&gt;  &amp;lt;uses-sdk android:minSdkVersion="4" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"&amp;gt;&amp;lt;/uses-permission&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;application android:icon="@drawable/icon" android:label="@string/app_name"&amp;gt;&lt;br /&gt;      &amp;lt;activity android:name=".AsyncGridViewActivity"&lt;br /&gt;                android:label="@string/app_name"&amp;gt;&lt;br /&gt;          &amp;lt;intent-filter&amp;gt;&lt;br /&gt;              &amp;lt;action android:name="android.intent.action.MAIN" /&amp;gt;&lt;br /&gt;              &amp;lt;category android:name="android.intent.category.LAUNCHER" /&amp;gt;&lt;br /&gt;          &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;      &amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ポイントとなるImageDownloadTask.java内では、画像のダウンロード処理に対して、Handlerを使用しています。このプログラムを作成する前にはAsyncTaskを利用していたのですが、AsyncTaskは同時に処理できるタスク数が標準では5になっているみたいです（プールサイズが5）。そのため、多くの処理を並列に行えないため、Handlerを使いました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-3667355569728371386?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3667355569728371386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3667355569728371386'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/09/android-gridview.html' title='[Android] GridView内に非同期で画像を表示する方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-3NtTs_EpkyE/TnqeVFXILgI/AAAAAAAADNI/jfQhbRSdg5Q/s72-c/Untitled-2.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8875511649342979307</id><published>2011-09-22T10:18:00.005+09:00</published><updated>2011-09-22T10:25:31.785+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>AndroidのカメラプレビューでOverlayを表示する方法</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-lq5SXUFiwLI/TnqNXwrHyAI/AAAAAAAADMw/wKOpenY4apQ/s1600/IMAG0393.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 190px; height: 320px;" src="http://3.bp.blogspot.com/-lq5SXUFiwLI/TnqNXwrHyAI/AAAAAAAADMw/wKOpenY4apQ/s320/IMAG0393.jpg" alt="" id="BLOGGER_PHOTO_ID_5654987721459353602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;【構成】&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-YiGx5c20kEY/TnqNeWKlsuI/AAAAAAAADM4/ASJC98doLAI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-22%2B10.19.44%2BAM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 271px; height: 225px;" src="http://3.bp.blogspot.com/-YiGx5c20kEY/TnqNeWKlsuI/AAAAAAAADM4/ASJC98doLAI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-22%2B10.19.44%2BAM.png" alt="" id="BLOGGER_PHOTO_ID_5654987834602664674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;【MainActivity.java - メインアクティビティー】&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.ViewGroup.LayoutParams;&lt;br /&gt;import android.view.Window;&lt;br /&gt;import android.view.WindowManager;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;     super.onCreate(savedInstanceState);&lt;br /&gt;  getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);&lt;br /&gt;  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);&lt;br /&gt;  requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;  setContentView(new CameraView(this));&lt;br /&gt;  addContentView(new CameraOverlayView(this), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【CameraView.java - カメラサーフェースビュー】&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.graphics.Bitmap;&lt;br /&gt;import android.graphics.BitmapFactory;&lt;br /&gt;import android.graphics.Canvas;&lt;br /&gt;import android.hardware.Camera;&lt;br /&gt;import android.view.MotionEvent;&lt;br /&gt;import android.view.SurfaceHolder;&lt;br /&gt;import android.view.SurfaceView;&lt;br /&gt;&lt;br /&gt;public class CameraView extends SurfaceView implements SurfaceHolder.Callback, Camera.PictureCallback, Camera.AutoFocusCallback {&lt;br /&gt; private SurfaceHolder holder;&lt;br /&gt; private Camera camera;&lt;br /&gt;&lt;br /&gt; public CameraView(Context context) {&lt;br /&gt;  super(context);&lt;br /&gt;  holder = getHolder();&lt;br /&gt;  holder.addCallback(this);&lt;br /&gt;  holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void surfaceCreated(SurfaceHolder holder) {&lt;br /&gt;  try {&lt;br /&gt;   camera = Camera.open();&lt;br /&gt;   camera.setPreviewDisplay(holder);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {&lt;br /&gt;  camera.startPreview();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void surfaceDestroyed(SurfaceHolder holder) {&lt;br /&gt;  camera.setPreviewCallback(null);&lt;br /&gt;  camera.stopPreview();&lt;br /&gt;  camera.release();&lt;br /&gt;  camera = null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public boolean onTouchEvent(MotionEvent event) {&lt;br /&gt;  if (event.getAction()==MotionEvent.ACTION_DOWN) {&lt;br /&gt;   camera.autoFocus(this);&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onAutoFocus(boolean success, Camera camera) {&lt;br /&gt;  camera.autoFocus(null);&lt;br /&gt;  camera.takePicture(null, null, this);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void onPictureTaken(byte[] data, Camera camera) {&lt;br /&gt;  try {&lt;br /&gt;   BitmapFactory.Options options = new BitmapFactory.Options();&lt;br /&gt;   options.inSampleSize = 4;&lt;br /&gt;   Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);&lt;br /&gt;   // bitmap画像をカットする処理など&lt;br /&gt;   int w = bitmap.getWidth();&lt;br /&gt;   int h = bitmap.getHeight();&lt;br /&gt;   // 中央部分の四角形をカット&lt;br /&gt;   bitmap = cutBitmap(bitmap, (w-h)/2, 0, h, h);&lt;br /&gt;   // 90度回転&lt;br /&gt;   bitmap = rotateBitmap90(bitmap);&lt;br /&gt;   &lt;br /&gt;   // とりあえずもう一度カメラプレビュー&lt;br /&gt;   camera.startPreview();&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /*&lt;br /&gt;  * カット&lt;br /&gt;  */&lt;br /&gt; public Bitmap cutBitmap(Bitmap bmp,int x,int y,int w,int h) {&lt;br /&gt;  Bitmap result=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);&lt;br /&gt;  Canvas canvas=new Canvas(result);&lt;br /&gt;  canvas.drawBitmap(bmp,-x,-y,null);&lt;br /&gt;  return result;&lt;br /&gt; }&lt;br /&gt; /*&lt;br /&gt;  * 画像の回転 90度&lt;br /&gt;  */&lt;br /&gt; public Bitmap rotateBitmap90(Bitmap bmp) {&lt;br /&gt;  int w=bmp.getWidth();&lt;br /&gt;  int h=bmp.getHeight();&lt;br /&gt;  Bitmap result=Bitmap.createBitmap(h,w,Bitmap.Config.ARGB_8888);&lt;br /&gt;  Canvas canvas=new Canvas(result);&lt;br /&gt;  canvas.rotate(90,0,0);&lt;br /&gt;  canvas.drawBitmap(bmp,0,-h,null);&lt;br /&gt;  return result;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【CameraOverlayView.java - オーバーレイビュー】&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.graphics.Canvas;&lt;br /&gt;import android.graphics.Color;&lt;br /&gt;import android.graphics.Paint;&lt;br /&gt;import android.view.View;&lt;br /&gt;&lt;br /&gt;public class CameraOverlayView extends View {&lt;br /&gt; private int width, height;&lt;br /&gt;&lt;br /&gt; public CameraOverlayView(Context context) {&lt;br /&gt;  super(context);&lt;br /&gt;  setFocusable(true);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onSizeChanged(int w, int h, int oldw, int oldh){&lt;br /&gt;  // ビューのサイズを取得&lt;br /&gt;  width= w;&lt;br /&gt;  height= h;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * 描画処理&lt;br /&gt;  */&lt;br /&gt; @Override&lt;br /&gt; protected void onDraw(Canvas canvas) {&lt;br /&gt;  super.onDraw(canvas);&lt;br /&gt;  // 背景色を設定&lt;br /&gt;  canvas.drawColor(Color.TRANSPARENT);&lt;br /&gt;&lt;br /&gt;  // 描画するための線の色を設定&lt;br /&gt;  Paint paint = new Paint();&lt;br /&gt;  paint.setStyle(Paint.Style.FILL);&lt;br /&gt;  paint.setARGB(100, 0, 0, 0);&lt;br /&gt;&lt;br /&gt;  // 上枠表示&lt;br /&gt;  canvas.drawRect(0, 0, (width-height)/2, height, paint);&lt;br /&gt;  // 下枠表示&lt;br /&gt;  canvas.drawRect((width-height)/2 + height, 0, width, height, paint);&lt;br /&gt;&lt;br /&gt;  // 中央十字憑依時&lt;br /&gt;  int len = height / 10;&lt;br /&gt;  paint.setARGB(255, 255, 0, 0);&lt;br /&gt;  canvas.drawLine(width/2, height/2-len, width/2, height/2+len, paint);&lt;br /&gt;  canvas.drawLine(width/2-len, height/2, width/2+len, height/2, paint);&lt;br /&gt;  // 円表示&lt;br /&gt;  paint.setStyle(Paint.Style.STROKE);&lt;br /&gt;  canvas.drawCircle(width/2, height/2, len*5, paint);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【AndroidManifest.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;      package=&amp;quot;com.ayakix&amp;quot;&lt;br /&gt;      android:versionCode=&amp;quot;1&amp;quot;&lt;br /&gt;      android:versionName=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;uses-sdk android:minSdkVersion=&amp;quot;4&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;uses-permission android:name=&amp;quot;android.permission.CAMERA&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;application android:icon=&amp;quot;@drawable/icon&amp;quot; android:label=&amp;quot;@string/app_name&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;activity android:name=&amp;quot;.MainActivity&amp;quot;&lt;br /&gt;                  android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;                  android:screenOrientation=&amp;quot;landscape&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;                &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;&lt;br /&gt;                &amp;lt;category android:name=&amp;quot;android.intent.category.LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;        &amp;lt;/activity&amp;gt;&lt;br /&gt;        &amp;lt;activity android:name=&amp;quot;.activity.CameraActivity&amp;quot; android:screenOrientation=&amp;quot;landscape&amp;quot;&amp;gt;&amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8875511649342979307?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8875511649342979307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8875511649342979307'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/09/androidoverlay.html' title='AndroidのカメラプレビューでOverlayを表示する方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-lq5SXUFiwLI/TnqNXwrHyAI/AAAAAAAADMw/wKOpenY4apQ/s72-c/IMAG0393.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7432964444159204538</id><published>2011-09-13T22:34:00.006+09:00</published><updated>2011-09-13T22:48:06.034+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidでシンプルなタブを作る方法</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-OQ3um-LJ4ZE/Tm9b_5Bqp6I/AAAAAAAADMg/FXQUYNrzgMY/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-13%2B10.32.33%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://3.bp.blogspot.com/-OQ3um-LJ4ZE/Tm9b_5Bqp6I/AAAAAAAADMg/FXQUYNrzgMY/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-13%2B10.32.33%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5651837210570958754" border="0" /&gt;&lt;/a&gt;【構成】&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-mrcji2tNo7Y/Tm9cKpaLm3I/AAAAAAAADMo/4kTwPNHKBw4/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-13%2B10.30.44%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 244px; height: 400px;" src="http://3.bp.blogspot.com/-mrcji2tNo7Y/Tm9cKpaLm3I/AAAAAAAADMo/4kTwPNHKBw4/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-13%2B10.30.44%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5651837395357375346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;【SimpleCustomTabActivity.java - メインとなるActivity】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.TabActivity;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.LayoutInflater;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.widget.FrameLayout;&lt;br /&gt;import android.widget.TabHost;&lt;br /&gt;import android.widget.TextView;&lt;br /&gt;&lt;br /&gt;public class SimpleCustomTabActivity extends TabActivity {&lt;br /&gt;  @Override&lt;br /&gt;  public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;      super.onCreate(savedInstanceState);&lt;br /&gt;      setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;      TabHost tabHost = getTabHost();&lt;br /&gt;      tabHost.getTabWidget().setDividerDrawable(R.drawable.tabdivider);&lt;br /&gt;&lt;br /&gt;      // タブの初期化&lt;br /&gt;      View v1 = new MyView(this, "AA");&lt;br /&gt;      tabHost.addTab(tabHost.newTabSpec("AA")&lt;br /&gt;              .setIndicator(v1)&lt;br /&gt;              .setContent(new Intent(this, SubActivity.class)));&lt;br /&gt;      View v2 = new MyView(this, "BB");&lt;br /&gt;      tabHost.addTab(tabHost.newTabSpec("BB")&lt;br /&gt;              .setIndicator(v2)&lt;br /&gt;              .setContent(new Intent(this, SubActivity.class)));&lt;br /&gt;      View v3 = new MyView(this, "CC");&lt;br /&gt;      tabHost.addTab(tabHost.newTabSpec("CC")&lt;br /&gt;              .setIndicator(v3)&lt;br /&gt;              .setContent(new Intent(this, SubActivity.class)));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private class MyView extends FrameLayout {&lt;br /&gt;      private LayoutInflater inflater;&lt;br /&gt;      public MyView(Context context) {&lt;br /&gt;          super(context);&lt;br /&gt;          inflater = LayoutInflater.from(context);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public MyView(Context context, String title) {&lt;br /&gt;          this(context);&lt;br /&gt;          View v = inflater.inflate(R.layout.tabwidget, null);&lt;br /&gt;          TextView tv = (TextView) v.findViewById(R.id.tabwidget_tv);&lt;br /&gt;          tv.setText(title);&lt;br /&gt;          addView(v);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【SubActivity - タブコンテンツとなるActivity】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class SubActivity extends Activity{&lt;br /&gt;  @Override&lt;br /&gt;  public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;      super.onCreate(savedInstanceState);&lt;br /&gt;      setContentView(R.layout.sub);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【tabback.xml - タブの背景】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;   &amp;lt;!-- 選択時 --&amp;gt;&lt;br /&gt;   &amp;lt;item android:state_selected="true"&amp;gt;&lt;br /&gt;       &amp;lt;shape android:shape="rectangle"&amp;gt;&lt;br /&gt;           &amp;lt;solid&lt;br /&gt;               android:color="#FF33CC33"&lt;br /&gt;           /&amp;gt;&lt;br /&gt;           &amp;lt;!-- 角を丸める --&amp;gt;&lt;br /&gt;           &amp;lt;corners&lt;br /&gt;               android:radius="50sp"&lt;br /&gt;           /&amp;gt;&lt;br /&gt;       &amp;lt;/shape&amp;gt;&lt;br /&gt;   &amp;lt;/item&amp;gt;  &lt;br /&gt;   &amp;lt;!-- 非選択時 --&amp;gt;&lt;br /&gt;   &amp;lt;item android:state_selected="false"&amp;gt;&lt;br /&gt;       &amp;lt;shape android:shape="rectangle"&amp;gt;&lt;br /&gt;           &amp;lt;solid&lt;br /&gt;               android:color="#FF3333CC"&lt;br /&gt;           /&amp;gt;&lt;br /&gt;       &amp;lt;/shape&amp;gt;&lt;br /&gt;   &amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/selector&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【tabdivider.xml - タブ間の調整】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;shape&lt;br /&gt;   xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   android:shape="rectangle" &amp;gt;&lt;br /&gt;   &amp;lt;size&lt;br /&gt;        android:width="20px"&lt;br /&gt;   /&amp;gt;&lt;br /&gt;   &amp;lt;solid&lt;br /&gt;        android:color="#00000000"&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;/shape&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【main.xml - SimpleCustomTabActivityの画面構成】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;TabHost&lt;br /&gt;   xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   android:id="@android:id/tabhost"&lt;br /&gt;   android:layout_width="fill_parent"&lt;br /&gt;   android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;   &amp;lt;LinearLayout&lt;br /&gt;       android:orientation="vertical"&lt;br /&gt;       android:layout_width="fill_parent"&lt;br /&gt;       android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;       &amp;lt;TabWidget&lt;br /&gt;           android:id="@android:id/tabs"&lt;br /&gt;           android:layout_width="fill_parent"&lt;br /&gt;           android:layout_height="50sp"&lt;br /&gt;           android:layout_marginTop="10sp"&lt;br /&gt;           android:layout_marginLeft="10sp"&lt;br /&gt;           android:layout_marginRight="10sp"/&amp;gt;&lt;br /&gt;       &amp;lt;FrameLayout&lt;br /&gt;           android:id="@android:id/tabcontent"&lt;br /&gt;           android:layout_width="fill_parent"&lt;br /&gt;           android:layout_height="fill_parent" /&amp;gt;&lt;br /&gt;   &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&amp;lt;/TabHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【sub.xml - SubActivityの画面構成】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt;   xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   android:orientation="vertical"&lt;br /&gt;   android:layout_width="fill_parent"&lt;br /&gt;   android:layout_height="fill_parent"&lt;br /&gt;   android:background="#FF33CC33"&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【tabwidget.xml - タブの画面構成】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;LinearLayout&lt;br /&gt;   xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   android:orientation="vertical"&lt;br /&gt;   android:layout_width="fill_parent"&lt;br /&gt;   android:layout_height="fill_parent"&lt;br /&gt;   android:gravity="center"&lt;br /&gt;   android:background="@drawable/tabback"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;TextView&lt;br /&gt;       android:id="@+id/tabwidget_tv"&lt;br /&gt;       android:layout_width="wrap_content"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【styles.xml - スタイルの定義】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;   &amp;lt;style name="NoShadowTheme" parent="@android:style/Theme.Light"&amp;gt;&lt;br /&gt;       &amp;lt;item name="android:windowContentOverlay"&amp;gt;@null&amp;lt;/item&amp;gt;&lt;br /&gt;   &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【AndroidManifest.xml - マニフェストファイル】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;manifest&lt;br /&gt;   xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   package="com.ayakix"&lt;br /&gt;   android:versionCode="1"&lt;br /&gt;   android:versionName="1.0"&amp;gt;&lt;br /&gt;   &amp;lt;uses-sdk android:minSdkVersion="4" /&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;application&lt;br /&gt;       android:icon="@drawable/icon"&lt;br /&gt;       android:label="@string/app_name"&lt;br /&gt;       android:theme="@style/NoShadowTheme"&amp;gt;&lt;br /&gt;       &amp;lt;activity&lt;br /&gt;           android:name=".SimpleCustomTabActivity"&lt;br /&gt;           android:label="@string/app_name"&amp;gt;&lt;br /&gt;           &amp;lt;intent-filter&amp;gt;&lt;br /&gt;               &amp;lt;action&lt;br /&gt;                   android:name="android.intent.action.MAIN" /&amp;gt;&lt;br /&gt;               &amp;lt;category&lt;br /&gt;                   android:name="android.intent.category.LAUNCHER" /&amp;gt;&lt;br /&gt;           &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;       &amp;lt;/activity&amp;gt;&lt;br /&gt;       &amp;lt;activity&lt;br /&gt;           android:name=".SubActivity"&amp;gt;&lt;br /&gt;       &amp;lt;/activity&amp;gt;&lt;br /&gt;   &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ポイントとなるのは、テーマを設定しているところ。デフォルトのテーマでは、タブとコンテンツの間にドロップシャドウがついてしまう。android:windowContentOverlayをnullにしたテーマを適応することで、ドロップシャドウを無効にする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7432964444159204538?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7432964444159204538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7432964444159204538'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/09/android_13.html' title='Androidでシンプルなタブを作る方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-OQ3um-LJ4ZE/Tm9b_5Bqp6I/AAAAAAAADMg/FXQUYNrzgMY/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-13%2B10.32.33%2BPM.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1552742427101726455</id><published>2011-09-06T18:58:00.004+09:00</published><updated>2011-09-06T19:08:32.286+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidで複数ボタンから１つだけ選択するUIの実現</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-fl99NGHT5TU/TmXv6zWqJ_I/AAAAAAAADMM/uG_Wx1ASYCc/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B7.02.11%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 127px;" src="http://1.bp.blogspot.com/-fl99NGHT5TU/TmXv6zWqJ_I/AAAAAAAADMM/uG_Wx1ASYCc/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B7.02.11%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5649185101102852082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;少しタイトルがわかりにくいですが、複数のボタンから一つ選択すると、他のボタンは非選択状態になると言ったUIの実現方法です。&lt;br /&gt;これは、ラジオボタンからチェックするボタンを消し、背景画像を用意することで実現できます。&lt;br /&gt;&lt;br /&gt;【構成】&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-HbSFS3WqO84/TmXxDrmRV2I/AAAAAAAADMU/HoIsbzPk4kI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B7.02.54%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 218px; height: 320px;" src="http://3.bp.blogspot.com/-HbSFS3WqO84/TmXxDrmRV2I/AAAAAAAADMU/HoIsbzPk4kI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B7.02.54%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5649186353151301474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;【MainActivity.java】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends Activity {&lt;br /&gt;  /** Called when the activity is first created. */&lt;br /&gt;  @Override&lt;br /&gt;  public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;      super.onCreate(savedInstanceState);&lt;br /&gt;      setContentView(R.layout.main);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【main.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;  android:orientation="vertical"&lt;br /&gt;  android:layout_width="fill_parent"&lt;br /&gt;  android:layout_height="fill_parent"&lt;br /&gt;  &amp;gt;&lt;br /&gt;&amp;lt;RadioGroup&lt;br /&gt; android:layout_width="fill_parent"&lt;br /&gt; android:layout_height="wrap_content"&lt;br /&gt; android:layout_centerVertical="true"&lt;br /&gt; android:orientation="horizontal"&amp;gt;&lt;br /&gt; &amp;lt;RadioButton android:id="@+id/rb_left"&lt;br /&gt;  android:text="Left"&lt;br /&gt;  android:layout_width="wrap_content"&lt;br /&gt;  android:layout_height="wrap_content"&lt;br /&gt;  android:checked="true"&lt;br /&gt;  android:layout_weight="1"&lt;br /&gt;  android:button="@null"&lt;br /&gt;  android:background="@drawable/back" /&amp;gt;&lt;br /&gt; &amp;lt;RadioButton android:id="@+id/rb_center"&lt;br /&gt;  android:text="Center"&lt;br /&gt;  android:layout_width="wrap_content"&lt;br /&gt;  android:layout_height="wrap_content"&lt;br /&gt;  android:layout_weight="1"&lt;br /&gt;  android:button="@null"&lt;br /&gt;  android:background="@drawable/back" /&amp;gt;&lt;br /&gt; &amp;lt;RadioButton android:id="@+id/rb_right"&lt;br /&gt;  android:text="Right"&lt;br /&gt;  android:layout_width="wrap_content"&lt;br /&gt;  android:layout_height="wrap_content"&lt;br /&gt;  android:layout_weight="1"&lt;br /&gt;  android:button="@null"&lt;br /&gt;  android:background="@drawable/back" /&amp;gt;&lt;br /&gt;&amp;lt;/RadioGroup&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;※android:button="@null"とすることで、ラジオボタンのチェックするボタンが表示されなくなり、自分で設定する背景であるandroid:background="@drawable/back"のみが表示されるようになります。&lt;br /&gt;&lt;br /&gt;【back.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&amp;gt;&lt;br /&gt;  &amp;lt;item android:state_checked="false"&amp;gt;&lt;br /&gt;   &amp;lt;color android:color="#FFFF0000" /&amp;gt;&lt;br /&gt;  &amp;lt;/item&amp;gt;&lt;br /&gt;  &amp;lt;item android:state_checked="true"&amp;gt;&lt;br /&gt;   &amp;lt;color android:color="#FF00FF00" /&amp;gt;&lt;br /&gt;  &amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/selector&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;※falseの場合には非選択状態の背景を、trueの場合には選択状態の背景を設定します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1552742427101726455?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1552742427101726455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1552742427101726455'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/09/androidui.html' title='Androidで複数ボタンから１つだけ選択するUIの実現'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-fl99NGHT5TU/TmXv6zWqJ_I/AAAAAAAADMM/uG_Wx1ASYCc/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B7.02.11%2BPM.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8076321879260638424</id><published>2011-09-06T18:12:00.011+09:00</published><updated>2011-09-06T19:09:18.585+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidのタブ間スペースを調整する方法</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-MtQ66-CgO1s/TmXmNVpt5YI/AAAAAAAADL8/Kxo-I5uU_fw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B6.11.12%2BPM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 221px; height: 241px;" src="http://2.bp.blogspot.com/-MtQ66-CgO1s/TmXmNVpt5YI/AAAAAAAADL8/Kxo-I5uU_fw/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B6.11.12%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5649174424430962050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Androidでタブを使う際に、タブ間のスペースを調整する方法についてのメモ。&lt;br /&gt;&lt;br /&gt;Androidでデフォルトのタブウィジェットを使うとタブ間適度なスペースを設けてくれますが、カスタムタブを利用すると、スペースがなくなり、タブ同士がくっついてしまいます。&lt;br /&gt;TabWidgetに対してDividerをセットすることで調節可能となります。&lt;br /&gt;&lt;br /&gt;【構成】&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-tdv9KpWS_UM/TmXm4h5YIAI/AAAAAAAADME/0YEdvBn5yf8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B6.09.20%2BPM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 186px; height: 249px;" src="http://2.bp.blogspot.com/-tdv9KpWS_UM/TmXm4h5YIAI/AAAAAAAADME/0YEdvBn5yf8/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B6.09.20%2BPM.png" alt="" id="BLOGGER_PHOTO_ID_5649175166452244482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;【MainActivity.java】&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.TabActivity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.widget.TabHost;&lt;br /&gt;&lt;br /&gt;public class MainActivity extends TabActivity {&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;     super.onCreate(savedInstanceState);&lt;br /&gt;     setContentView(R.layout.main);&lt;br /&gt;  &lt;br /&gt;     TabHost tabHost = getTabHost();&lt;br /&gt;     // Dividerをセットする&lt;br /&gt;     tabHost.getTabWidget().setDividerDrawable(R.drawable.tabdivider);&lt;br /&gt;  &lt;br /&gt;     // タブの初期化&lt;br /&gt;tabHost.addTab(tabHost.newTabSpec("AA")&lt;br /&gt;  .setIndicator("AA")&lt;br /&gt;  .setContent(R.id.content));&lt;br /&gt;tabHost.addTab(tabHost.newTabSpec("BB")&lt;br /&gt;  .setIndicator("BB")&lt;br /&gt;  .setContent(R.id.content));&lt;br /&gt;tabHost.addTab(tabHost.newTabSpec("CC")&lt;br /&gt;  .setIndicator("CC")&lt;br /&gt;  .setContent(R.id.content));&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【main.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;   android:orientation="vertical"&lt;br /&gt;   android:layout_width="fill_parent"&lt;br /&gt;   android:layout_height="fill_parent"&lt;br /&gt;   &amp;gt;&lt;br /&gt;&amp;lt;TabHost&lt;br /&gt; xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt; android:id="@android:id/tabhost"&lt;br /&gt; android:layout_width="fill_parent"&lt;br /&gt; android:layout_height="fill_parent"&amp;gt;&lt;br /&gt; &amp;lt;TabWidget&lt;br /&gt;  android:id="@android:id/tabs"&lt;br /&gt;  android:layout_width="fill_parent"&lt;br /&gt;  android:layout_height="fill_parent" /&amp;gt;&lt;br /&gt; &amp;lt;FrameLayout&lt;br /&gt;  android:id="@android:id/tabcontent"&lt;br /&gt;  android:layout_width="fill_parent"&lt;br /&gt;  android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;  &amp;lt;LinearLayout &lt;br /&gt;   android:id="@+id/content"  &lt;br /&gt;   android:orientation="vertical"&lt;br /&gt;   android:layout_width="fill_parent"&lt;br /&gt;   android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;  &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt; &amp;lt;/FrameLayout&amp;gt;&amp;gt;&lt;br /&gt;&amp;lt;/TabHost&amp;gt;&lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;【tabdivider.xml】&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;shape&lt;br /&gt;xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;android:shape="rectangle" &amp;gt;&lt;br /&gt;&amp;lt;size&lt;br /&gt; android:width="20px"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;solid&lt;br /&gt; android:color="#00000000"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/shape&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;※widthの値を変更することにより、タブ間のスペースを調整できます。また、colorを変更することにより、色を変更できます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8076321879260638424?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8076321879260638424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8076321879260638424'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/09/android.html' title='Androidのタブ間スペースを調整する方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MtQ66-CgO1s/TmXmNVpt5YI/AAAAAAAADL8/Kxo-I5uU_fw/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2011-09-06%2B6.11.12%2BPM.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7704396746962789486</id><published>2011-08-09T10:02:00.002+09:00</published><updated>2011-08-09T10:06:25.705+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>FacebookにAndroidアプリのキーハッシュを登録する際の注意点</title><content type='html'>自前のAndroidからFacebookにアクセスするためには，Facebookページより開発者として登録し，アプリIDを取得する必要があります．&lt;br /&gt;その後，鍵のハッシュ値をFacebookに登録する必要があります．&lt;br /&gt;&lt;br /&gt;アプリIDの取得方法については下記ページを参照ください．&lt;br /&gt;&lt;a href="http://oneworld-inc.jp/blog/?p=14" target="_blank"&gt;Androidで、Facebook SDK を使ってみた。 - OneWorldの開発ブログ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ローカル環境下でデバッグするためには，下記コマンドにより，生成されたキーハッシュをFacebookの開発者ページより登録することで，アクセス可能となります．&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);font-family:webdings;" &gt;keytool -exportcert -alias androiddebugkey -keystore "C:\debug.keystore" | openssl.exe  sha1 -binary | openssl.exe base64&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;「debug.keystore」の位置については，Eclipse⇒Window⇒Preferences⇒Android⇒Buildを参照し，パスを修正してください．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;アプリケーションをマーケット等で一般公開するためには，デフォルトで用意されているデバッグ用の鍵ではなく，自分独自の鍵を使ってアプリケーションに署名する必要があります．&lt;br /&gt;&lt;br /&gt;独自の鍵の生成方法については下記ページを参照ください．&lt;br /&gt;&lt;a href="http://japan.internet.com/column/developer/20090213/26.html" target="_blank"&gt;Androidアプリケーションを公開するために：署名と配置の方法 / DevX - japan.internet.com コラム&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;「自分独自の鍵を使ってアプリケーションに署名する」と言っても，使用するコマンドは同じです．&lt;br /&gt;ただ，aliasの値（ここでは，XXXXX）として，独自の鍵を生成した際のaliasを指定する必要があります．&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);font-family:webdings;" &gt;keytool -exportcert -alias XXXXX -keystore "C:\debug.keystore" | openssl.exe  sha1 -binary | openssl.exe base64&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ちなみに，鍵のaliasを忘れた際は，下記コマンドにより，鍵の情報を得ることができます．&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);font-family:webdings;" &gt;keytool -list -v -keystore {keystoreファイル名}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ここで[別名]となっているものがこの鍵のaliasとなります．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;なお，鍵ファイルはバイナリファイルとなっていますが，バイナリエディタ等で閲覧できます．&lt;br /&gt;この際alias(別名)は先頭の文字です．&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7704396746962789486?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7704396746962789486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7704396746962789486'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/08/facebookandroid.html' title='FacebookにAndroidアプリのキーハッシュを登録する際の注意点'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7060865772913563799</id><published>2011-07-13T16:59:00.004+09:00</published><updated>2011-07-13T17:10:46.161+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>CiNiiで大学別の論文数を調べたみた</title><content type='html'>ふと気になったので，国立情報学研究所 &lt;a href="http://ci.nii.ac.jp/"&gt;論文情報ナビゲータCiNii&lt;/a&gt;で大学別論文数を調べてみた．&lt;br /&gt;&lt;br /&gt;調査方法としては「著者所属」ボックスに「○○大学」と日本語で大学名を記入し，その検索ヒット数を列挙した．&lt;br /&gt;※英語名では調べていません&lt;br /&gt;&lt;br /&gt;大学別上位TOP10はこのような結果になった．&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="368"&gt;&lt;colgroup&gt;&lt;col style="mso-width-source:userset;mso-width-alt:9472;width:222pt" width="296"&gt;  &lt;col style="width:54pt" width="72"&gt;  &lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt;width:222pt" height="18" width="296"&gt;東京大学&lt;/td&gt;   &lt;td style="width:54pt" align="right" width="72"&gt;129902&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;京都大学&lt;/td&gt;   &lt;td align="right"&gt;82690&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;大阪大学&lt;/td&gt;   &lt;td align="right"&gt;79520&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;東北大学&lt;/td&gt;   &lt;td align="right"&gt;68695&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;九州大学&lt;/td&gt;   &lt;td align="right"&gt;66401&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;名古屋大学&lt;/td&gt;   &lt;td align="right"&gt;58749&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;北海道大学&lt;/td&gt;   &lt;td align="right"&gt;53419&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;東京工業大学&lt;/td&gt;   &lt;td align="right"&gt;52128&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;神戸大学&lt;/td&gt;   &lt;td align="right"&gt;51812&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;日本大学&lt;/td&gt;   &lt;td align="right"&gt;46700&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;ちなみに「刊行物名」ボックスに「情報処理学会論文誌」を入力した場合の上位TOP10は，下記のようになった．&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="293"&gt;&lt;colgroup&gt;&lt;col style="mso-width-source:userset;mso-width-alt:7072;width:166pt" width="221"&gt;  &lt;col style="width:54pt" width="72"&gt;  &lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt;width:166pt" height="18" width="221"&gt;東京大学&lt;/td&gt;   &lt;td style="width:54pt" align="right" width="72"&gt;749&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;大阪大学&lt;/td&gt;   &lt;td align="right"&gt;552&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;京都大学&lt;/td&gt;   &lt;td align="right"&gt;513&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;慶應義塾大学&lt;/td&gt;   &lt;td align="right"&gt;503&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;筑波大学&lt;/td&gt;   &lt;td align="right"&gt;463&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;電気通信大学&lt;/td&gt;   &lt;td align="right"&gt;366&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;東京工業大学&lt;/td&gt;   &lt;td align="right"&gt;316&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;九州大学&lt;/td&gt;   &lt;td align="right"&gt;300&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;名古屋大学&lt;/td&gt;   &lt;td align="right"&gt;286&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height:13.5pt" height="18"&gt;   &lt;td style="height:13.5pt" height="18"&gt;奈良先端科学技術大学院大学&lt;/td&gt;   &lt;td align="right"&gt;271&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href="http://ayakixlablog.web.fc2.com/cinii.xlsx"&gt;こちら&lt;/a&gt;にまとめたエクセルデータを置いておきます．&lt;br /&gt;※日本の大学779校，短期大406校について調べました．&lt;br /&gt;※「情報処理学会論文誌」での検索の際には，所属別で上位200位までの大学に対して調べています．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7060865772913563799?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7060865772913563799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7060865772913563799'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/cinii.html' title='CiNiiで大学別の論文数を調べたみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5894641865191087445</id><published>2011-07-07T17:30:00.004+09:00</published><updated>2011-07-07T17:39:30.501+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>[Android] チェックボックスでパスワードの表示/非表示を切り替える</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-hS6oIiY54Q8/ThVwuxdXQlI/AAAAAAAADKQ/hncs0mrtLWw/s1600/aa.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 333px;" src="http://2.bp.blogspot.com/-hS6oIiY54Q8/ThVwuxdXQlI/AAAAAAAADKQ/hncs0mrtLWw/s400/aa.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5626527258322092626" /&gt;&lt;/a&gt;&lt;br /&gt;パスワードをテキスト画面に入力する際，「******」のようにパスワードを隠ぺいして表示しますが，スマートフォンでは，入力がタップであるため，よく押し間違いをしてしまいます．&lt;br /&gt;そういう時には，仕方ないのでパスワードをそのまま表示します．ここでは，パスワードの表示&lt;br /&gt;・非表示をチェックボックスの状態で切り替える方法を紹介します．&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;main.xml&lt;/span&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;!--?xml version="1.0" encoding="utf-8"?--&gt;&lt;br /&gt;&lt;linearlayout android="http://schemas.android.com/apk/res/android" orientation="vertical" layout_width="fill_parent" layout_height="fill_parent"&gt;&lt;br /&gt;&lt;checkbox id="@+id/checkBox" layout_height="wrap_content" layout_width="fill_parent" text="Show password characters" layout_above="@+id/login2_et_pass"&gt;&lt;br /&gt;&lt;/checkbox&gt;&lt;br /&gt;&lt;br /&gt;&lt;edittext id="@+id/editText" layout_height="wrap_content" layout_width="fill_parent" singleline="true"&gt;&lt;br /&gt;&lt;/edittext&gt;&lt;br /&gt;&lt;/linearlayout&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ChangeInputTypeActivity.java&lt;/span&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.text.InputType;&lt;br /&gt;import android.view.View;&lt;br /&gt;import android.view.View.OnClickListener;&lt;br /&gt;import android.widget.CheckBox;&lt;br /&gt;import android.widget.EditText;&lt;br /&gt;&lt;br /&gt;public class ChangeInputTypeActivity extends Activity {&lt;br /&gt;private EditText et;&lt;br /&gt;private CheckBox cb;&lt;br /&gt;private int defaultIType;&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public void onCreate(Bundle savedInstanceState) {&lt;br /&gt; super.onCreate(savedInstanceState);&lt;br /&gt; setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt; et = (EditText) findViewById(R.id.editText);&lt;br /&gt; defaultIType = et.getInputType();&lt;br /&gt; et.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | defaultIType);&lt;br /&gt;&lt;br /&gt; cb = (CheckBox) findViewById(R.id.checkBox);&lt;br /&gt; cb.setOnClickListener(new OnClickListener() {&lt;br /&gt;  @Override&lt;br /&gt;  public void onClick(View v) {&lt;br /&gt;   if(cb. isChecked())&lt;br /&gt;    et.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | defaultIType);&lt;br /&gt;   else&lt;br /&gt;    et.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | defaultIType);&lt;br /&gt;   // チェックボックスをクリックするとカーソルが先頭にきてしまうので，末尾に戻す&lt;br /&gt;   et.setSelection(et.getText().length());&lt;br /&gt;  }&lt;br /&gt; });&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;パスワードの表示・非表示は，setInputTypeメソッドを用いて変更します．ここでは，初期値のInputTypeをdefaultITypeとして保持をしておき，チェックボックスがON/OFFされた場合に，27行目から30行目で変更処理を行います．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5894641865191087445?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5894641865191087445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5894641865191087445'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/android_07.html' title='[Android] チェックボックスでパスワードの表示/非表示を切り替える'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-hS6oIiY54Q8/ThVwuxdXQlI/AAAAAAAADKQ/hncs0mrtLWw/s72-c/aa.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5257551740925334661</id><published>2011-07-07T16:20:00.007+09:00</published><updated>2011-07-07T16:31:50.689+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>PIRKA for Androidを開発した</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-gi60IlSm2tc/ThVgICrXWKI/AAAAAAAADKI/lguGcQsDlug/s1600/aa.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 166px;" src="http://3.bp.blogspot.com/-gi60IlSm2tc/ThVgICrXWKI/AAAAAAAADKI/lguGcQsDlug/s400/aa.jpg" alt="" id="BLOGGER_PHOTO_ID_5626509000743278754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-_MYccfjRKHs/ThVe9dr41dI/AAAAAAAADKA/ltpJMUKN1DM/s1600/aa.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼概要&lt;/span&gt;&lt;br /&gt;PIRKAはスマートフォンアプリでゴミ拾いの写真を投稿してもらい、拡散し、新たなゴミ拾いを促すというシンプルなサービスです。&lt;br /&gt;あなたがゴミを拾うと、PIRKAの世界地図（ &lt;a href="http://www.e-pirka.com/" target="_blank"&gt;http://www.e-pirka.com&lt;/a&gt; ）がピカリと光ります。&lt;br /&gt;&lt;br /&gt;これまでにPIRKAはWebとiPhoneアプリで運営してきましたが、Androidアプリが欲しいというこうとで、開発しました。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼使い方&lt;/span&gt;&lt;br /&gt;1．&lt;a href="https://market.android.com/details?id=com.epirka.mobile.android&amp;amp;feature=search_result&amp;amp;hl"&gt;Android Marketから無料のアプリ&lt;/a&gt;&lt;pirka&gt;&lt;a href="https://market.android.com/details?id=com.epirka.mobile.android&amp;amp;feature=search_result&amp;amp;hl" target="_blank"&gt;をダウンロードしてください&lt;/a&gt;。&lt;br /&gt;2．PIRKAを起動し、email、username,passwordを登録してください。&lt;br /&gt;3．PickUp画面よりゴミ拾いの写真を撮影し、投稿してください。&lt;br /&gt;4．ゴミはお近くのゴミ箱に捨ててください。&lt;br /&gt;5．綺麗になった場所はMapにてご確認いただけます。&lt;br /&gt;6．TimeLineにて他の方が拾ったゴミにniceする事ができます。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;&lt;span style="color: rgb(0, 153, 0);"&gt;▼現状と今後&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;PIRKAは、Open Network LabのSeed Acceleratorにも採択されています。&lt;br /&gt;[関連]：&lt;a href="http://ayakix-lablog.blogspot.com/2011/07/onl-seed-accelerator.html%20target="&gt;ayakix-lablog: ONL Seed Accelerator キックオフイベントに行ってきた&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;現在、PIRKAは、世界中から350個以上のゴミをなくすことが出来ました。&lt;br /&gt;今後は、この勢いを更に加速させるために、皆様是非Android版をお使いください！&lt;br /&gt;そしてバグ報告を &lt;a href="http://twitter.com/#%21/ayakix" target="_blank"&gt;@ayakix&lt;/a&gt; までよろしくお願いします！ｗ&lt;/pirka&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5257551740925334661?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5257551740925334661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5257551740925334661'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/pirka-for-android.html' title='PIRKA for Androidを開発した'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-gi60IlSm2tc/ThVgICrXWKI/AAAAAAAADKI/lguGcQsDlug/s72-c/aa.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1894042656714674933</id><published>2011-07-05T09:14:00.005+09:00</published><updated>2011-07-05T09:41:16.513+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidで位置情報を取得する=&gt;失敗時には設定画面を開く</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/--teFYzDrZtc/ThJcK7SA2EI/AAAAAAAADIk/EWXeChoxwYE/s1600/device.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 273px; height: 243px;" src="http://4.bp.blogspot.com/--teFYzDrZtc/ThJcK7SA2EI/AAAAAAAADIk/EWXeChoxwYE/s400/device.png" alt="" id="BLOGGER_PHOTO_ID_5625660227320862786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;現在のAndroid携帯端末の多くは，位置を特定するために，GPS(衛星利用測位システム），または基地局の情報を用いて，位置を測量します．&lt;br /&gt;&lt;br /&gt;Androidでは，位置情報の取得手段を「ロケーション・プロバイダ」と呼びます．&lt;br /&gt;携帯端末の状態や，ユーザーによる設定によって，利用できるロケーション・プロバイダは変わります．&lt;br /&gt;&lt;br /&gt;そこで，位置情報を取得する際，先に精度の高いGPSを利用して，GPSが利用できない場合には，基地局情報を用いることとなります．&lt;br /&gt;&lt;br /&gt;また，GPSや基地局情報を利用可能状態にない時は，設定画面を開き，ユーザに利用可能にしてもらうことも必要かと思います．&lt;br /&gt;&lt;br /&gt;下記には，その二つの処理をするプログラムを記載します．&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;/* 位置情報の取得 */&lt;br /&gt;// ロケーションマネージャの取得&lt;br /&gt;LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);&lt;br /&gt;// 最適な位置情報プロバイダの選択&lt;br /&gt;// Criteriaを変更することで，各種設定変更可能&lt;br /&gt;String bs = lm.getBestProvider(new Criteria(), true);&lt;br /&gt;&lt;br /&gt;Location locate = lm.getLastKnownLocation(bs);&lt;br /&gt;if(locate == null){&lt;br /&gt; // 現在地が取得できなかった場合，GPSで取得してみる&lt;br /&gt; locate = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);&lt;br /&gt;}&lt;br /&gt;if(locate == null){&lt;br /&gt; // 現在地が取得できなかった場合，無線測位で取得してみる&lt;br /&gt; locate = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);&lt;br /&gt;}&lt;br /&gt;locate = null;&lt;br /&gt;if(locate != null){ // 現在地情報取得成功&lt;br /&gt; // 緯度の取得&lt;br /&gt; int latitude = (int) (locate.getLatitude() * 1e6);&lt;br /&gt; // 経度の取得&lt;br /&gt; int longitude = (int) (locate.getLongitude() * 1e6);&lt;br /&gt; Log.d("MYTAG", String.valueOf(latitude));&lt;br /&gt; Log.d("MYTAG", String.valueOf(longitude));&lt;br /&gt;} else {&lt;br /&gt; /* 現在地情報取得失敗処理 */&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/* 位置情報を取得できなかった場合，設定画面を開く */&lt;br /&gt;if(locate != null){&lt;br /&gt; /* 現在地情報取得成功処理 */&lt;br /&gt;} else {&lt;br /&gt; // 端末の位置情報設定画面へ遷移&lt;br /&gt; try {&lt;br /&gt;  startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));&lt;br /&gt; } catch (final ActivityNotFoundException e) {&lt;br /&gt;  // 位置情報設定画面がない端末の場合&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1894042656714674933?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1894042656714674933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1894042656714674933'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/android.html' title='Androidで位置情報を取得する=&gt;失敗時には設定画面を開く'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/--teFYzDrZtc/ThJcK7SA2EI/AAAAAAAADIk/EWXeChoxwYE/s72-c/device.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8417229969761446929</id><published>2011-07-04T16:34:00.004+09:00</published><updated>2011-07-04T16:48:04.921+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='行ってきた'/><title type='text'>Google Android Developer Lab Tokyo 2011に行ってきた</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-qaYGQ_etncM/ThFtZBI4_jI/AAAAAAAADII/_wpSIxSLJb8/s1600/IMAG0299.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://4.bp.blogspot.com/-qaYGQ_etncM/ThFtZBI4_jI/AAAAAAAADII/_wpSIxSLJb8/s400/IMAG0299.jpg" alt="" id="BLOGGER_PHOTO_ID_5625397686132342322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;7/3に六本木ヒルズ内のGoogle 東京オフィスで開催されたAndroid デベロッパーラボ 東京 2011に参加しました．&lt;br /&gt;&lt;a href="http://googledevjp.blogspot.com/2011/06/android-2011.html" target="_blank"&gt;詳細&lt;/a&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/document/pub?id=1p5-wnxA3M-LvVI2cUH5p6XltP8LUL8RFrUWGveVr3UQ" target="_blank"&gt;資料&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このイベントでは，Androidアプリ開発者を対象として，今年2月にリリースしたAndroid Honeycomb を中心に，セッション，コードラボが開催されました．&lt;br /&gt;&lt;br /&gt;セッションには，「Honeycombの紹介」「プログラミングTips」「スマートフォンとタブレット用UIデザイン」「Android Marketの新機能」等がありました．個人的に一番興味深かったのはタブレット用UIであるholographic theme "Holo" です．タブレットのUIは，スマートフォン用のUIを拡大すればよい訳でなく，やはりUIを再設計し直す必要があると思います．&lt;br /&gt;セッションのいくつかは英語で行われたのですが，通訳者のレベルが素晴らしく僕みたいに英語が苦手でも全く問題ありませんでしたｗ&lt;br /&gt;&lt;br /&gt;また，コードラボでは，参加者全員にOptimus Pad L-06Cが無償で配られ，資料の&lt;a href="https://docs.google.com/document/pub?id=1S_qckjHViEnZUAcQAlocdIxRjfCwKHE0YCNnrT-Okzc" target="_blank"&gt;Honeypad Codelab Steps&lt;/a&gt;に従って，実機を使ったハンズオンで開発しました．&lt;br /&gt;チューターの方もついていただき，安心して取り組むことが出来ました．&lt;br /&gt;&lt;br /&gt;今回のイベントに参加した開発者向けに３ヶ月後にフォローアップイベントがあり，そこでHoneyCombアプリを公開し，選定されたアプリは，特典として，Android Marketでフィーチャーされ，開発者にはGoogle I/O 2012のチケットがプレゼントされるみたいです．&lt;br /&gt;ライバルのレベルが高すぎる訳ですが，何か開発してみようと思います！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8417229969761446929?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8417229969761446929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8417229969761446929'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/google-android-developer-lab-tokyo-2011.html' title='Google Android Developer Lab Tokyo 2011に行ってきた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-qaYGQ_etncM/ThFtZBI4_jI/AAAAAAAADII/_wpSIxSLJb8/s72-c/IMAG0299.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5615360195007916273</id><published>2011-07-04T15:49:00.013+09:00</published><updated>2011-07-05T01:06:21.216+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='行ってきた'/><title type='text'>ONL Seed Accelerator キックオフイベントに行ってきた</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-rcek5XwzW_M/ThFvRxhMSQI/AAAAAAAADIQ/ZSwCTxJAMRw/s1600/Open-Network-Lab.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 63px;" src="http://3.bp.blogspot.com/-rcek5XwzW_M/ThFvRxhMSQI/AAAAAAAADIQ/ZSwCTxJAMRw/s400/Open-Network-Lab.png" alt="" id="BLOGGER_PHOTO_ID_5625399760703473922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Open Network Lab Seed Accelerator 第3期生のキックオフイベントに参加してきたのでご報告．&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼Open Network Labとは&lt;/span&gt;&lt;br /&gt;株式会社デジタルガレージ，株式会社ネットプライスドットコム，株式会社カカクコムが運営しており，&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;世界進出を視野に入れグローバルに活躍することを目標にインターネットを利用したビジネスでの企業を志すエンジニアや企業家を「Seed Accelerator」「Communitiy」活動を支援するプロジェクトです&lt;/span&gt;&lt;br /&gt;via &lt;a href="http://onlab.jp/index.html" target="_blank"&gt;Open Network Lab（オープンネットワークラボ）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;Seed Acceleratorとは&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;起業志向のエンジニアの短期育成を目的としたインキュベーションプログラムです。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;高い技術力と有望なビジネスプランを有する個人やチーム(1チーム最大3名迄)を公募します。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;選抜した個人やチームに対して、サーバー環境やオフィススペースといった施設を提供すると共に、経験豊富なエンジニアや起業家、経営者によるアドバイス（メンタリング）を行います。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;3カ月間の育成期間を経てプログラムを修了したチームには、国内外のベンチャーキャピタリストや起業家に、資金調達のためのアピールを行う機会を与えます。 &lt;/span&gt;&lt;br /&gt;via  &lt;a href="http://onlab.jp/contents/seed-accelerator.html" target="_blank"&gt;Open Network Lab / Seed Accelerator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;そこで何をするか？&lt;/span&gt;&lt;br /&gt;現在，私は小嶌不二夫氏（&lt;a href="http://twitter.com/#%21/kojimafujio" target="_blank"&gt;@kojimafujio&lt;/a&gt;）を代表とするPIRKA(ピリカ)に開発者として参加しています．&lt;br /&gt;PIRKAとは，ゴミ拾いを共有・発信し世界をきれいにするソーシャルネットワーキングサービスです．&lt;br /&gt;今回，このPIRKAがSeed Acceleratorに採択されました．そこで，7月から9月までのプログラム期間中にONLを拠点として、事業アイデアのブラッシュアップやプロトタイプの開発に取り組みます．&lt;br /&gt;また，それに伴いすごいメンターの方々（&lt;a href="http://onlab.jp/contents/mentor.html" target="_blank"&gt;Open Network Lab / Mentors&lt;/a&gt;）と話合いを設けることができます．&lt;br /&gt;&lt;a href="http://www.e-pirka.com/" target="_blank"&gt;PIRKA for Web&lt;/a&gt;&lt;br /&gt;&lt;a href="http://itunes.apple.com/jp/app/id434984120?mt=8&amp;amp;ls=1" target="_blank"&gt;PIRKA for iPhone&lt;/a&gt;&lt;a href="http://market.android.com/search?q=com.epirka.mobile.android" target="_blank"&gt;&lt;br /&gt;PIRKA for Android&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;▼&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);font-size:130%;" &gt;感想&lt;/span&gt;&lt;br /&gt;と言うことで，第3期生のキックオフイベントに参加してきました．&lt;br /&gt;他のチームも素晴らしいアイデアを持っており，また，とても個性的なメンバーで構成されていたため，すごい刺激を受けることができました．&lt;br /&gt;がんばるぞーーー！！！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5615360195007916273?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5615360195007916273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5615360195007916273'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/07/onl-seed-accelerator.html' title='ONL Seed Accelerator キックオフイベントに行ってきた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-rcek5XwzW_M/ThFvRxhMSQI/AAAAAAAADIQ/ZSwCTxJAMRw/s72-c/Open-Network-Lab.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8241048769674083225</id><published>2011-06-11T10:40:00.005+09:00</published><updated>2011-06-11T11:07:15.196+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android開発時のプロジェクトエラー</title><content type='html'>Androidの開発時に，JavaのソースやXMLファイルにエラーが出ていないにも関わらず，&lt;br /&gt;プロジェクト自体にエラーが出てしまう謎な現象に陥りました．&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-ExBIiKSs6Pg/TfLJzpE9ceI/AAAAAAAADHQ/73EH6phR_7o/s1600/error.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 229px; height: 342px;" src="http://4.bp.blogspot.com/-ExBIiKSs6Pg/TfLJzpE9ceI/AAAAAAAADHQ/73EH6phR_7o/s400/error.jpg" alt="" id="BLOGGER_PHOTO_ID_5616773574321598946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;こういう場合はプロジェクトをリフレッシュ/クリーンしたり，Eclipseを再起動することで直ることがありますが，それもダメ．&lt;br /&gt;&lt;br /&gt;結論から言うと，drawableの中に「default.png」という画像を格納していたのが原因でした．&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-sdnbF8vHeqk/TfLJ62gjJoI/AAAAAAAADHY/5EXZ_eaUPNQ/s1600/default.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 211px; height: 382px;" src="http://3.bp.blogspot.com/-sdnbF8vHeqk/TfLJ62gjJoI/AAAAAAAADHY/5EXZ_eaUPNQ/s400/default.jpg" alt="" id="BLOGGER_PHOTO_ID_5616773698186061442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;理由はたぶんJavaの予約語だからと思います．&lt;br /&gt;その他の予約語でも同様のエラーがでました．&lt;br /&gt;同様に，XMLファイル等も予約語のファイル名で作成しようとするとエラーがでます．&lt;br /&gt;&lt;br /&gt;また，画像のファイル名に大文字が含まれていてもエラーがでます．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;仕様ですっ！！！（キリッ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8241048769674083225?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8241048769674083225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8241048769674083225'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/06/android.html' title='Android開発時のプロジェクトエラー'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ExBIiKSs6Pg/TfLJzpE9ceI/AAAAAAAADHQ/73EH6phR_7o/s72-c/error.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5369603830926283621</id><published>2011-05-30T10:32:00.020+09:00</published><updated>2011-07-03T12:47:39.545+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='行ってきた'/><title type='text'>Cookpad 開発コンテスト24の表彰式に行ってきた</title><content type='html'>先日，Cookpad株式会社主催の第2回 開発コンテスト24に参加しましたが，光栄なことに第２位を受賞しましたので，白金台にあるCookpad株式会社にて開催された表彰式に参加しました．&lt;br /&gt;&lt;br /&gt;また，折角の機会なので，事務局様にお願いして事前にCookpadのオフィスを見学させてもらいました．（見学を快諾していただきありがとうございました）&lt;br /&gt;&lt;br /&gt;▼閑静な住宅街を抜けると，そこはおしゃれなオフィス入口&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-_tApxccGF-M/TeL0nHkwVhI/AAAAAAAADEw/uDsQhutoYMI/s1600/IMG_0878.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-_tApxccGF-M/TeL0nHkwVhI/AAAAAAAADEw/uDsQhutoYMI/s400/IMG_0878.JPG" alt="" id="BLOGGER_PHOTO_ID_5612317038542345746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼オフィス横にある暖かい雰囲気の談話＆ミーティングスペース&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-VciznzUNA_U/TeL1FvNDpbI/AAAAAAAADE4/U2AGBESd7TI/s1600/IMG_0880.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-VciznzUNA_U/TeL1FvNDpbI/AAAAAAAADE4/U2AGBESd7TI/s400/IMG_0880.JPG" alt="" id="BLOGGER_PHOTO_ID_5612317564576441778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼噂の温水器　存在感がすごいですｗ&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-odJZGrQC0yo/TeL1lkehohI/AAAAAAAADFA/aBxUP5bW5N0/s1600/IMG_0883.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-odJZGrQC0yo/TeL1lkehohI/AAAAAAAADFA/aBxUP5bW5N0/s320/IMG_0883.JPG" alt="" id="BLOGGER_PHOTO_ID_5612318111452733970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼オフィス横のまったりくつろぎスペース&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-GZsATVRNSLc/TeL2EFoWgcI/AAAAAAAADFI/5FFd2FuQBGo/s1600/IMG_0886.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://3.bp.blogspot.com/-GZsATVRNSLc/TeL2EFoWgcI/AAAAAAAADFI/5FFd2FuQBGo/s320/IMG_0886.JPG" alt="" id="BLOGGER_PHOTO_ID_5612318635748393410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼くつろぎスペースにはウクレレやら各種ボードゲームやら&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-cLHUvK7sSaA/TeL2O3vCm7I/AAAAAAAADFQ/LpAOy6z0PDM/s1600/IMG_0893.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-cLHUvK7sSaA/TeL2O3vCm7I/AAAAAAAADFQ/LpAOy6z0PDM/s400/IMG_0893.JPG" alt="" id="BLOGGER_PHOTO_ID_5612318820996914098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼くつろぎスペースからの外の風景　絶景！&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-l9GWqbWAcvk/TeL2qsh2ErI/AAAAAAAADFY/i9OoMkPIBQo/s1600/IMG_0895.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-l9GWqbWAcvk/TeL2qsh2ErI/AAAAAAAADFY/i9OoMkPIBQo/s400/IMG_0895.JPG" alt="" id="BLOGGER_PHOTO_ID_5612319299025113778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼各種お茶・お菓子も準備万端&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-OEjVzg2Ntvc/TeL21cJaNVI/AAAAAAAADFg/z5MIDOy8xsk/s1600/IMG_0901.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-OEjVzg2Ntvc/TeL21cJaNVI/AAAAAAAADFg/z5MIDOy8xsk/s400/IMG_0901.JPG" alt="" id="BLOGGER_PHOTO_ID_5612319483606218066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼表彰式風景&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-uijxBi23tOE/TeL3ECjm6OI/AAAAAAAADFo/xgfUpy0_skM/s1600/IMG_0903.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-uijxBi23tOE/TeL3ECjm6OI/AAAAAAAADFo/xgfUpy0_skM/s400/IMG_0903.JPG" alt="" id="BLOGGER_PHOTO_ID_5612319734434818274" border="0" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-JXYmdJeJWlo/TeL70o89NPI/AAAAAAAADGY/2cRC9o4nJbo/s1600/Picnic.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Ustreamで配信していました．ずっと公開されているかわかりませんが，下記から表彰式の映像を見ることができます．&lt;br /&gt;&lt;a href="http://www.ustream.tv/channel/24contest#utm_campaign=unknown&amp;amp;utm_source=3925376&amp;amp;utm_medium=social"&gt;USTREAM: 24 contest&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;▼壁一面にはホワイトボード（ワーキングスペースは撮影禁止でしたが同様に一面ホワイトボードです）&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-mniWYQErQx0/TeL3jwW8fcI/AAAAAAAADFw/pwJZKV7VlMw/s1600/IMG_0909.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-mniWYQErQx0/TeL3jwW8fcI/AAAAAAAADFw/pwJZKV7VlMw/s400/IMG_0909.JPG" alt="" id="BLOGGER_PHOTO_ID_5612320279305682370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼懇親会の料理　オシャレすぎておいしすぎて困りました&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-SWCRy_qEM8E/TeL3_ruOHHI/AAAAAAAADGA/dZEO0ukDX7Q/s1600/IMG_0920.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-SWCRy_qEM8E/TeL3_ruOHHI/AAAAAAAADGA/dZEO0ukDX7Q/s400/IMG_0920.JPG" alt="" id="BLOGGER_PHOTO_ID_5612320759097465970" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-I-1MlrYkMlI/TeL4C12PglI/AAAAAAAADGI/A86orZCUQaQ/s1600/IMG_0922.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-I-1MlrYkMlI/TeL4C12PglI/AAAAAAAADGI/A86orZCUQaQ/s400/IMG_0922.JPG" alt="" id="BLOGGER_PHOTO_ID_5612320813355074130" border="0" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-ZWTTbkLC62I/TeL4FjPir9I/AAAAAAAADGQ/weHvjOKPon8/s1600/IMG_0925.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-ZWTTbkLC62I/TeL4FjPir9I/AAAAAAAADGQ/weHvjOKPon8/s400/IMG_0925.JPG" alt="" id="BLOGGER_PHOTO_ID_5612320859900522450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼お土産のCookpadエコバッグ！かわいい&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-_St__RAFzug/TeL3yBn1ToI/AAAAAAAADF4/lrhfeIIc-Ds/s1600/IMG_0910.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-_St__RAFzug/TeL3yBn1ToI/AAAAAAAADF4/lrhfeIIc-Ds/s400/IMG_0910.JPG" alt="" id="BLOGGER_PHOTO_ID_5612320524458086018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;▼ワーキングスペース&lt;br /&gt;社員の人たちのデスク周りは撮影禁止だったのですが，設備的にも非常に良い印象を受けました．特にイスがリープチェアだったのが素晴らしいです！！働く人のことを大切に扱い少しでもよい環境を，という心遣いを感じることが出来ました．&lt;br /&gt;&lt;br /&gt;■感想&lt;br /&gt;Cookpadの環境・仕事・人はどれをとっても素晴らしく，一気にファンになりました．&lt;br /&gt;このような機会を設けてくださったことに感謝いたします．&lt;br /&gt;&lt;br /&gt;そんなCookpadに対して僕からのお願いは二つ．&lt;br /&gt;&lt;br /&gt;・料理に興味がある女性には，Cookpadはかなり愛用されていると思いますが，料理に興味がない男性を巻き込むようなサービス展開をしてくれればと思います．（もちろんこんなことはとっくに社内で議論されているとは思いますが）&lt;br /&gt;&lt;br /&gt;・開発コンテスト Season Ⅲ　期待しております！&lt;br /&gt;&lt;br /&gt;[スライド]&lt;br /&gt;&lt;div style="width: 500px; text-align: center;" id="__ss_8157281"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/RyotaAyaki/picnic-for-24contest2-cookpad" title="Picnic for 24contest2 @ Cookpad"&gt;Picnic for 24contest2 @ Cookpad&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/8157281" marginwidth="0" marginheight="0" frameborder="0" height="355" scrolling="no" width="425"&gt;&lt;/iframe&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;[関連記事]&lt;br /&gt;&lt;a href="http://ayakix-lablog.blogspot.com/2011/04/2-24.html"&gt;ayakix-lablog: 第2回 開発コンテスト24に参加しました&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5369603830926283621?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5369603830926283621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5369603830926283621'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/05/cookpad-24.html' title='Cookpad 開発コンテスト24の表彰式に行ってきた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-_tApxccGF-M/TeL0nHkwVhI/AAAAAAAADEw/uDsQhutoYMI/s72-c/IMG_0878.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-866360477018439506</id><published>2011-05-09T17:25:00.004+09:00</published><updated>2011-05-26T23:51:23.173+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>AndroidでBluetoothのアドレスを取得する</title><content type='html'>Bluetoothを使う際にアドレスを取得しようと思ったのですが，ハマってしまったのでエントリにします．&lt;br /&gt;&lt;br /&gt;環境は下記の通りです．&lt;br /&gt;HW:HTC Desire HD&lt;br /&gt;OS: Android 2.2&lt;br /&gt;&lt;br /&gt;Androidでは，ローカルのBluetoothデバイスを利用するためにBluetoothAdapter APIが用意されています．&lt;br /&gt;&lt;br /&gt;プログラムで実行したいことは，BluetoothAdapterオブジェクトを用いて，Bluetoothを利用可能状態にした後，そのアドレスを取得する，といった動作です．&lt;br /&gt;&lt;br /&gt;下記プログラムでは，onCreateメソッド内にて，BluetoothAdapterオブジェクトを生成し，そのisEnabledメソッドにより，BluetoothがON or OFFを判断します．そして，OFFの場合は，Intentを発行後，BluetoothをONにします．&lt;br /&gt;その後，getAddressメソッドを呼び出しアドレスを取得します．&lt;br /&gt;&lt;br /&gt;しかし，このgetAddressメソッドの戻り値は"UNKNOWN"となり，ここでエラーが発生します．&lt;br /&gt;&lt;br /&gt;この問題を解決し，正しいアドレスを取得するには，onActivityResultメソッドをオーバーライドし，この中で，getAddressメソッドを呼ぶ必要があります．&lt;br /&gt;&lt;br /&gt;初めはonCreateメソッド内で全処理を行っていたのですが，BluetoothをONにするのを待つことなく，getAddressメソッドが呼び出されたことが原因かと思います．&lt;br /&gt;&lt;br /&gt;そこで，RESULTを返すようにし，BluetoothをONにした後に呼び出されるonActivityResultメソッド内で処理を行います．&lt;br /&gt;&lt;br /&gt;※このプログラムではBluetoothをOFFにできないので，試した後は手動でOFFにしてください．&lt;pre class="java" name="code"&gt;package jp.ayakix;&lt;br /&gt;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.bluetooth.*;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.util.Log;&lt;br /&gt;import android.content.Intent;&lt;br /&gt;&lt;br /&gt;public class BluetoothTest extends Activity {&lt;br /&gt;private static final int REQUEST_ENABLE_BT = 3;&lt;br /&gt;private BluetoothAdapter bAdapter;&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public void onCreate(Bundle savedInstanceState) {&lt;br /&gt; super.onCreate(savedInstanceState);&lt;br /&gt; setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt; bAdapter = BluetoothAdapter.getDefaultAdapter();&lt;br /&gt;&lt;br /&gt; // デバイスがBluetoothを備えているか？&lt;br /&gt; if (bAdapter == null) {&lt;br /&gt;  Log.d("MYTAG", "Device does not support Bluetooth");&lt;br /&gt; } else {&lt;br /&gt;  // Bluetoothが利用可能状態か？&lt;br /&gt;  if (!bAdapter.isEnabled()) {&lt;br /&gt;   // 利用可能状態でない場合=&amp;gt;利用可能にする&lt;br /&gt;   Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);&lt;br /&gt;   startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // アドレスを取得できない&lt;br /&gt;  Log.d("MYTAG", bAdapter.getName());&lt;br /&gt;  Log.d("MYTAG", bAdapter.getAddress());&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;protected void onActivityResult(int requestCode, int resultCode, Intent data) {&lt;br /&gt; if (requestCode == REQUEST_ENABLE_BT) {&lt;br /&gt;  if (resultCode == RESULT_OK) {&lt;br /&gt;   Log.d("MYTAG", "Device can use Bluetooth");&lt;br /&gt;   // アドレスを取得できる&lt;br /&gt;   Log.d("MYTAG", bAdapter.getName());&lt;br /&gt;   Log.d("MYTAG", bAdapter.getAddress());&lt;br /&gt;  } else if (resultCode == RESULT_CANCELED) {&lt;br /&gt;   Log.d("MYTAG", "Device cannot use Bluetooth");&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-866360477018439506?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/866360477018439506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/866360477018439506'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/05/androidbluetooth.html' title='AndroidでBluetoothのアドレスを取得する'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8479584125525022368</id><published>2011-04-24T12:42:00.004+09:00</published><updated>2011-05-26T23:51:14.239+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>第2回 開発コンテスト24に参加しました</title><content type='html'>クックパッド株式会社が主催した&lt;a href="http://info.cookpad.com/24contest2"&gt;第２回開発コンテスト24&lt;/a&gt;に参加しました．&lt;br /&gt;&lt;br /&gt;これは，ある課題に対して24時間以内に成果物をオンライン上で提出するといった内容のコンテストです．&lt;br /&gt;&lt;br /&gt;今回のお題は&lt;br /&gt;&lt;div  style="color:red;"&gt;&lt;span style="font-size:large;"&gt;（普段の生活で）半径3m以内にいる人が困っていることを解決する &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;21時に課題が発表され翌日の21時までに提出する必要があります．&lt;br /&gt;私は下記のタイムスケジュールで取り組みました．&lt;br /&gt;21:00 - 23:30 アイデア出し&lt;br /&gt;23:30 - 00:00 休憩&lt;br /&gt;00:00 - 00:30 UI設計&lt;br /&gt;00:30 - 06:00 開発&lt;br /&gt;06:00 - 11:00 睡眠&lt;br /&gt;11:00 - 12:00 食事&lt;br /&gt;12:00 - 18:00 開発&lt;br /&gt;18:00 - 21:00 動画作成提出&lt;br /&gt;&lt;br /&gt;ちなみに実際の行動とスケジュールはほぼ一致していました．&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(224, 102, 102);"&gt;&lt;span style="font-size:large;"&gt;■アイデア出し&lt;/span&gt;&lt;/div&gt;・利用物：Powerpoint&lt;br /&gt;アイデア出しはパワポを使いました．下記にパワポの内容を示します．&lt;br /&gt;&lt;br /&gt;▼まず初めに自分の半径3m以内にいる人を列挙&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-kg9Z1hP7Pvo/TbOUZJLhMQI/AAAAAAAADB4/A-HhS1-ly7c/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25892.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-kg9Z1hP7Pvo/TbOUZJLhMQI/AAAAAAAADB4/A-HhS1-ly7c/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25892.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt; ▼半径3m以内にいる人が困っていそうなことを列挙&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZtBY81LPCPQ/TbOUZu3ZYaI/AAAAAAAADB8/-cSeVSFUf2U/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25893.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-ZtBY81LPCPQ/TbOUZu3ZYaI/AAAAAAAADB8/-cSeVSFUf2U/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25893.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Ip93sfAUcPk/TbOUaCg-r9I/AAAAAAAADCA/iH14Ef_eh8s/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25894.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-Ip93sfAUcPk/TbOUaCg-r9I/AAAAAAAADCA/iH14Ef_eh8s/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25894.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-G8VuyNQpW7o/TbOUatzMqvI/AAAAAAAADCE/0dYa0mmNWPY/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25895.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-G8VuyNQpW7o/TbOUatzMqvI/AAAAAAAADCE/0dYa0mmNWPY/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25895.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-PVhJ5qgr1qo/TbOUbYFUcLI/AAAAAAAADCI/5CqtUOL-fVY/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25896.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-PVhJ5qgr1qo/TbOUbYFUcLI/AAAAAAAADCI/5CqtUOL-fVY/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25896.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PcLlUHwFF-Q/TbOUb53C43I/AAAAAAAADCM/SO_LfOHFVYg/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25897.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-PcLlUHwFF-Q/TbOUb53C43I/AAAAAAAADCM/SO_LfOHFVYg/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25897.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt; ▼これまでに考えたことを一度整理し，開発目標と自分の中で重要度が高いと感じたことを列挙&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sorFI6Z6iM0/TbOUcpV6boI/AAAAAAAADCQ/Z39vLMyhWaA/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25898.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-sorFI6Z6iM0/TbOUcpV6boI/AAAAAAAADCQ/Z39vLMyhWaA/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25898.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt; ▼開発目標を参考に，開発対象を絞り，問題解決のためのアプリケーションを考察&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-35GBJ91qaQE/TbOUdOJWDXI/AAAAAAAADCU/eQ9GuJv8niU/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25899.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-35GBJ91qaQE/TbOUdOJWDXI/AAAAAAAADCU/eQ9GuJv8niU/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25899.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-PAy8CWJ7lEM/TbOUd6bEu7I/AAAAAAAADCY/uIcb8d4HViI/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258910.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-PAy8CWJ7lEM/TbOUd6bEu7I/AAAAAAAADCY/uIcb8d4HViI/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258910.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nzP1hjUolWI/TbOUeSmyINI/AAAAAAAADCc/V1mt28qS9no/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258911.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-nzP1hjUolWI/TbOUeSmyINI/AAAAAAAADCc/V1mt28qS9no/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258911.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt; ▼もう一度ブレストし，思いついたものを列挙&lt;br /&gt;（最終的に一番下に書いてあるピクトグラムコミュニケーションを採用しました）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZKMv-rIIBKo/TbOUfsUjrtI/AAAAAAAADCg/whd_lG3r7Yo/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258912.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-ZKMv-rIIBKo/TbOUfsUjrtI/AAAAAAAADCg/whd_lG3r7Yo/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258912.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt; ▼開発アプリケーションが決まったとこでUIと機能の設計&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-gliIaWJ6_po/TbOUgO7cnRI/AAAAAAAADCk/41YL5-yA1S4/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258913.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-gliIaWJ6_po/TbOUgO7cnRI/AAAAAAAADCk/41YL5-yA1S4/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258913.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CBzGev3csBU/TbOUg6KkVGI/AAAAAAAADCo/1HFdZkdSS2s/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258914.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://2.bp.blogspot.com/-CBzGev3csBU/TbOUg6KkVGI/AAAAAAAADCo/1HFdZkdSS2s/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258914.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_dbJcS-i24o/TbOUhloLU_I/AAAAAAAADCs/vtCRnHR1Vb4/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258915.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://2.bp.blogspot.com/-_dbJcS-i24o/TbOUhloLU_I/AAAAAAAADCs/vtCRnHR1Vb4/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258915.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FjN4SZHyvZk/TbOUiKa_9MI/AAAAAAAADCw/UCQO9Zta6ps/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258916.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-FjN4SZHyvZk/TbOUiKa_9MI/AAAAAAAADCw/UCQO9Zta6ps/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258916.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pkksL_9Nm2o/TbOUjIZuSxI/AAAAAAAADC0/_fDNaSV1qzU/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258917.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-pkksL_9Nm2o/TbOUjIZuSxI/AAAAAAAADC0/_fDNaSV1qzU/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258917.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Yd2-PYZL_XU/TbOUj5_1RGI/AAAAAAAADC4/VCdYViUL69M/s1600/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258918.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-Yd2-PYZL_XU/TbOUj5_1RGI/AAAAAAAADC4/VCdYViUL69M/s320/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%258918.PNG" border="0" height="240" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: rgb(224, 102, 102);"&gt;&lt;span style="font-size:large;"&gt;■１次開発&lt;/span&gt;&lt;/div&gt;・ 利用物：Eclipse, Android SDK&lt;br /&gt;アプリケーションはAndroid上で実装することに決めました．&lt;br /&gt;開発アプリケーションと設計が決まったことで早速開発に取り組む・・・つもりだったのですが，&lt;br /&gt;私がAndroidアプリケーションを開発したのは１年以上前であり，今一度復習をしました．&lt;br /&gt;（この後何度も逆引きやチュートリアルとにらめっこしました・・・）&lt;br /&gt;少しプログラムを組んではエミュレータ上で実行というのを幾度となく繰り返しました．&lt;br /&gt;プログラムのバグを追うのがなかなか大変でした．&lt;br /&gt;&lt;br /&gt;朝6時までの開発進捗状況は約30%ほどだったかと思います．&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(224, 102, 102);"&gt;&lt;span style="font-size:large;"&gt;■2次開発&lt;/span&gt;&lt;/div&gt;・ 利用物：Eclipse, Android SDK, HTC Desire HD&lt;br /&gt;正午から再び開発．&lt;br /&gt;ここではカメラの使用につまづきました．以前Ver. 1.6でカメラを使用した経験はあるのですが，今回利用した端末はHTC Desire HD (Ver 2.2)でした．カメラAPIの使用がVer. 2.1から変更したらしく，ここでかなりの時間を消耗しました．&lt;br /&gt;&lt;br /&gt;機能面でいたらない点は多数あったのですが，18時になったため開発はひとまず終了．&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(224, 102, 102);"&gt;&lt;span style="font-size:large;"&gt;■動画作成&lt;/span&gt;&lt;/div&gt;・ 利用物：Microsoft Movie Maker, デジカメ&lt;br /&gt;動画作成の手順は，&lt;br /&gt;[アプリケーションを動かし，デジカメで録画]-[Microsoft Movie Makerで編集]-[Youtubeへアップロード]&lt;br /&gt;動画の作成は，結構時間を費やしました．光の関係で，携帯の画面がうまく映らなかったり， 携帯の画面に自分が写りこんでしまったりw 何回か撮り直しをしました．&lt;br /&gt;&lt;br /&gt;Microsoft Movie Makerは以前に使用したことがあるため，使用方法については問題がありませんでした．動作手順を説明するためにキャプションを挿入しました．また，音楽を流し，その音楽の再生時間に合うように動画を編集しました．最後に謝辞をつけてムービーを発行し，Youtubeへアップロード．&lt;br /&gt;&lt;br /&gt;▼作成した動画&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" src="http://i.ytimg.com/vi/yLmt4uTZm9k/0.jpg" height="399" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yLmt4uTZm9k?f=user_uploads&amp;amp;c=google-webdrive-0&amp;amp;app=youtube_gdata"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;embed src="http://www.youtube.com/v/yLmt4uTZm9k?f=user_uploads&amp;amp;c=google-webdrive-0&amp;amp;app=youtube_gdata" type="application/x-shockwave-flash" height="399" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: rgb(224, 102, 102);"&gt;&lt;span style="font-size:large;"&gt;■感想&lt;/span&gt;&lt;/div&gt;・疲れました・・・１日時間をとれたのが幸いでしたが，それでも疲れました．&lt;br /&gt;・スケジュール・・・個人的にスケジュール通り工程が進んだのが非常にうれしかったです．&lt;br /&gt;・アイデア・・・やはり一人でブレストはいまいちですね．今度機会があれば複数人でチャレンジしたいです．&lt;br /&gt;・技術面・・・もう少し事前にAndroidの開発に慣れておけばと反省．&lt;br /&gt;&lt;br /&gt;開発者のみなさま，運営者のみなさま，お疲れ様でした！！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8479584125525022368?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8479584125525022368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8479584125525022368'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/04/2-24.html' title='第2回 開発コンテスト24に参加しました'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-kg9Z1hP7Pvo/TbOUZJLhMQI/AAAAAAAADB4/A-HhS1-ly7c/s72-c/%25E3%2582%25B9%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%25892.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1074286752646441849</id><published>2011-04-21T20:07:00.000+09:00</published><updated>2011-04-21T20:07:02.405+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Windowsで各種プログラムを一発起動させる方法</title><content type='html'>「Win+r」でファイル名を指定して実行が起動します。&lt;br /&gt;&lt;br /&gt;ここでは、プログラム名を指定することで、プログラムを一発で起動することができます（ただし、パスが通っている必要があり）。&lt;br /&gt;&lt;br /&gt;例えば、「cmd.exe」 (.exeは省略可能)と入力し、OKを押すことでコマンドプロンプトが立ち上がります。&lt;br /&gt;&lt;br /&gt;ここでは、Windowsで用意されているプログラムやサービスを一発で起動する方法についていくつか記載します。&lt;br /&gt;&lt;br /&gt;[コントロールパネル] control.exe&lt;br /&gt;[ペイント] mspaint.exe&lt;br /&gt;[メモ帳] notepad.exe&lt;br /&gt;[コンピュータをロック] rundll32.exe user32.dll,LockWorkStation&lt;br /&gt;[画面の解像度] rundll32.exe Shell32.dll,Control_RunDLL Desk.cpl&lt;br /&gt;[ゴミ箱を開く] shell:RecycleBinFolder&lt;br /&gt;[インターネットのプロパティ] inetcpl.cpl&lt;br /&gt;[ネットワーク接続] ncpa.cpl&lt;br /&gt;[システムのプロパティ] sysdm.cpl&lt;br /&gt;[日付と時刻] timedate.cpl&lt;br /&gt;[ネットワーク接続] ncpa.cpl&lt;br /&gt;[プログラムの追加と削除] appwiz.cpl&lt;br /&gt;[ipconfig] cmd.exe /k ipconfig /all&lt;br /&gt;[マウスのプロパティ] main.cpl @0&lt;br /&gt;[キーボードのプロパティ] main.cpl @1&lt;br /&gt;[電源オプションのプロパティ] powercfg.cpl&lt;br /&gt;&lt;br /&gt;これらのショートカットをランチャー等に登録しておくことにより、必要な画面を一発で呼び出すことができます。&lt;br /&gt;これ以外にもまだまだありますので、気になる人は調べてみるとよりパソコン作業が快適になるかもしれません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1074286752646441849?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1074286752646441849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1074286752646441849'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/04/windows.html' title='Windowsで各種プログラムを一発起動させる方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1733033161633715876</id><published>2011-04-14T20:25:00.004+09:00</published><updated>2011-04-14T20:39:50.136+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Kindleの購入から活用まで</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/-zvmlZ71YxV0/TabWBGMspDI/AAAAAAAADBM/hcqh2vmW5j0/s1600/photo_02.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-zvmlZ71YxV0/TabWBGMspDI/AAAAAAAADBM/hcqh2vmW5j0/s200/photo_02.jpg" width="200" /&gt;&lt;/a&gt;私はKindleをほぼ毎日使用して読書および英語学習をしています。&lt;br /&gt;&lt;br /&gt;と言うか、基本的にそれ以外には使用用途がありませんｗ（一応音楽が聞けるのですが）&lt;br /&gt;&lt;br /&gt;というわけで、私がKindleを利用する上で役立った情報を簡単にまとめたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #38761d; font-size: large;"&gt;1. 購入&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;まずは、ともあれKindleを購入しないと話になりません。&lt;br /&gt;KindleはAmazon.comで購入する必要があります。 現在の価格はWi-Fi版$139(約11,500円(4/13日現在)), 3G+Wi-Fi版$189(約15,700円)となっています。また、5月3日からWi-Fi版Kindleに広告を付けたものが$114(約9,500円)で販売される模様です（ただし、日本からすぐに購入可能かはわからない）&lt;br /&gt;&lt;br /&gt;&amp;nbsp;具体的な購入方法については下記ページが参考になるかと思います。&lt;br /&gt;&lt;a href="http://9maa.net/blog/?p=199" target="_blank"&gt;&amp;nbsp;Kindle キンドル 購入 方法 | instantanés&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;span style="font-size: large;"&gt;2. 青空文庫リーダーとして&lt;/span&gt;&lt;/div&gt;&lt;a href="http://www.aozora.gr.jp/" target="_blank"&gt;青空文庫&lt;/a&gt;は，著作権の消滅した作品と「自由に読んでもらってかまわない」作品を公開しています。ここには、太宰 治や夏目 漱石などの文豪の作品が多く公開されています。個人的にはKindleを青空文庫専用リーダーとして使用しても十分に購入費のもとは取れると考えています。&lt;br /&gt;&lt;br /&gt;しかし、青空文庫で公開されている作品はKindle上で読書するために最適化されていません。そこで、&lt;a href="http://a2k.aill.org/" target="_blank"&gt;青空キンドル&lt;/a&gt;を利用することで、作品をKindle上で最適化した状態で読むことができます（pdfファイルとして出力してくれます） 。また、青空文庫で公開されている作品以外でも、青空文庫形式で作成されているテキストを持っている場合、&lt;a href="http://a2k.aill.org/text.html" target="_blank"&gt;青空キンドル マニュアル&lt;/a&gt;よりKindle用にファイルを変換することも可能です。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;span style="font-size: large;"&gt;3. コンテンツの購入&lt;/span&gt;&lt;/div&gt;なんと言っても電子ブックリーダーの最大の特徴は「思い立った時に本を購入できること」と「雑誌や新聞の定期購読（ダウンロード）が可能であること」です。&lt;br /&gt;私は&lt;a href="http://www.amazon.com/Asahi-Shimbun/dp/B0033PSNIA/ref=sr_1_1?ie=UTF8&amp;amp;m=A6U6H3H6WHQPH&amp;amp;s=digital-text&amp;amp;qid=1302778420&amp;amp;sr=1-1" target="_blank"&gt;朝日新聞&lt;/a&gt;の英語版を購読しています。購読費用は月当たり$9.99となっています。内容はNews/Features,Business,Views,Cool Japan,Sportsとなっています。14日間の無料購読もできるので是非利用してください。（ただし、何もしないとそのまま購読することになるので、購読を中止したい場合は、Amazon.comより購読を中止する必要があります）&lt;br /&gt;&lt;br /&gt;ちなみにKindleでは文章を読み上げてくれるText-to-Speech機能がついているので、新聞を読み上げてもらうことも可能です。個人的な感想ではまずまずの精度なのではないかと思っています。当然ながら日本人の名前や辞書に登録されていない単語は変な読み方になりますが。（例：Abeを「アベ」ではなく「エイブ」と発音する）&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;span style="font-size: large;"&gt;4. 英辞郎のインストール&lt;/span&gt;&lt;/div&gt;英語の文書を読む際、英語が不得意な方は、辞書が必要かと思います（私もそう）。Kindleにはデフォルトで英英辞書がついているのですが、やはり英和辞書が欲しいですね。&lt;br /&gt;&lt;br /&gt;下記サイトでは、英和・和英辞書として有名な英辞郎のKindle対応版を販売しています。購入しファイルをダウンロードしたら、そのファイルをKindle内の所定の箇所に移動し、使用辞書の設定を変更するだけで使用できるようになります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.east-village.jp/miru-zeal/eijiro/" target="_blank"&gt;英辞郎●MOBI/Kindle 対応版&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;span style="font-size: large;"&gt;5. スクリーンセーバーの変更&lt;/span&gt;&lt;/div&gt;私がKindleの気に入っている点の一つに、スクリーンセーバーがあります（そもそもスクリーンセーバーはディスプレイの焼き付きを防ぐためのもので、e-inkを使用しているKindleではスクリーンセーバーをする必要はないのですが）。&lt;br /&gt;スクリーンセーバーはKindleの電源を切っても表示されます（当然ながらバッテリーは減りません！）。デフォルトでは、何名かの有名な文豪が表示されます。これも非常に美しいのですが、中には自分で撮った写真等にカスタマイズしたい人もいると思います。&lt;br /&gt;カスタマイズ方法および画像のダウンロード方法は、下記ページにまとまっています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pixture.com/drupal/ja/blog/2011-02-01/300" target="_blank"&gt;Life with Kindle - スクリーンセーバー画像を変えよう | PIXTURE STUDIO&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;※ただし、Kindleの中身をいじることになるため、設定を間違えた場合はKindleが正常に起動しなくなる、ソフトウェアアップデートが受けられなくなる等の可能性がありますので、自己責任ということでお願いします。 &lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;span style="font-size: large;"&gt;6. 風呂にて&lt;/span&gt;&lt;/div&gt;私はお風呂につかりながらKindleを読むのが好きです。&lt;br /&gt;Kindleには防水性がないので、何らかの工夫が必要です。Kindleの専用防水ケースもあるみたいですが、私はジップロックで代用しています。湯船に落としたりしない限り大丈夫かな．．．ただ、水蒸気で曇るためタオルでその度に拭いているのが少し不便ですw&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kindleで楽しい読書体験を・・・&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1733033161633715876?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1733033161633715876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1733033161633715876'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/04/kindle.html' title='Kindleの購入から活用まで'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-zvmlZ71YxV0/TabWBGMspDI/AAAAAAAADBM/hcqh2vmW5j0/s72-c/photo_02.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8822360367633568518</id><published>2011-03-11T23:30:00.005+09:00</published><updated>2011-03-12T01:09:12.675+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='サービス'/><title type='text'>東北地方太平洋沖地震後のインターネット転送量</title><content type='html'>Webの高速化・サーバの負荷軽減を目指す&lt;a href="http://www.akamai.co.jp/enja/"&gt;Akamai&lt;/a&gt;は，世界におけるHTTP Hits per Secondを可視化した&lt;a href="http://www.akamai.com/html/technology/dataviz3.html"&gt;Visualizing Akamai&lt;/a&gt;や&lt;a href="http://www.akamai.com/html/technology/dataviz1.html"&gt;リアルタイWebモニター&lt;/a&gt;サービスを展開しています．&lt;br /&gt;AkamaiはWebのトラフィックの20%に関係しているとも言われているので，ある程度の信頼度があると言えます．&lt;br /&gt;&lt;br /&gt;2011年3月11日午後2時46分頃に発生した東北地方太平洋沖地震ですが，その後世界のHTTPトラフィックがどのようになったのかを調査するためにAkamaiのスクリーンキャプチャを撮りました．&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-JZDAsYeFeWQ/TXoxJlJwklI/AAAAAAAAC_8/G0zQiYFMp8A/s1600/1712.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="340" src="https://lh5.googleusercontent.com/-JZDAsYeFeWQ/TXoxJlJwklI/AAAAAAAAC_8/G0zQiYFMp8A/s400/1712.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;▲17時21分（日本時間）の世界のトラフィックを可視化したものです．&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-u1jK0phhAFU/TXoxYK5pCMI/AAAAAAAADAA/WvL6rIKkXDc/s1600/2157.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="341" src="https://lh4.googleusercontent.com/-u1jK0phhAFU/TXoxYK5pCMI/AAAAAAAADAA/WvL6rIKkXDc/s400/2157.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;▲21時57分（日本時間）の世界のトラフィックを可視化したものです．&lt;br /&gt;&lt;br /&gt;また， &lt;a href="http://www.akamai.com/html/technology/dataviz3.html"&gt;Visualizing Akamai&lt;/a&gt;を動画にしたものを下記に掲載します．&lt;br /&gt;キャプチャした時間帯は17:34 - 23:13 (+9:00 JPN) です．&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/AAw_6DjFoiM/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAw_6DjFoiM?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="480" height="399" src="http://www.youtube.com/v/AAw_6DjFoiM?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;※データは全てAkamaiの画面をキャプチャしたものです&lt;br /&gt;※ところどころ飛んでいる箇所があります&lt;br /&gt;※今回の地震とトラフィックに関係があるか否かはまだ現段階ではわかりません&lt;br /&gt;&lt;br /&gt;少しでも多くの方々が無事であることを心よりお祈りします．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8822360367633568518?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8822360367633568518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8822360367633568518'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/03/blog-post.html' title='東北地方太平洋沖地震後のインターネット転送量'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-JZDAsYeFeWQ/TXoxJlJwklI/AAAAAAAAC_8/G0zQiYFMp8A/s72-c/1712.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6648445206578359295</id><published>2011-02-26T22:35:00.002+09:00</published><updated>2011-02-26T22:42:21.636+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>書籍スキャンサービスの比較用Excelシート</title><content type='html'>年度末ということで、整理や引っ越しのために書籍をスキャンしたい人は多いのではないでしょうか。&lt;br /&gt;僕もその一人です。&lt;br /&gt;&lt;br /&gt;検索したところ様々なスキャン代行サービスがあり、どれを利用したらよいか悩みました。&lt;br /&gt;下記のようにサービスを比較して掲載してくれているサイトもありますが、これでも多すぎて悩みます。&lt;br /&gt;&lt;a href="http://www.bookfire.net/" target="_blank"&gt;BookFire - 書籍 スキャン PDF サービス比較まとめ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そこで、スキャンサービスの料金を比較するExcelシートを作成しましたので公開したいと思います。&lt;br /&gt;使い方は簡単ですので、是非お使いください。&lt;br /&gt;&lt;br /&gt;▼Step1 Excelシートのダウンロード&lt;br /&gt;まず、Excelシートをダウンロードしてください&lt;br /&gt;&lt;a href="http://ayakixlablog.web.fc2.com/jisui_daikou_hikaku.xlsx" target="_blank"&gt;ダウンロード&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;▼Step2 書籍のページ数の記入&lt;br /&gt;&lt;img border="0" height="157" src="https://lh6.googleusercontent.com/-zVjaGI7kSI0/TWj_6IxFx7I/AAAAAAAAC_I/XjH4r8arIuo/s400/1.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;各書籍のページを１行毎に記入してください。&lt;br /&gt;書籍名は任意です。&lt;br /&gt;&lt;br /&gt;▼Step3 オプションサービスのチェック&lt;br /&gt;&lt;img border="0" height="35" src="https://lh5.googleusercontent.com/-lPblYoIJo6o/TWkAEqiVF9I/AAAAAAAAC_M/Z-FVrg7nl7E/s400/2.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;オプションサービスとして[ファイル名変更]、[OCR（文字認識）/透過処理]、[DISC納品]を選びます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;▼Step4 結果の確認&lt;br /&gt;&lt;img border="0" height="147" src="https://lh6.googleusercontent.com/-tKKxPJ3phKw/TWkAPX3brxI/AAAAAAAAC_Q/7Jv_mGQGCJQ/s400/3.jpg" target="_blank" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;合計欄に全ての金額を足したものを表示しています。&lt;br /&gt;各サービスを比較して最安値のサービスから5件は、赤色で強調表示します。&lt;br /&gt;&lt;br /&gt;ホントは、スマートフォンを利用して、[バーコードをスキャン]⇒[ISBNコードから書籍のページ数を取得]⇒[スキャンの見積もり]ができたらよいのですが、まぁ今回はこんなところで。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[注意事項]&lt;br /&gt;●データは&lt;a href="http://www.bookfire.net/" target="_blank"&gt;BookFire - 書籍 スキャン PDF サービス比較まとめ&lt;/a&gt;をもとにしています。&lt;br /&gt;●Dataシートを見るとわかりますが、[標準料金]、[標準ページ制限]、[追加料金]、[追加ページ制限]から計算しています。例えば「X冊までは○円、Y冊までは△円」のような固有のサービスには対応していません。&lt;br /&gt;●計算ミスがあるかもです。責任はとれませんので、各サイトで見積もりをしてみてくださいw&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6648445206578359295?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6648445206578359295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6648445206578359295'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2011/02/excel.html' title='書籍スキャンサービスの比較用Excelシート'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-zVjaGI7kSI0/TWj_6IxFx7I/AAAAAAAAC_I/XjH4r8arIuo/s72-c/1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1202499224259910853</id><published>2010-09-30T15:44:00.000+09:00</published><updated>2010-09-30T15:44:40.648+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Autohotkeyで句読点置換，改行除去</title><content type='html'>普段句読点として「，．」を使っている人がいると思いますが，「、。」で文字を使用する場合はタイプし終えてから，置換を「，」=&gt;「、」と「．」=&gt;「。」で２回行う必要があります．&lt;br /&gt;&lt;br /&gt;そこで，Autohotkeyを使用して，この作業を簡単に行うスクリプトを書いてみました．&lt;br /&gt;ここではF12キーを押すと，文字を全選択し=&gt;クリップボードにコピー=&gt;どちら方向に置換するか判断=&gt;置換=&gt;クリップボードから貼り付けという作業をしています．&lt;br /&gt;&lt;br /&gt;どちら方向に置換するかの判断には，「，」がテキスト中に出てきたら「，．」=&gt;「、。」としています．「．」もしくは両方で判断してもよいかと思います．&lt;br /&gt;&lt;br /&gt;ついでに，Shiftを押しながらF12で，改行を除去ようにしてあります．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;; Shift+F12: 改行を除去 abc \r\n def =&gt; abcdef&lt;br /&gt;; F12: 「、。」 &lt;=&gt; 「，．」&lt;br /&gt;&lt;br /&gt;*F12::&lt;br /&gt; GetKeyState, shiftFg, Shift ; Shiftが押されているか？&lt;br /&gt; Send, ^a^c   ; テキストをクリップボードにコピー&lt;br /&gt; str := clipboard&lt;br /&gt; if shiftFg = D   ; Shift押している場合は改行を消す&lt;br /&gt; {&lt;br /&gt;  StringReplace, str, str, `r`n, , All&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  StringGetPos, pos, str, ， ; 全角コンマの位置を検索&lt;br /&gt;  if pos &gt;= 0&lt;br /&gt;  {&lt;br /&gt;   StringReplace, str, str, ，, 、, ALL&lt;br /&gt;   StringReplace, str, str, ．, 。, ALL&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;   StringReplace, str, str, 、, ，, ALL&lt;br /&gt;   StringReplace, str, str, 。, ．, ALL&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; clipboard := str&lt;br /&gt; Send, ^v&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1202499224259910853?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1202499224259910853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1202499224259910853'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/09/autohotkey.html' title='Autohotkeyで句読点置換，改行除去'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6319176351347101891</id><published>2010-08-24T14:53:00.007+09:00</published><updated>2010-08-24T15:12:01.614+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Google Developer Day 2010 DevQuiz</title><content type='html'>Google Developer Day 2010の&lt;br /&gt;DevQuizの回答受付期間が終了しましたね．&lt;br /&gt;&lt;br /&gt;みなさん様々な方法で解かれたと思います．&lt;br /&gt;結構面白かったですね．&lt;br /&gt;&lt;br /&gt;一応僕の解いたやり方をメモしておきます．&lt;br /&gt;（と言っても特にユニークなやり方でもないと思います）&lt;br /&gt;&lt;br /&gt;僕の点数は下記の通りです．&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/THNHA6OpUdI/AAAAAAAACzQ/eUWH88zuKe0/s1600/%E7%84%A1%E9%A1%8C.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/THNHA6OpUdI/AAAAAAAACzQ/eUWH88zuKe0/s320/%E7%84%A1%E9%A1%8C.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;■ラウンド2: Google Maps API&lt;br /&gt;経路最適化問題です．&lt;br /&gt;以下，DevQuizの問題文より&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #45818e;"&gt;日本国内の場所のリストが与えられます。あなたはそれらをすべて通るようなルートのうち、最短時間のものを計算して、提出してください。ルートの開始点は最初に与えられる場所とし、最後にはもとの位置にもどって来て下さい。 &lt;/b&gt;&lt;b&gt;&lt;span style="color: #45818e;"&gt;また、各地点を移動するのに必要な時間は Google Maps API の運転ルート案内で得られる秒数を使ってください。 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="color: #45818e;"&gt;&lt;br /&gt;入力：&lt;br /&gt;入力は地点のリストからなります。リストは改行で区切られます。各地点は、地点の名称、緯度、経度からなり、それぞれ空白文字で区切られます。&lt;br /&gt;例) 東京都庁 35.6894875 139.6917064&lt;br /&gt;札幌市役所 43.0627820 141.3535990&lt;br /&gt;:&lt;br /&gt;&lt;br /&gt;出力：&lt;br /&gt;解答フォーマットは、地点の名称を空白で区切ったリストとします。始点と終点も与えてください。&lt;br /&gt;例) 東京都庁 札幌市役所 ... 東京都庁&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #45818e;"&gt;&lt;b&gt;[レベル1]&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="color: #45818e;"&gt;東京タワー 35.658570 139.745484&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;宮崎県庁 31.911096 131.423893&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;佐多岬 30.994560 130.660638&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;[レベル2]&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;兼六園 36.562070 136.662419&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;五条大橋 34.995682 135.767890&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;襟裳岬 41.926490 143.246642&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;東京大学 35.712940 139.759590&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;両国国技館 35.697080 139.792280&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;鷲宮神社 36.100240 139.656800&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;[レベル3]&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;通天閣 34.652554 135.506333&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;兼六園 36.562070 136.662419&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;ハウステンボス駅 33.091673 129.796602&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;襟裳岬 41.926490 143.246642&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;日本銀行 35.686839 139.771438&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;国会正門前 35.676293 139.746927&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;秋吉台 34.234753 131.310094&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;日本科学未来館 35.619415 139.776550&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;両国国技館 35.697080 139.792280&lt;/span&gt;&lt;br style="color: #45818e;" /&gt;&lt;span style="color: #45818e;"&gt;幕張メッセ 35.646701 140.036654&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;レベル1は自分の手でGoogle Mapsから経路探索を行えば十分ですね．&lt;br /&gt;問題はレベル2とレベル3です．&lt;br /&gt;とりあえずレベル2について見ると，兼六園→○→×→□→△→☆→兼六園となり，探索すべきルートは，5!となります．5!=120なので，Google Maps APIより全探索してもOKでしょう．正確には計っていませんが，検索にかかる時間は数秒ですんでいたと思います．&lt;br /&gt;&lt;br /&gt;次にレベル3についてです．&lt;br /&gt;レベル3は，通天閣→9カ所→通天閣となり，全探索すると9!回となります．9!=362880となり，これは全探索するには少しつらい．&lt;br /&gt;どうしようか考えたのですが，経由すべき場所をよく見ると，主に東京周辺とそれ以外に分けられることがわかります．&lt;br /&gt;つまり東京周辺グループ{日本銀行，国会正門前，日本科学未来館，両国国技館，幕張メッセ}（幕張メッセだけ千葉ですが）とその他グループ{兼六園，ハウステンボス駅，襟裳岬，秋吉台}です．&lt;br /&gt;&lt;br /&gt;ここで，まず，通天閣からその他グループの全ての地域と東京周辺グループの一地域（例えば日本銀行）を通り， 通天閣に戻るルートを検索します．その他グループの地域数は4で，これに東京グループの一地域を加え5!の問題を解きます．これはレベル2と同じ数ですね．そして，例えば下記のような答えが得られたとします．&lt;br /&gt;&amp;nbsp;（これは答えではありません）&lt;br /&gt;通天閣→兼六園→ハウステンボス駅→日本銀行→襟裳岬→秋吉台→ 通天閣&lt;br /&gt;&lt;br /&gt;今度は，ハウステンボス駅から東京グループの各地域を通り，襟裳岬にたどり着くルートを検索します．東京グループの地域数も5なので検索するルート数は5!となり，これも探索可能となります．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Super Hackers:Shiritori&lt;br /&gt;決められた単語を用いて，サーバーとしりとりで勝負します． &lt;br /&gt;単語が無くなったら負けとなります．&lt;br /&gt;レベル1とレベル2の回答は省きます．&lt;br /&gt;レベル3について．&lt;br /&gt;使う単語は，&lt;br /&gt;xjkfkwvpt,tzsmq,pxbmcesnjns,egcllbcbh,&lt;br /&gt;thbtdo,tkssgbvja,qxbrgzcmfo,qpnkhoirma,qylomri,&lt;br /&gt;onkwrscza,ojpyyi,ohkhkmavpx,aeuni,akgrx,&lt;br /&gt;awhveplfw,idaslbxx,izcwbqihw,ifncjdqsjcb,xmgkmcsw,&lt;br /&gt;xbyhupb,xbcmpszfm,wyccb,wojkom,wzpnyonhet,&lt;br /&gt;bdetytm,bnccrpxt,bngxufabq,mlyiesuet,mnoyargccqq,&lt;br /&gt;mawvlvo,ttsey,ykplamk,yrhtmqv,yygjpuwyp,&lt;br /&gt;qhfag,gnfbckn,gfvnrdfmr,ghnhwrrtmc,ouiimevu,&lt;br /&gt;ucszjfgsf,upxpqzmvie,ueexd,apayifgy,iqjqg,&lt;br /&gt;xpwxsiu,wffhsfwqwjy,bdcrgyg,mjqdu,kkgen,&lt;br /&gt;kexref,kbkrev,kqqwqezr,koucaoe,kvzkcosfllp,&lt;br /&gt;knwdc,kykdnd,krwgpol,kwqulsbbs,kgvwosyh,&lt;br /&gt;nurzk,nvrwtuzkf,ndvlgjvv,nfzhudxnr,npdyzvje,&lt;br /&gt;nkjynp,nqjeefpnwpc,njrhvudad,nemsl,nysikxzxs,&lt;br /&gt;nvzayoh,frkxeqek,fjadqgyn,fqfcbv,fxomlbwkotr,&lt;br /&gt;fakwkpjge,fiwchp,frrlricvsc,fvtcqunvoyd,foqpsspyl,&lt;br /&gt;fggikoous,ffyrh,vhwcvgk,voqtn,vrdomf,&lt;br /&gt;vtnyr,vfiote,vyxfbdp,vqsaeqlc,vsnqd,&lt;br /&gt;vttsaizbdl,veals,vfprmoxmmh,rzttstqlk,reoirnyn,&lt;br /&gt;rfdeienf,rkaibcv,rybmcce,rnoup,rgpuhstjc,&lt;br /&gt;rzfrosbakid,rylywizybzl,rdmcss,rljpgznoh,eltsk,&lt;br /&gt;exdxiyfbugn,eeublwiiidf,ediov,ehvftymilr,esfjynnnp,&lt;br /&gt;esmsxsymcpc,eahgoobid,ewnreexvmtl,eimtomus,&lt;br /&gt;plpykovffk,ptvpsdmjjn,pvlajfcf,pbtvpnnnpv,pvedaer,&lt;br /&gt;piywsfve,puggdtmymhc,pfmywnd,ptkkxjal,&lt;br /&gt;pusevvmqvuh,cwfrgkbodik,clqcn,ccdbuf,cvfdrtdv,&lt;br /&gt;cpltr,cskkmnine,czqzzzwxvp,chwtukwd,cafluoehbl,&lt;br /&gt;cblwnbois,cbsyh,dliovokk,dzfmcbenffn,dcmuejvggkf,&lt;br /&gt;djvzgpspv,dgdhxibsepr,debtnxtqe,dufwuvdp,dwurgc,&lt;br /&gt;dkuol,dohbzxpxshs,dydwrdzadch,ltuck,lxlxaen,&lt;br /&gt;lqxxrf,lecjbv,lghpeqlwxtr,lfpmtue,lvpncp,&lt;br /&gt;lkgqghhc,lzjuud,lchljus,lzzkxh,slxaek,&lt;br /&gt;srten,steeycpf,sepuwxzv,snlonbntjr,shske,&lt;br /&gt;saynsxp,sjvqgzdkpec,suvzved,sjgtl,spmxdoh,&lt;br /&gt;hwfptlzbk,hqgbwovn,hutfyojmqzf,hnusersv,hmber,&lt;br /&gt;hdowqwfe,hooihp,hutlc,hvyzebbd,hykmzl,&lt;br /&gt;hajyxs,llxlapt,lxgcfykha,ljwgmgjjw,shutpq,&lt;br /&gt;snzbqki,sjzgb,hrfjso,hplgjpjcx,hcqim&lt;br /&gt;（相手始まりで相手は最初にxjkfkwvptを選択する） &lt;br /&gt;&lt;br /&gt;これ何回か手動でプレイするとわかるのですが，ある文字で始まる単語ではめられます．&lt;br /&gt;例えば「c」で始まる単語は11こあるのですが，これに対して「c」で終わる単語は12個あり，一度「c」で始まる単語を選ぶと，相手は常に「c」で終わる単語を選び，最後には単語が無くなってしまいます．もちろんプログラムを組んで探索しても良いと思いますが，少し単語を分析してみると解法が導けます．&lt;br /&gt;&lt;br /&gt;まず，aからzまでの単語の先頭数と末尾数をチェックします．&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 216px;"&gt;&lt;col span="3" style="width: 54pt;" width="72"&gt;&lt;/col&gt;  &lt;tbody&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt; width: 54pt;" width="72"&gt;文字&lt;/td&gt;   &lt;td style="width: 54pt;" width="72"&gt;先頭数&lt;/td&gt;   &lt;td style="width: 54pt;" width="72"&gt;末尾数&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;a&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;b&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;c&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;d&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;e&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;f&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;g&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;h&lt;/td&gt;   &lt;td align="right"&gt;14&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;i&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;j&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;k&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;l&lt;/td&gt;   &lt;td align="right"&gt;14&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;m&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;n&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;o&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;p&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;q&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;r&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;s&lt;/td&gt;   &lt;td align="right"&gt;14&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;t&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;u&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;v&lt;/td&gt;   &lt;td align="right"&gt;11&lt;/td&gt;   &lt;td align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;w&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;x&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;   &lt;td align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;y&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;   &lt;td align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;z&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;   &lt;td align="right"&gt;0&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;表からわかるようにいくつかのパターンが見えてきます．&lt;br /&gt;パターン1：先頭数と末尾数が4 {a,b,i,m,o,q,t,w,x}&lt;br /&gt;パターン2：先頭数と末尾数が3 {g,u,y}&lt;br /&gt;パターン3：先頭数が11，末尾数が12 {c,d,e,f,k,n,p,r,v}&lt;br /&gt;パターン4：先頭数が14，末尾数が11 {h,l,s}&lt;br /&gt;（関係のないjとzは無視します）&lt;br /&gt;ここでパターン3は先ほど言ったように，先にパターン3で始まる単語を選択する状況になったら負けます．&lt;br /&gt;では，パターン3の文字で始まる単語を相手に選択させるためには，パターン3の文字で終わる単語を自分が選択する必要があります．&lt;br /&gt;これは具体的にはパターン2の単語です．例えば，パターン2の一つであるgで始まる単語は，{gfvnrdfmr, ghnhwrrtmc, gnfbckn}があり，全て末尾がパターン3の文字で終わります．&lt;br /&gt;&lt;br /&gt;そして，上記の事から，パターン2の文字で終わる単語を相手に選択させれば勝ちとなることがわかります．&lt;br /&gt;少しまとめると&lt;br /&gt;パターン3始まりの単語を相手に選択させる→パターン3終わりの単語を自分が選択する（=パターン2始まるの単語を自分が選択する）→パターン2終わりの単語を相手に選択させるとなります．&lt;br /&gt;&lt;br /&gt;さて，ここでパターン1の文字で始まる単語は，4つありますが，その中でパターン2の文字で終わる単語を1つずつあります．&lt;br /&gt;&lt;br /&gt;具体的には下記のようになります．&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 266px;"&gt;&lt;col style="width: 54pt;" width="150"&gt;&lt;/col&gt;  &lt;col style="width: 150pt;" width="150"&gt;&lt;/col&gt;  &lt;col style="width: 150pt;" width="150"&gt;&lt;/col&gt;  &lt;tbody&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt; width: 54pt;" width="150"&gt;先頭&lt;/td&gt;   &lt;td style="width: 150pt;" width="150"&gt;パターン1の末尾&lt;/td&gt;   &lt;td style="width: 150pt;" width="150"&gt;パターン2の末尾&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;b&lt;/td&gt;   &lt;td&gt;mqt&lt;/td&gt;   &lt;td&gt;g&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;i&lt;/td&gt;   &lt;td&gt;bwx&lt;/td&gt;   &lt;td&gt;g&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;q&lt;/td&gt;   &lt;td&gt;aio&lt;/td&gt;   &lt;td&gt;g&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td class="xl65" height="18" style="height: 13.5pt;"&gt;a&lt;/td&gt;   &lt;td class="xl65"&gt;iwx&lt;/td&gt;   &lt;td class="xl65"&gt;y&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td class="xl65" height="18" style="height: 13.5pt;"&gt;t&lt;/td&gt;   &lt;td class="xl65"&gt;aoq&lt;/td&gt;   &lt;td class="xl65"&gt;y&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td class="xl65" height="18" style="height: 13.5pt;"&gt;w&lt;/td&gt;   &lt;td class="xl65"&gt;mbt&lt;/td&gt;   &lt;td class="xl65"&gt;y&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;x&lt;/td&gt;   &lt;td&gt;bmw&lt;/td&gt;   &lt;td&gt;u&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;m&lt;/td&gt;   &lt;td&gt;oqt&lt;/td&gt;   &lt;td&gt;u&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="18" style="height: 13.5pt;"&gt;   &lt;td height="18" style="height: 13.5pt;"&gt;o&lt;/td&gt;   &lt;td&gt;aix&lt;/td&gt;   &lt;td&gt;u&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;相手は初めにxjkfkwvptを選んでるためtからyを取らないように他の単語（末尾がa,o,p）を選択します．後は，g,y,uを取らないように，ゲームを進めていけば勝ちます．&lt;br /&gt;&lt;br /&gt;■Super Hackers:PAC-MAN&lt;br /&gt;&lt;pre&gt;&lt;b&gt;&lt;span style="color: #45818e;"&gt;50&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;11 7&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;###########&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;#.V..#..H.#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;#.##...##.#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;#L#..#..R.#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;#.#.###.#.#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;#....@....#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #45818e;"&gt;###########&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;上記のような文字列が与えられ，自機が@で，VHRなどは敵を表します．&lt;br /&gt;#は壁でドットはポイントを表します（ポイントは一度とったら消える）&lt;br /&gt;上下左右及び停止しながら，ポイントを多く集めると言った問題．&lt;br /&gt;&lt;br /&gt;とりあえず，敵の動きが決められているので，そのように動く簡単なシミュレータを作り，自機は再帰で探索を行うことにした．&lt;br /&gt;上記の例のような問題だとすぐ解けるのだが，レベル2，レベル3のような問題は，時間がかかり解けない．&lt;br /&gt;例えば迷路探索のように，進む方向がある程度決まっている場合，全探索でも問題はないのだが，今回のように来た道を戻った方が良い場合や，一時停止をして敵が通り過ぎるのを待つ方が良い場合があり，探索数が莫大に増える．&lt;br /&gt;結局，これに対してのいい案は思い浮かばずに，できるだけ長い間プログラムを走らせて良い結果がでたら随時表示してサーバに答えをアップロードした．&lt;br /&gt;&lt;br /&gt;他の人を見ると，シミュレータを作って人力でパックマンをプレイして，かなりの高得点(レベル3で500点超え)を出されている方がいたので，その方が手っ取り早かったみたい．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6319176351347101891?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6319176351347101891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6319176351347101891'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/08/google-developer-day-2010-devquiz.html' title='Google Developer Day 2010 DevQuiz'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M60ZyknxGnQ/THNHA6OpUdI/AAAAAAAACzQ/eUWH88zuKe0/s72-c/%E7%84%A1%E9%A1%8C.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-3551537391908355771</id><published>2010-08-18T02:00:00.001+09:00</published><updated>2011-05-26T23:50:58.495+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidのソースをビルド</title><content type='html'>Ubuntu 9.04 64bit kernel:2.6.28-19-generic&lt;br /&gt;という環境でAndroidのソースコードをビルドしてみました．&lt;br /&gt;結構躓いたのでメモメモ&lt;br /&gt;&lt;br /&gt;"Android make"らへんでググると結構な情報が出てくるのでそちらをご参考ください．&lt;br /&gt;必要なパッケージをインストールして，いざmakeしてみると，&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆エラー内容&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;■対処法&lt;br /&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;&lt;span style="color: rgb(61, 133, 198);"&gt;$&lt;/span&gt;sudo apt-get install libc6-dev-i386&lt;/div&gt;&lt;br /&gt;気を取り直して再度make&lt;br /&gt;&lt;br /&gt;◆エラー内容&lt;br /&gt;&lt;div style="color: rgb(204, 0, 0);"&gt; /usr/bin/ld: cannot find -lstdc++&lt;/div&gt;&lt;br /&gt;■対処法&lt;br /&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;&lt;span style="color: rgb(61, 133, 198);"&gt;$&lt;/span&gt;sudo apt-get install g++-multilib&lt;/div&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;&lt;span style="color:black;"&gt;まだ，あきらめずにmake&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;&lt;span style="color:black;"&gt;◆エラー内容&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(204, 0, 0);"&gt;/usr/bin/ld: cannot find -lz&lt;/div&gt;&lt;div color="black"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div color="black"&gt;■対処法&lt;/div&gt;&lt;div style="color: black;"&gt;※この問題は64bitにしたから？ &lt;/div&gt;&lt;div style="color: black;"&gt;getlibsを入れると便利そうなので，下記URLよりgetlibsをダウンロードしインストール&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;a href="http://frozenfox.freehostia.com/cappy/"&gt;http://frozenfox.freehostia.com/cappy/&lt;/a&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;関連ライブラリをインストール&lt;/div&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;$getlibs -l libz.so libz.so: zlib1g-dev&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;あきらめたらそこで試合終了　make&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span style="color:black;"&gt;◆エラー内容&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(204, 0, 0);"&gt; /usr/bin/ld: cannot find -lncurses&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;■対処法&lt;/div&gt;&lt;div style="color: rgb(61, 133, 198);"&gt;sudo apt-get install lib32ncurses5-dev lib32readline5-dev&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;ようやくこれでビルドできました・・・&lt;/div&gt;&lt;div style="color: black;"&gt;長かった．一回makeしてからエラーがでるまでの時間がすごい長かった．（コンパイル時間がすごい長いので注意を）&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-3551537391908355771?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3551537391908355771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3551537391908355771'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/08/android.html' title='Androidのソースをビルド'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8037545212473812595</id><published>2010-07-31T12:30:00.000+09:00</published><updated>2010-07-31T12:30:27.597+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Happy Hacking Keyboard Blue Esc Key</title><content type='html'>株式会社PFUの創業50周年記念キャンペーンに応募して見事Blue Esc Keyをもらいました！&lt;br /&gt;&lt;br /&gt;前回のRed Control Keyも当たり、現在2連勝中です！！！&lt;br /&gt;折角の墨モデルなのに、どんどんとカラフルになってきますねｗ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/TFOYq29n35I/AAAAAAAACzI/F6A31iTOtv4/s1600/3321929_371213768_64large.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/TFOYq29n35I/AAAAAAAACzI/F6A31iTOtv4/s400/3321929_371213768_64large.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8037545212473812595?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8037545212473812595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8037545212473812595'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/07/happy-hacking-keyboard-blue-esc-key.html' title='Happy Hacking Keyboard Blue Esc Key'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M60ZyknxGnQ/TFOYq29n35I/AAAAAAAACzI/F6A31iTOtv4/s72-c/3321929_371213768_64large.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-290048781713143772</id><published>2010-07-29T17:17:00.004+09:00</published><updated>2011-05-26T23:50:46.923+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Activityのライフサイクル</title><content type='html'>AndroidアプリケーションにおけるActivityのライフサイクルについてのまとめ&lt;br /&gt;&lt;br /&gt;呼び出されるメソッド順に記述しています．&lt;br /&gt;&lt;br /&gt;○アプリ起動時&lt;br /&gt;onCreate&lt;br /&gt;onStart&lt;br /&gt;onResume&lt;br /&gt;&lt;br /&gt;○（起動中に）ホームボタン&lt;br /&gt;onPause&lt;br /&gt;onStop&lt;br /&gt;&lt;br /&gt;○ホームボタン押し後（onStop後），再度起動&lt;br /&gt;onRestart&lt;br /&gt;onStart&lt;br /&gt;onResume&lt;br /&gt;&lt;br /&gt;○（起動中に）バックボタン&lt;br /&gt;onPause&lt;br /&gt;onStop&lt;br /&gt;onDestroy&lt;br /&gt;&lt;br /&gt;○（起動中に）画面90°回転&lt;br /&gt;onCreate&lt;br /&gt;onStart&lt;br /&gt;onResume&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-290048781713143772?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/290048781713143772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/290048781713143772'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/07/android-activity.html' title='Android Activityのライフサイクル'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-242416312742568298</id><published>2010-06-04T01:25:00.009+09:00</published><updated>2010-06-04T01:34:58.999+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>麻雀あがり判定</title><content type='html'>麻雀のあがり判定について&lt;br /&gt;&lt;br /&gt;すっごく簡易化したもので考えてみたけど，&lt;br /&gt;頭を取る→刻子を取る→順子を取る→残りをチェックということでいいのかな？&lt;br /&gt;刻子と順子が逆になったほうがいい場合は，あるのか？？？&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Test {&lt;br /&gt;   public static void main(String[] args) {&lt;br /&gt;      // 簡略化のために牌は1-9のみ&lt;br /&gt;      // 配列haiのindex番号と牌の枚数が対応している&lt;br /&gt;      // 例) hai[1]&lt;=&gt;1の枚数&lt;br /&gt;      int[] hai = {0,0,2,2,2,2,2,2,2,0};   // 大車輪&lt;br /&gt;//      int[] hai = {0,3,1,1,1,1,1,1,1,4};   // 九連宝燈&lt;br /&gt;//      int[] hai = {0,3,3,3,3,0,0,0,0,2};   // 四暗刻&lt;br /&gt;      int[] c_hai;&lt;br /&gt;      List&amp;lt;Integer&amp;gt; mentu;&lt;br /&gt;&lt;br /&gt;      // 頭をまず取る&lt;br /&gt;      for(int i = 1; i &lt; hai.length; i++){&lt;br /&gt;         if(hai[i] &gt;= 2){&lt;br /&gt;            c_hai = hai.clone();&lt;br /&gt;            c_hai[i] -= 2;&lt;br /&gt;            mentu = new ArrayList&amp;lt;Integer&amp;gt;();&lt;br /&gt;            judge(c_hai, mentu, i);&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;   // 再帰&lt;br /&gt;   static void judge(int[] hai, List&amp;lt;Integer&amp;gt; mentu, int atama){&lt;br /&gt;      if(mentu.size() == 12){&lt;br /&gt;         print(mentu, atama);&lt;br /&gt;      }&lt;br /&gt;      // 刻子を取る&lt;br /&gt;      for(int i = 1; i &lt; hai.length; i++){&lt;br /&gt;         if(hai[i] &gt;= 3){&lt;br /&gt;            mentu.add(i); mentu.add(i); mentu.add(i);&lt;br /&gt;            hai[i] -= 3;&lt;br /&gt;            judge(hai, mentu, atama);&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;      // 順子を取る&lt;br /&gt;      for(int i = 1; i &lt; (hai.length-2); i++){&lt;br /&gt;         if(hai[i] &gt; 0 &amp;&amp; hai[i+1] &gt; 0 &amp;&amp; hai[i+2] &gt; 0){&lt;br /&gt;            mentu.add(i); mentu.add(i+1); mentu.add(i+2);&lt;br /&gt;            hai[i]--; hai[i+1]--; hai[i+2]--;&lt;br /&gt;            judge(hai, mentu, atama);&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;   // 表示&lt;br /&gt;   static void print(List&amp;lt;Integer&amp;gt; mentu, int atama){&lt;br /&gt;      for(int i = 0; i &lt; mentu.size(); i++){&lt;br /&gt;         System.out.print(mentu.get(i) + " ");&lt;br /&gt;         if(i % 3 == 2)&lt;br /&gt;            System.out.print("| ");&lt;br /&gt;      }&lt;br /&gt;      System.out.println(atama + " " + atama);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記の実行結果は下記のようになる&lt;br /&gt;------------------------------------------------------&lt;br /&gt;3 4 5 | 3 4 5 | 6 7 8 | 6 7 8 | 2 2&lt;br /&gt;2 3 4 | 2 3 4 | 6 7 8 | 6 7 8 | 5 5&lt;br /&gt;2 3 4 | 2 3 4 | 5 6 7 | 5 6 7 | 8 8&lt;br /&gt;------------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-242416312742568298?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/242416312742568298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/242416312742568298'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/06/blog-post.html' title='麻雀あがり判定'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5702840111830566278</id><published>2010-06-01T18:27:00.009+09:00</published><updated>2010-06-01T18:34:41.605+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Android marketへの登録およびアプリのアップロード</title><content type='html'>◆Android marketへの登録方法&lt;br /&gt;Android marketへの登録については下記サイトを参考にさせていただきました． &lt;br /&gt;注意点としては，登録料として$25が必要となります．&lt;br /&gt;また，クレジッドカード払いとなるのですが，JCBは使えません．&lt;br /&gt;&lt;br /&gt;&lt;a href="http://typex2.wordpress.com/2008/10/28/android-market%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E7%99%BB%E9%8C%B2%E9%96%8B%E5%A7%8B%EF%BC%86%E7%99%BB%E9%8C%B2%E6%96%B9%E6%B3%95%EF%BC%88%EF%BC%91%EF%BC%89/"&gt;Android Marketのユーザ登録開始＆登録方法（１） « 突然消失するかもしれないブログ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;◆アップロードに関して&lt;br /&gt;apkファイルをアップロードする際，アプリケーションに対して署名を行う必要があります．Eclipseを使用している人は，簡単に署名を行えます．&lt;br /&gt;署名に関しては，下記サイトが参考となりました．&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hakkaku.net/articles/20090907-580"&gt;八角研究所 : Android で再開する Java プログラミング（13） - Android Market で作品を公開しよう！&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;注意点として，Android marketにアップロードするアプリは，動作を保証するバージョンを明記する必要があるということです．&lt;br /&gt;アプリのAndroidManifest.xmlにて，&lt;br /&gt;&lt;br /&gt;&lt;div style="color: red;"&gt;&amp;lt;uses-sdk android:minsdkversion="4" /&amp;gt;&lt;/div&gt;&lt;br /&gt;等を記載しましょう．4はAndroid SDK1.6を指しますので，そこはご自分のアプリの最小バージョンを明記しましょう．&lt;br /&gt;&lt;br /&gt;ちなみに，私は，&lt;span ui:example="Utilities"&gt;仕事効率化カテゴリーに「MultiSearch」というアプリケーションをアップロードしました．&lt;/span&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;公開して2日間経ちましたが30ダウンロードされているみたいです．嬉しいです．&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;以下，説明＆アプリのスクリーンショットです．よろしければお使いください．&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;--&lt;/span&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;MultiSearchは、検索のためのユーティリティソフトウェアです。&lt;br /&gt;MultiSearchでは、ドロップダウンメニューから、検索サイトを選択し、文字列を検索することで、その該当検索サイトから直接 検索結果を取得できます。そのため、無駄なステップを踏む必要がなく、快適に検索を行うことができます。現在、対応している検索サイトは、Wikipedia、英辞郎、クックパッ ド、e-Words、はてなキーワード、Acronyms（頭字語検索）となっています。&lt;/span&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/TATR-gV_S-I/AAAAAAAACys/KXAhmJHd-tk/s1600/GetImage2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/TATR-gV_S-I/AAAAAAAACys/KXAhmJHd-tk/s320/GetImage2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/TATR590EECI/AAAAAAAACyk/Z3b4vs4Teos/s1600/GetImage1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/TATR590EECI/AAAAAAAACyk/Z3b4vs4Teos/s320/GetImage1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span ui:example="Utilities"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5702840111830566278?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5702840111830566278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5702840111830566278'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/06/android-market.html' title='Android marketへの登録およびアプリのアップロード'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M60ZyknxGnQ/TATR-gV_S-I/AAAAAAAACys/KXAhmJHd-tk/s72-c/GetImage2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8163343209710047526</id><published>2010-06-01T18:12:00.001+09:00</published><updated>2010-12-06T22:30:50.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>TeX早見表</title><content type='html'>論文等を制作する際に使用する組版ソフト「TeX」の早見表を制作しました．&lt;br /&gt;&lt;br /&gt;&amp;nbsp;TeXの環境構築等については言及していないので，ある程度TeXを触ったことがあるユーザをターゲットとしています．&lt;br /&gt;&lt;br /&gt;具体的な内容は下記のようになっています． &lt;br /&gt;・箇条書き&lt;br /&gt;・画像・図の張り方&lt;br /&gt;・表の張り方&lt;br /&gt;・参考文献の書き方&lt;br /&gt;・各種記号&lt;br /&gt;・各種書体&lt;br /&gt;・数式&lt;br /&gt;・その他Tips集&lt;br /&gt;&lt;br /&gt;ダウンロードは下記から行ってください．&lt;br /&gt;&lt;a href="http://ayakixlablog.web.fc2.com/tex_hayami.pdf"&gt;http://ayakixlablog.web.fc2.com/tex_hayami.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8163343209710047526?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8163343209710047526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8163343209710047526'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/06/tex.html' title='TeX早見表'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6219664535980472689</id><published>2010-05-13T22:10:00.002+09:00</published><updated>2011-06-27T10:47:38.322+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidでスレッドの利用</title><content type='html'>Androidでスレッドの利用方法です．&lt;br /&gt;&lt;br /&gt;Handlerを使います．&lt;br /&gt;&lt;br /&gt;注意点が必要なのはメインスレッドではないスレッドで，ViewなどのGUI部品を触れないということです．&lt;br /&gt;なので，GUI部品を触るのは，メインスレッドでやりましょう．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import android.app.Activity;&lt;br /&gt;import android.app.ProgressDialog;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.os.Handler;&lt;br /&gt;import android.os.Message;&lt;br /&gt;public class Temp extends Activity implements Runnable {&lt;br /&gt; private ProgressDialog progressDialog;&lt;br /&gt; /** Called when the activity is first created. */&lt;br /&gt; @Override public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;    setContentView(R.layout.main);&lt;br /&gt;    do();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void do(){&lt;br /&gt;  // 通信中ダイアログの表示&lt;br /&gt;  progressDialog = new ProgressDialog(this);&lt;br /&gt;  progressDialog.setTitle("データ取得中");&lt;br /&gt;  progressDialog.setMessage("しばらくお待ちください");&lt;br /&gt;  progressDialog.setIndeterminate(false);&lt;br /&gt;  progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);&lt;br /&gt;  progressDialog.show();&lt;br /&gt;  Thread thread = new Thread(this);&lt;br /&gt;  thread.start();&lt;br /&gt; }&lt;br /&gt; public void run() {&lt;br /&gt; // 時間のかかる処理をここに記述&lt;br /&gt;  try{&lt;br /&gt;   // 今回はわざと3秒間スリープ&lt;br /&gt;   Thread.sleep(3000);&lt;br /&gt;  } catch (InterruptedException ie){&lt;br /&gt;  }  ///////////////////////&lt;br /&gt;&lt;br /&gt;  handler.sendEmptyMessage(0);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private Handler handler = new Handler() {&lt;br /&gt;  public void handleMessage(Message msg) {&lt;br /&gt;  // 処理終了時の動作をここに記述&lt;br /&gt;&lt;br /&gt;  /////////////////////////&lt;br /&gt;  // プログレスダイアログ終了&lt;br /&gt;  progressDialog.dismiss();&lt;br /&gt;  }&lt;br /&gt; };&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6219664535980472689?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6219664535980472689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6219664535980472689'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/05/android_4203.html' title='Androidでスレッドの利用'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8674904581208373826</id><published>2010-05-13T20:49:00.003+09:00</published><updated>2011-06-27T10:48:50.314+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidで画面サイズの取得</title><content type='html'>Androidで画面サイズを取得するやり方メモ&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;DisplayMetrics metrics = new DisplayMetrics();&lt;br /&gt;getWindowManager().getDefaultDisplay().getMetrics(metrics);&lt;br /&gt;int width = metrics.widthPixels;  // 横幅サイズを取得&lt;br /&gt;int height = metrics.heightPixels; // 縦幅サイズを取得&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8674904581208373826?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8674904581208373826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8674904581208373826'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/05/android_13.html' title='Androidで画面サイズの取得'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6650283314772135724</id><published>2010-05-13T20:39:00.002+09:00</published><updated>2011-06-27T10:49:47.575+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidのエミュレータ利用法</title><content type='html'>EclipseでAndroid開発をしている際，Eclipseの[実行]からAndroidアプリケーションで実行をすると思います（そして，エミュレータが立ち上がり挙動を確かめる．）．&lt;br /&gt;&lt;br /&gt;しかし，エミュレータを起動するのには，結構な時間がかかります．&lt;br /&gt;&lt;br /&gt;そこで，エミュレータを立ち上げたまま，コマンドでプログラム(*.apk)をダウンロードする方法を記載します．&lt;br /&gt;[]内は環境に合わせて書き換えてください．&lt;br /&gt;&lt;br /&gt;&amp;lt;エミュレータの立ち上げ方&amp;gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;emulator -avd [AVD名]&lt;/pre&gt;&lt;br /&gt;&amp;lt;ダウンロード方法&amp;gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;adb install [*.apk]adb install -r [*.apk]   // すでにエミュレータ内にapkがある場合は，再インストールのためrオプションを書きます．&lt;br /&gt;adb -d install [*.apk]   // 実機にインストールする場合&lt;br /&gt;adb -e install [*.apk]   // エミュレータにインストールする場合&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6650283314772135724?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6650283314772135724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6650283314772135724'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/05/android.html' title='Androidのエミュレータ利用法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5774616796104778170</id><published>2010-04-26T21:07:00.002+09:00</published><updated>2011-06-27T10:53:09.013+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Server returned HTTP response code: 403 for URLに対して</title><content type='html'>Javaです．&lt;br /&gt;&lt;br /&gt;URLConnectionを使って，HTTPコネクションをはり，HTMLを取得する際，下記のように書く．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.io.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;&lt;br /&gt;public class MyURLConnection {&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  try {&lt;br /&gt;   URL url = new URL("http://example.com/");&lt;br /&gt;   URLConnection conn = url.openConnection();&lt;br /&gt;   BufferedReader in = new BufferedReader(      new InputStreamReader(conn.getInputStream()));&lt;br /&gt;   String line;&lt;br /&gt;   while ((line = in.readLine()) != null) {&lt;br /&gt;    System.out.println(line);&lt;br /&gt;   }&lt;br /&gt;   in.close();&lt;br /&gt;  } catch (Exception ex) {&lt;br /&gt;   ex.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ただ，サイトによっては，&lt;br /&gt;&lt;div style="color: red;"&gt;&lt;b&gt;java.io.IOException: Server returned HTTP response code: 403 for URL:&lt;/b&gt;&lt;/div&gt;というエラーが発生する．&lt;br /&gt;そこで，下記のように，ヘッダを設定するとすんなり通る．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.io.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;&lt;br /&gt;public class MyURLConnection {&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  try {&lt;br /&gt;   URL url = new URL("http://example.com");&lt;br /&gt;   URLConnection conn = url.openConnection();&lt;br /&gt;   /////////////////////////////////////////////////////&lt;br /&gt;   conn.setRequestProperty("User-agent","Mozilla/5.0");&lt;br /&gt;   /////////////////////////////////////////////////////&lt;br /&gt;   BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));&lt;br /&gt;   String line;&lt;br /&gt;   while ((line = in.readLine()) != null) {&lt;br /&gt;    System.out.println(line);&lt;br /&gt;   }&lt;br /&gt;   in.close();&lt;br /&gt;  } catch (Exception ex) {&lt;br /&gt;   ex.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これは，ヘッダが正しく設定されてないHTTPコネクションに対しては，サーバ側が受理しないことがあるため（よくわからないプログラムからアクセスされていると推測できる）．&lt;br /&gt;そこで，ヘッダを設定してあげると通る．&lt;br /&gt;&lt;br /&gt;ということでいいのかな？？？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5774616796104778170?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5774616796104778170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5774616796104778170'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/04/server-returned-http-response-code-403.html' title='Server returned HTTP response code: 403 for URLに対して'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7646225530940836252</id><published>2010-04-25T19:55:00.005+09:00</published><updated>2011-06-27T11:07:18.969+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidでカメラ画像取得→ソケット転送</title><content type='html'>Androidのカメラを使用したかったのでサンプルプログラムを書いてみた．&lt;br /&gt;&lt;br /&gt;ついでに，取得した画像をPCにソケットで転送しPCのディスプレイ上で表示した．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-VKgbWDYIRg&amp;amp;hl=ja&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/-VKgbWDYIRg&amp;amp;hl=ja&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;以下，プログラム．&lt;br /&gt;カメラ画像の取得については，↓のサイトを参考にした．&lt;br /&gt;&lt;a href="http://www.saturn.dti.ne.jp/%7Enpaka/android/CameraEx/index.html" target="_blank"&gt;Androidメモ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;画像の解像度は，デフォルトサイズでは，2048×1536(1M~1.2M)となり，転送に時間がかかったので，480×320に変更した．&lt;br /&gt;&lt;br /&gt;[Android側-CameraTest.java]&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.blogspot.ayakix_lablog.camera;&lt;br /&gt;import android.app.Activity;&lt;br /&gt;import android.os.Bundle;&lt;br /&gt;import android.view.Window;&lt;br /&gt;import android.view.WindowManager;&lt;br /&gt;&lt;br /&gt;public class CameraTest extends Activity {&lt;br /&gt; /** Called when the activity is first created. */&lt;br /&gt; @Override&lt;br /&gt; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;  super.onCreate(savedInstanceState);&lt;br /&gt;  requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;  setContentView(new CameraView(this));&lt;br /&gt;  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[Android側-CameraView.java]&lt;br /&gt;&lt;pre class="java" name="code"&gt;package com.blogspot.ayakix_lablog.camera;&lt;br /&gt;import android.content.Context;&lt;br /&gt;import android.graphics.PixelFormat;&lt;br /&gt;import android.hardware.Camera;&lt;br /&gt;import android.view.MotionEvent;&lt;br /&gt;import android.view.SurfaceHolder;&lt;br /&gt;import android.view.SurfaceView;&lt;br /&gt;import java.io.BufferedOutputStream;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;&lt;br /&gt;public class CameraView extends SurfaceView implements SurfaceHolder.Callback {&lt;br /&gt; private SurfaceHolder holder; //ホルダー&lt;br /&gt; private Camera camera; //カメラ&lt;br /&gt; private static final int WIDTH  = 480;&lt;br /&gt; private static final int HEIGHT = 320;&lt;br /&gt; private static final int PORT = 4680;&lt;br /&gt; private static final String IP_ADDR = "1.1.1.1"; // IPアドレス&lt;br /&gt;&lt;br /&gt; public CameraView(Context context) {&lt;br /&gt;  super(context);&lt;br /&gt;  // サーフェイスホルダーの生成&lt;br /&gt;  holder=getHolder();&lt;br /&gt;  holder.addCallback(this);&lt;br /&gt;  //プッシュバッッファの指定&lt;br /&gt;  holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void surfaceCreated(SurfaceHolder holder) {&lt;br /&gt;  // カメラの初期化&lt;br /&gt;  try {&lt;br /&gt;   camera=Camera.open();&lt;br /&gt;   camera.setPreviewDisplay(holder);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void surfaceChanged(SurfaceHolder holder,int format,int w,int h) {&lt;br /&gt;  // カメラのプレビュー開始&lt;br /&gt;  Camera.Parameters parameters=camera.getParameters();&lt;br /&gt;  parameters.setPictureSize(WIDTH, HEIGHT);&lt;br /&gt;  parameters.setPreviewFormat(PixelFormat.JPEG);&lt;br /&gt;  camera.setParameters(parameters);&lt;br /&gt;  camera.startPreview();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void surfaceDestroyed(SurfaceHolder holder) {&lt;br /&gt;  // カメラのプレビュー停止&lt;br /&gt;  camera.setPreviewCallback(null);&lt;br /&gt;  camera.stopPreview();&lt;br /&gt;  camera.release();&lt;br /&gt;  camera=null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public boolean onTouchEvent(MotionEvent event) {&lt;br /&gt;  if (event.getAction()==MotionEvent.ACTION_DOWN) {&lt;br /&gt;   takePicture();&lt;br /&gt;   camera.startPreview();&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void takePicture() {&lt;br /&gt;  // カメラのスクリーンショットの取得&lt;br /&gt;  camera.takePicture(null, null,new Camera.PictureCallback() {&lt;br /&gt;   public void onPictureTaken(byte[] data,Camera camera) {&lt;br /&gt;    sendData(getContext(), data);&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void sendData(Context context, byte[] data){&lt;br /&gt;  // ソケットの作成&lt;br /&gt;  Socket socket;&lt;br /&gt;  BufferedOutputStream out;&lt;br /&gt;  try{&lt;br /&gt;   socket = new Socket(IP_ADDR, PORT);&lt;br /&gt;   out = new BufferedOutputStream(socket.getOutputStream());&lt;br /&gt;   out.write(data);&lt;br /&gt;   if(out != null) out.close();&lt;br /&gt;   if(socket != null) socket.close();&lt;br /&gt;  } catch (Exception ex){&lt;br /&gt;   ex.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[Android側-AndroidManifest.xml]&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;manifest versioncode="1" versionname="1.0" package="com.blogspot.ayakix_lablog.camera" android="http://schemas.android.com/apk/res/android"&gt;&lt;br /&gt;&lt;application icon="@drawable/icon" label="@string/app_name"&gt;&lt;br /&gt; &lt;activity label="@string/app_name" name=".CameraTest" android:screenOrientation="landscape"&gt;&lt;br /&gt;  &lt;intent-filter&gt;&lt;br /&gt;                 &lt;action name="android.intent.action.MAIN"&gt;&lt;br /&gt;                  &lt;category name="android.intent.category.LAUNCHER"&gt;&lt;/category&gt;&lt;br /&gt;          &lt;/action&gt;&lt;br /&gt;      &lt;/intent-filter&gt;&lt;br /&gt;      &lt;uses-permission name="android.permission.CAMERA"&gt;&lt;/uses-permission&gt;&lt;br /&gt;      &lt;uses-permission name="android.permission.INTERNET"&gt;&lt;/uses-permission&gt;&lt;br /&gt; &lt;/activity&gt;&lt;br /&gt;&lt;/application&gt;&lt;br /&gt;&lt;/manifest&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[PC側-Main.java]&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.io.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; private static final int PORT = 4680;&lt;br /&gt;&lt;br /&gt; public static void main(String argv[]) {&lt;br /&gt;  System.out.println("サーバ起動");&lt;br /&gt;  int num = 0;&lt;br /&gt;  ServerSocket serverSocket = null;&lt;br /&gt;  while(true){&lt;br /&gt;   try {&lt;br /&gt;    // サーバーソケットの生成&lt;br /&gt;    if(serverSocket == null) serverSocket = new ServerSocket(PORT);&lt;br /&gt;    // クライアントからの接続を待ちます&lt;br /&gt;    Socket socket = serverSocket.accept();&lt;br /&gt;    BufferedOutputStream out = new BufferedOutputStream(&lt;br /&gt;       new FileOutputStream(new File(num + ".jpg")));&lt;br /&gt;    // 入力ストリームを取得&lt;br /&gt;    BufferedInputStream in = new BufferedInputStream(socket.getInputStream());&lt;br /&gt;    byte[] buf = new byte[1024];&lt;br /&gt;    int len;&lt;br /&gt;    while((len=in.read(buf))!=-1){&lt;br /&gt;     out.write(buf, 0, len);&lt;br /&gt;    }&lt;br /&gt;    // GUIで画像を表示&lt;br /&gt;    new GUIExe(num);&lt;br /&gt;    // 入出力ストリームを閉じる&lt;br /&gt;    out.flush();&lt;br /&gt;    out.close();&lt;br /&gt;    in.close();&lt;br /&gt;    System.out.println("done");&lt;br /&gt;    // ソケットを閉じる&lt;br /&gt;    socket.close();&lt;br /&gt;    num++;&lt;br /&gt;   } catch(Exception e) {&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class GUIExe extends Thread {&lt;br /&gt; private int num;&lt;br /&gt; &lt;br /&gt; public GUIExe(int num) {&lt;br /&gt;  this.num = num;&lt;br /&gt;  this.start();&lt;br /&gt;  // スレッド開始&lt;br /&gt; }&lt;br /&gt; public void run() {&lt;br /&gt;  new GUI(num);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[PC側-GUI.java]&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.awt.Graphics;&lt;br /&gt;import java.awt.Graphics2D;&lt;br /&gt;import java.awt.event.WindowAdapter;&lt;br /&gt;import java.awt.event.WindowEvent;&lt;br /&gt;import java.awt.image.BufferedImage;&lt;br /&gt;import java.io.File;&lt;br /&gt;import javax.imageio.ImageIO;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;&lt;br /&gt;public class GUI extends JFrame {&lt;br /&gt; private int num;&lt;br /&gt; private final int WIDTH  = 480;&lt;br /&gt; private final int HEIGHT = 320;&lt;br /&gt; &lt;br /&gt; public GUI(int num){&lt;br /&gt;  this.num = num;&lt;br /&gt;  this.addWindowListener(new WindowAdapter(){&lt;br /&gt;   public void windowClosing(WindowEvent e){&lt;br /&gt;    System.exit(0);&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  this.setBounds(0, 0, WIDTH, HEIGHT);&lt;br /&gt;  this.setLocation(num/3*WIDTH, num%3*HEIGHT);&lt;br /&gt;  this.setUndecorated(true);&lt;br /&gt;  this.setVisible(true);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void paint(Graphics g){&lt;br /&gt;  Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;  BufferedImage readImage = null;&lt;br /&gt;  try {&lt;br /&gt;   readImage = ImageIO.read(new File(num + ".jpg"));&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;   readImage = null;&lt;br /&gt;  }&lt;br /&gt;  if (readImage != null){&lt;br /&gt;   g2.drawImage(readImage, 0, 0, WIDTH, HEIGHT, this);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7646225530940836252?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7646225530940836252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7646225530940836252'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/04/android.html' title='Androidでカメラ画像取得→ソケット転送'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-3706024988814524224</id><published>2010-04-15T13:49:00.003+09:00</published><updated>2010-04-15T13:53:50.907+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Firefoxアドオン-vimperatorのプラグインmulti_requester.js</title><content type='html'>FirefoxのアドオンにVimperatorというものがあります．&lt;br /&gt;[参考]&amp;nbsp; &lt;br /&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/4891" target="_blank"&gt;Vimperator :: Add-ons for Firefox&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.itmedia.co.jp/enterprise/articles/0902/25/news037.html" target="_blank"&gt;Firefox Hacks：Vimperator――FirefoxをVim風のキーバインドで操作 - ITmedia エンタープライズ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;デフォルトでもとても便利で重宝しているのですが，カスタマイズ性が高く，プラグインを導入することでより利便性が高まります．&lt;br /&gt;&lt;br /&gt;今回はmulti_requester.jsというプラグインを導入したので，メモします．&lt;br /&gt;[参考] &lt;br /&gt;&lt;a href="http://d.zeromemory.info/2008/11/20/vimperator-multi_requester.html" target="_blank"&gt;[vimperator]リクエスト結果をバッファ出力(muilti_requester.js) – suVeneのアレ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;リンク先にもあるように，複数の検索ページからリクエスト結果をvimperatorのバッファ部分に出力することができます．&lt;br /&gt;&lt;br /&gt;使用可能な検索エンジンは下記ページを参考にしてください．&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wedata.net/databases/Multi%20Requester/items" target="_blank"&gt;アイテム - データベース: Multi Requester - wedata&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;検索エンジンの例を挙げます．カッコ内はコマンド例です．&lt;br /&gt;&lt;br /&gt;&amp;nbsp;[alc (:mr alc 検索文字)]&lt;br /&gt;&amp;nbsp;和英-英和辞書であるアルクからデータを引っ張ってきます．Webページで知らない単語があった場合，バッファに文字を出せるため，タブを切り替えたり ページを移動することなく，辞書をひくことができ，便利です． &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/S8aXHcVepUI/AAAAAAAACxg/vmJ-R68yr68/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="398" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/S8aXHcVepUI/AAAAAAAACxg/vmJ-R68yr68/s400/1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Yahoo 天気予報　(:mr weather-yahoo 地名or郵便番号 )]&lt;br /&gt;Yahoo 天気予報からデータを引っ張ってきます．必要最小限のデータだけを引っ張ってくるので，見やすいです． &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M60ZyknxGnQ/S8aYIW65kWI/AAAAAAAACxo/vWtooX_BegY/s1600/Image%EF%BC%881087%C3%97838%EF%BC%89.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_M60ZyknxGnQ/S8aYIW65kWI/AAAAAAAACxo/vWtooX_BegY/s320/Image%EF%BC%881087%C3%97838%EF%BC%89.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;[php リファレンス検索 (:mr php-search 検索文字)]&lt;br /&gt;phpの関数等を調べることができます． &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/S8aaDadkrmI/AAAAAAAACx4/mj-xZmsh62c/s1600/Image%EF%BC%881087%C3%97838%EF%BC%89.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/S8aaDadkrmI/AAAAAAAACx4/mj-xZmsh62c/s320/Image%EF%BC%881087%C3%97838%EF%BC%89.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみに，multi_requester以外にも便利なプラグインがたくさんあります．&lt;br /&gt;下記ページからダウンロードし， pluginフォルダの中にjsﾌｧｲﾙを置くだけで使用可能となります．&lt;br /&gt;&lt;a href="http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/branches/2.2"&gt;/lang/javascript/vimperator-plugins/branches/2.2 – CodeRepos::Share – Trac&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-3706024988814524224?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3706024988814524224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3706024988814524224'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/04/firefox-vimperatormultirequesterjs.html' title='Firefoxアドオン-vimperatorのプラグインmulti_requester.js'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M60ZyknxGnQ/S8aXHcVepUI/AAAAAAAACxg/vmJ-R68yr68/s72-c/1.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6365305464704006035</id><published>2010-02-01T11:32:00.014+09:00</published><updated>2010-02-01T18:32:24.896+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>ArduinoにLCDを接続</title><content type='html'>ArduinoにLCDを接続してみました．&lt;br /&gt;&lt;br /&gt;まず，関連部品を購入します．&lt;br /&gt;今回購入したのは，&lt;a href="http://akizukidenshi.com/" target="_blank"&gt;秋月電子&lt;/a&gt;から&lt;br /&gt;・&lt;a href="http://akizukidenshi.com/catalog/g/gP-00036/" target="_blank"&gt;ＬＣＤキャラクタディスプレイモジュール　２０×４行バックライト付き&lt;/a&gt;&lt;br /&gt;・ &lt;a href="http://akizukidenshi.com/catalog/g/gC-02489/" target="_blank"&gt;１４Ｐフラットケーブル&lt;/a&gt;&lt;br /&gt;・&lt;a href="http://akizukidenshi.com/catalog/g/gP-00245/" target="_blank"&gt;小型ボリューム　５ＫΩＢ&lt;/a&gt;&lt;br /&gt;です．&lt;br /&gt;小型ボリュームは，LCDのコントラストを調整するためです．（作ってみてわかったのですが，コントラストを調整しないとちゃんと表示されません）&lt;br /&gt;&lt;br /&gt;LCDはこんな感じ&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/S2Y-9VrDozI/AAAAAAAACwI/YfRjeoJ3WHM/s1600-h/IMG_0603.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/S2Y-9VrDozI/AAAAAAAACwI/YfRjeoJ3WHM/s400/IMG_0603.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;まず，ハンダづけを行います．&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2Y_CDkJfSI/AAAAAAAACwQ/S44DaoeAoVI/s1600-h/IMG_0607.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2Y_CDkJfSI/AAAAAAAACwQ/S44DaoeAoVI/s400/IMG_0607.JPG" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;久しぶりにハンダづけを行いました・・・ちょっと汚くなってしまった・・・．でもまぁ，OK&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;ボリュームにも必要に応じてハンダづけを行います．&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;全体はこんな感じ&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2Y_HMnlnqI/AAAAAAAACwY/VJaw60Z_vxA/s1600-h/IMG_0611.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2Y_HMnlnqI/AAAAAAAACwY/VJaw60Z_vxA/s400/IMG_0611.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;br /&gt;今回はボタンを押した回数をカウントするプログラムを作成してみました．&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Kc1ssbFaigk&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Kc1ssbFaigk&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;プログラムはこのようになります．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;br /&gt;#define BUTTON 9&lt;br /&gt;#define LCD_ROWS 4&lt;br /&gt;#define LCD_COLS 20&lt;br /&gt;&lt;br /&gt;LiquidCrystal lcd(12, 11, 5, 4, 3, 2);&lt;br /&gt;&lt;br /&gt;int count = 0;&lt;br /&gt;int before_button = LOW;&lt;br /&gt;&lt;br /&gt;void disp_count(){&lt;br /&gt;  lcd.clear();&lt;br /&gt;  lcd.setCursor(0, 0);&lt;br /&gt;  lcd.print("Count :");&lt;br /&gt;  lcd.print(count);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  pinMode(BUTTON, INPUT);&lt;br /&gt;  lcd.begin(LCD_COLS, LCD_ROWS);&lt;br /&gt;  lcd.clear();&lt;br /&gt;  disp_count();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  int button_input = digitalRead(BUTTON);&lt;br /&gt;  delay(10);&lt;br /&gt;  &lt;br /&gt;  if( before_button == LOW &amp;&amp; button_input == HIGH){&lt;br /&gt;    count++;&lt;br /&gt;    disp_count();&lt;br /&gt;  }&lt;br /&gt;  before_button = button_input;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6365305464704006035?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6365305464704006035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6365305464704006035'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/02/arduinolcd.html' title='ArduinoにLCDを接続'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M60ZyknxGnQ/S2Y-9VrDozI/AAAAAAAACwI/YfRjeoJ3WHM/s72-c/IMG_0603.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-2953457755227480480</id><published>2010-01-30T14:47:00.001+09:00</published><updated>2010-01-30T14:57:13.260+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Arduinoで２進数カウンタ</title><content type='html'>Arduinoを購入しました．&lt;br /&gt;Arduinoは，基板（マイコンボード）と開発環境で構成されたフィジカルコンピューティングシステムです．&lt;br /&gt;&lt;br /&gt;特徴としてオープンソースハードウェアであることが挙げられます．&lt;br /&gt;&lt;br /&gt;Arduinoには用途に応じて様々な種類のボードが用意されていますが，今回購入したのは，一通りの基本機能を搭載したArduino Duemilanoveです．&lt;br /&gt;Amazonにて「Arduinoをはじめようキット」を4200円で買いました．&lt;br /&gt;付属品はこんな感じ&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2PDbzIFMzI/AAAAAAAACvg/C31Z9zhFRrY/s1600-h/IMG_0594.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/S2PDbzIFMzI/AAAAAAAACvg/C31Z9zhFRrY/s400/IMG_0594.JPG" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;※Arduinoは，USB経由で給電とプログラムの書き込みを行うのですが，この「Arduinoをはじめようキット」にはUSBケーブルがついてません！！（はじめようキットなのに・・・）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;そのため，自分でB端子のUSBを用意する必要があります．&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Arduino本体はこんな感じ&lt;br /&gt;・USB端子 &lt;br /&gt;・電源プラグ&lt;br /&gt;・デジタル入出力ポート×14&lt;br /&gt;・3.3V電源&lt;br /&gt;・5V電源&lt;br /&gt;・アナログ入力ポート×6&lt;br /&gt;・アナログ出力ポート×6&lt;br /&gt;・リセットスイッチ（プログラムを初めから実行する）&lt;br /&gt;・モニター用端子&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/S2PEFdLuBLI/AAAAAAAACvo/og1WIa62km8/s1600-h/IMG_0595.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/S2PEFdLuBLI/AAAAAAAACvo/og1WIa62km8/s400/IMG_0595.JPG" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;開発環境のダウンロードは下記サイトから行えます．お使いのOSに合ったファイルをダウンロードしてください．&lt;br /&gt;&lt;a href="http://arduino.cc/en/Main/Software" TARGET="_blank"&gt;http://arduino.cc/en/Main/Software&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Windowsの場合，arduino-00**.zipをダウンロードするかと思います．&lt;br /&gt;展開してから，arduino.exeをダブルクリックしてください．これだけで実装環境の構築が終わりました．&lt;br /&gt;※arduino.exeはJavaVM上で動作します．そのため，事前にJavaをインストールする必要があります．&lt;br /&gt;&lt;br /&gt;プログラムの実行手順は下記の通りです．&lt;br /&gt;1. プログラムを記述&lt;br /&gt;2. エラーがないか確認（一番左のVerifyボタン）&lt;br /&gt;3. アップロード（右から２番目のUploadボタン）&lt;br /&gt;うまくアップロードできると，Arduinoが点滅します．&lt;br /&gt;もし，アップロード時にエラーがでるようでしたら，デバイスマネージャにて，正しくデバドラがインストールされているか，また，接続されているCOMポートの番号と実装環境のTools-&amp;gt;Serial Portで選択されているCOMポートの番号が一致しているかを確かめてください．&lt;br /&gt;&lt;br /&gt;試しに，付属の光素子とスイッチを使用して光に反応する２進数カウンタを作ってみました．&lt;br /&gt;ちょっとわかりにくいですが・・・ &lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/q7G2USL3l90&amp;hl=ja&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/q7G2USL3l90&amp;hl=ja&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ソースはこちら&lt;br /&gt;C-likeですね．define部分は接続した入出力ポートに合わせてください．&lt;br /&gt;setup関数は一番初めに一度だけ実行される関数．loop関数はプログラムの本体となり，ここに記述されている内容が繰り返し実行されます．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;#define LED3 8&lt;br /&gt;#define LED2 7&lt;br /&gt;#define LED1 6&lt;br /&gt;#define BUTTON 9&lt;br /&gt;#define INTERVAL 10&lt;br /&gt;#define CDS 10&lt;br /&gt;&lt;br /&gt;int count = 0;&lt;br /&gt;int before_cds = LOW;&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;  pinMode(LED3, OUTPUT);&lt;br /&gt;  pinMode(LED2, OUTPUT);&lt;br /&gt;  pinMode(LED1, OUTPUT);&lt;br /&gt;  pinMode(BUTTON, INPUT);&lt;br /&gt;  pinMode(CDS, INPUT);&lt;br /&gt;}&lt;br /&gt;void check_count(){&lt;br /&gt;  if((count &amp;amp; 4) == 4){&lt;br /&gt;    digitalWrite(LED3, HIGH);&lt;br /&gt;  } else {&lt;br /&gt;    digitalWrite(LED3, LOW);&lt;br /&gt;  }&lt;br /&gt;  if((count &amp;amp; 2) == 2){&lt;br /&gt;    digitalWrite(LED2, HIGH);&lt;br /&gt;  } else {&lt;br /&gt;    digitalWrite(LED2, LOW);&lt;br /&gt;  }&lt;br /&gt;  if((count &amp;amp; 1) == 1){&lt;br /&gt;    digitalWrite(LED1, HIGH);&lt;br /&gt;  } else {&lt;br /&gt;    digitalWrite(LED1, LOW);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;  int cds_input = digitalRead(CDS);&lt;br /&gt;  int button_input = digitalRead(BUTTON);&lt;br /&gt;  delay(INTERVAL);&lt;br /&gt;  &lt;br /&gt;  if(cds_input != before_cds){&lt;br /&gt;    before_cds = cds_input;&lt;br /&gt;    if(cds_input == HIGH){&lt;br /&gt;      count++;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  check_count();&lt;br /&gt;  &lt;br /&gt;  if( button_input == HIGH ){&lt;br /&gt;    count = 0;&lt;br /&gt;    check_count();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-2953457755227480480?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2953457755227480480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2953457755227480480'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2010/01/arduino.html' title='Arduinoで２進数カウンタ'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M60ZyknxGnQ/S2PDbzIFMzI/AAAAAAAACvg/C31Z9zhFRrY/s72-c/IMG_0594.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6164641640715332534</id><published>2009-12-31T01:46:00.001+09:00</published><updated>2009-12-31T01:47:07.014+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>namebenchを使ってみた</title><content type='html'>DNSサーバのベンチマークソフトであるnamebenchを使ってみました．&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/namebench/" target="_blank"&gt;[ダウンロードはこちら]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;このソフトは，自身が設定しているDNSサーバやGoogle Public DNS，また，その地域にあるDNSサーバなどを検査し，最良のDNSサーバをレコメンドしてくれます．&lt;br /&gt;&lt;br /&gt;使い方も簡単で，結果はWeb上にて，グラフィカルに表示してくれます．&lt;br /&gt;便利ですねー&lt;br /&gt;&lt;br /&gt;僕の環境では，Google Public DNSは，5番目でした．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/SzuDuz2TSZI/AAAAAAAACvQ/8bn-Jb8KWPc/s1600-h/Image%EF%BC%88543%C3%97373%EF%BC%89.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/SzuDuz2TSZI/AAAAAAAACvQ/8bn-Jb8KWPc/s400/Image%EF%BC%88543%C3%97373%EF%BC%89.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M60ZyknxGnQ/SzuDw386XDI/AAAAAAAACvY/GPXPXYhIoWo/s1600-h/%E7%84%A1%E9%A1%8C.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_M60ZyknxGnQ/SzuDw386XDI/AAAAAAAACvY/GPXPXYhIoWo/s400/%E7%84%A1%E9%A1%8C.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6164641640715332534?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6164641640715332534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6164641640715332534'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/namebench.html' title='namebenchを使ってみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M60ZyknxGnQ/SzuDuz2TSZI/AAAAAAAACvQ/8bn-Jb8KWPc/s72-c/Image%EF%BC%88543%C3%97373%EF%BC%89.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-2936811910763383351</id><published>2009-12-29T17:15:00.001+09:00</published><updated>2009-12-29T17:17:01.907+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Autohotkeyでプリントスクリーン機能拡張</title><content type='html'>プリントスクリーンはよく使う機能の一つですが，&lt;br /&gt;Autohotkeyを用いて，この機能を拡張してみたいと思います．&lt;br /&gt;&lt;br /&gt;拡張する機能は以下のようなものです．&lt;br /&gt;&lt;br /&gt;Ctrlキーが押されている場合は，マイクロソフトペイントを起動し，&lt;br /&gt;自動的にペーストすることで，編集状態に入ります．&lt;br /&gt;逆にCtrlキーが押されていない場合には，&lt;a href="http://netakiri.net/soft/exclip.shtml" target="new"&gt;ExClip&lt;/a&gt;を起動します．&lt;br /&gt;&lt;a href="http://netakiri.net/soft/exclip.shtml" target="new"&gt;ExClip&lt;/a&gt;は，クリップボードに格納されている画像を保存するためのソフトです．詳しくは&lt;a href="http://netakiri.net/soft/exclip.shtml" target="new"&gt;開発元ページ&lt;/a&gt;を御覧下さい．&lt;br /&gt;&lt;br /&gt;もちろん，Altキーを押しながらプリントスクリーンキーを押すことでアクティブなウィンドウの画像のみ取得できるのは，変わりありません．&lt;br /&gt;&lt;br /&gt;途中で100ミリ秒Sleepしているのは，ペイントを起動しきっていない状態で，ペーストするのを防ぐためです．また，変数exClipにExClipのパスを予め設定しておいてください．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;; キャプチャ画像を保存する ※ExClipが必要 &lt;br /&gt;*~PrintScreen::&lt;br /&gt; GetKeyState, ctrlFg, Ctrl   ; Ctrlが押されているか？&lt;br /&gt; if ctrlFg = D     ; Ctrlが押されている場合&lt;br /&gt; {&lt;br /&gt;  Run, mspaint.exe&lt;br /&gt;  Sleep 100&lt;br /&gt;  Send, ^v&lt;br /&gt; } else {&lt;br /&gt;  Run, %exClip%&lt;br /&gt; }&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-2936811910763383351?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2936811910763383351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2936811910763383351'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/autohotkey.html' title='Autohotkeyでプリントスクリーン機能拡張'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6002534513452852945</id><published>2009-12-26T00:15:00.000+09:00</published><updated>2009-12-26T00:15:41.312+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>素人のように考え、玄人として実行する</title><content type='html'>素人のように考え、玄人として実行する（金出 武雄 著）&lt;br /&gt;&lt;br /&gt;先日京都大学で開催されたマイクロソフトリサーチ主催の21世紀コンピューティングコンファレンスにて，カーネギーメロン大学の金出先生の発表を聴講しました．&lt;br /&gt;なにより感じたのは「楽しそうに研究している」ということでした．&lt;br /&gt;金出先生が，研究に対してどのような哲学を持ち，取り組んでおられるか興味があり，この本を手に取りました．&lt;br /&gt;&lt;br /&gt;参考になった箇所をいくつか抜粋したいと思います．&lt;br /&gt;&lt;br /&gt;p.34 問題の発見方法について&lt;br /&gt;A・ニューウェル教授は，学生たちに熱っぽく語るのが常であった．「そういう問題の一つ一つが『解いてくれ，解いてくれ』と，恋人を待っているようにわれわれ研究者を待っているのだ」と．&lt;br /&gt;&lt;br /&gt;p.43 玄人としての実行方法について&lt;br /&gt;プロとしていい仕事ができるか，できないか，アイデアを完成できるかどうかの分かれ道は，捨てて買える決断力，勇気があるかであろう．&lt;br /&gt;&lt;br /&gt;p.82 研究が難航した時に&lt;br /&gt;できるやつほど迷うものだ&lt;br /&gt;&lt;br /&gt;p.180 異なるジャンルの人と触れ合う必要があるという文にて&lt;br /&gt;世の中には，自分よりはるかに優れている人，自分のしらないことを知っている人，自分が思いもしないことを考えている人がいくらでもあり，驚かされる．&lt;br /&gt;&lt;br /&gt;p.270 プレゼンについて&lt;br /&gt;プレゼン資料は一目で内容がわからないように作る（略）&lt;br /&gt;それだけで何を言いたいのかがわかると，聴衆は勝手なことを考え始める．（略）&lt;br /&gt;それだけでは何を言いたいのかわからないが，講演者の説明とあわせると初めて，言いたいことがちょうどぴったりわかるように設計すべきである．（略）&lt;br /&gt;すると聴衆は，何だろうかと思うから講演者の言う事を聞き始める．そして，講演者は聴衆の考えることをコントロールできるのである．&lt;br /&gt;&lt;br /&gt;p.295 日本独自の～～というものについて&lt;br /&gt;世界で売れている自動車や電気製品は「日の丸自動車」とか「日本人だからできたウォークマン」とは言わない．言う必要がないからである．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;「素人のように考え、玄人として実行する」ということの何と難しいことか…．ただ，これから心がけていきたいと思います．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6002534513452852945?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6002534513452852945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6002534513452852945'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_26.html' title='素人のように考え、玄人として実行する'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-762941764161529599</id><published>2009-12-25T23:58:00.000+09:00</published><updated>2009-12-25T23:58:58.463+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>切磋琢磨するアメリカの科学者たち</title><content type='html'>切磋琢磨するアメリカの科学者たち（菅 裕明 著）&lt;br /&gt;を読みました．&lt;br /&gt;&lt;br /&gt;この本を読むきっかけについてなのですが，&lt;br /&gt;先日，僕の通っている大学院の講義にて，この本の著者がゲストとして呼ばれ，１コマ分の授業を持ちました．&lt;br /&gt;その中で，著者が米国の大学のシステムについてお話をしてくださったのですが，その内容がとても興味深く，もっと知りたいと思い，この本を購入しました．&lt;br /&gt;&lt;br /&gt;著者は，岡山大学大学院を卒業後，MITにてPh.D.を取得，ニューヨーク州立バッファロー大学のAssistant Professorを経て，現在は，東京大学先端科学技術研究センターの教授をされています．そのため，著者は，日米どちらの学生，教員も経験されており，その経験をもとにこの本を記されています．&lt;br /&gt;&lt;br /&gt;この本では，まず，米国における学生側から見た大学システム（特にPh.D.について）や教員側のシステム（新人教員のスタートアップ費用やテニュアの審査法，大学の設備など）について述べられています．&lt;br /&gt;さらに，科研費（著者がライフサイエンス分野の方なので，NIH… National Institute of Healthについて詳しく）の取得方法についても記載されています．&lt;br /&gt;&lt;br /&gt;この本の中で，著者が言いたいことのひとつに，ピアレビューというものがあります．米国のアカデミックシステムは公平な評価のもとに成り立っているということです．例えば，Ph.D.の資格適性試験は，担当の教員以外にも同じ学科の教員複数人で審査する点や，教員のテニュア審査には，同じ学科の教員以外にも外部の大学の教員を審査に加えることが挙げられます（資格適性試験は，日本でも複数人の教員が審査すると思う．また，日本にはテニュアのような資格はない）．&lt;br /&gt;&lt;br /&gt;米国では，学生の間は，少しでもよい大学院（研究室）に入るために成績は当たり前のようによい点を取り，統一試験や資格適性試験などを受け，教員になったら，限られた予算や研究室のスペースから研究を初め，テニュアを取得する・・・つまり，常に競争の中に晒され続けます．この中で勝ち抜くためには，米国の研究者は，常にモチベーションを高く維持する必要があります．（もちろん，日本の研究者のモチベーションが低いわけではない）&lt;br /&gt;私が思うに，米国のシステムの良い点は，簡単に言うと，「研究者としてダメなやつはさっさと諦めて，違う仕事を探しなさい」ということです．&lt;br /&gt;年を取ってから研究者にはなれないと言うわけではないけども，若いうちの方が，他の求人に関しての幅も広く，チャンスも多いだろう．米国のシステムには，「ダメ」とはっきり言うことで，アカデミックポストを早い段階で諦めさせ，別の仕事に就くチャンスを多くするという優しさがあると思います．&lt;br /&gt;&lt;br /&gt;最後に，著者は「では，日本のアカデミックシステムをどのように改革したらよいか？」について書かれています．興味が沸いた方は是非手に取ってお読みください．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-762941764161529599?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/762941764161529599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/762941764161529599'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_1671.html' title='切磋琢磨するアメリカの科学者たち'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7954780594209395257</id><published>2009-12-25T16:05:00.000+09:00</published><updated>2009-12-25T16:05:45.231+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>決断力</title><content type='html'>決断力（羽生 善治著）&lt;br /&gt;&lt;br /&gt;この本では棋士の羽生善治氏が決断力と題して，いかにビジネスや研究，勝負事において決断をするかについて記している．&lt;br /&gt;&lt;br /&gt;感銘を受けた部分をいくつか紹介したい．&lt;br /&gt;&lt;br /&gt;p.39 将棋をする上でなぜ新しい手を指すかについて&lt;br /&gt;未知の世界に踏み込み，自力で考え，新しいルートを探し求める気迫こそ，未来を切り開く力になると私は考えている．&lt;br /&gt;&lt;br /&gt;p.57 考える力について&lt;br /&gt;私は，将棋を通して，そういう人間の本質に迫ることができればいいな，と思っている．&lt;br /&gt;&lt;br /&gt;p.73 新しい手を指す際のリスクについて&lt;br /&gt;私は，積極的にリスクを負うことは未来のリスクを最小限にすると，いつも自分に言い聞かせている．&lt;br /&gt;&lt;br /&gt;p.131 新しいアイデアを発想することについて&lt;br /&gt;自分で手を動かすことが知識に血肉を通わせることになる．&lt;br /&gt;&lt;br /&gt;p.155 学びのプロセスについて&lt;br /&gt;遠回りをすると目標に到達するのに時間はかかるだろうが，歩みの過程で思わぬ発見や出会いがあったりする．&lt;br /&gt;&lt;br /&gt;p. 157 プロジェクトを組む，研究会に参加するということに関して&lt;br /&gt;基本は，自分の力で一から考え，自分で結論を出す．それが必要不可欠であり，前に進む力もそこからしか生まれないと，私は考えている．&lt;br /&gt;（誤解のないように言っておくが，この前の文章で「何人かの人と共同で検討すると，理解の度合いが二倍というよりも，二乗，三乗と早く進んでいくのは確かだ．」と述べている．）&lt;br /&gt;&lt;br /&gt;p.165 コンピュータ将棋について&lt;br /&gt;たとえコンピュータが必勝法を見つけ出したとしても，それを人間が理解することはできないだろう．&lt;br /&gt;&lt;br /&gt;p.168 才能について&lt;br /&gt;才能とは，同じ情熱，気力，モチベーションを持続することである．&lt;br /&gt;&lt;br /&gt;p.169 頭のよさについて&lt;br /&gt;たくさんの知識を活用できる，記憶力がいい，計算が速くできる，機転がきく…なども頭がいいといえよう．私は，ロジカルに考えて判断を積み上げる力も必要であると思うが，見切りをつけ，捨てることを決断する力も大事だと思っている．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;将棋の世界は一般社会的に生きる人から見ると特異な世界と言える．しかし，この本を読む中で，私は，棋士が将棋を指す中で行う情報の取捨と次の一手の選択を行う上で必要な決断力は，一般社会に生きる人でも多いに参考にする箇所があると思った．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7954780594209395257?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7954780594209395257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7954780594209395257'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_25.html' title='決断力'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6787195098096099235</id><published>2009-12-16T23:54:00.000+09:00</published><updated>2009-12-16T23:54:55.533+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>簡単に，単純に考える</title><content type='html'>簡単に，単純に考える（羽生 善治 著）&lt;br /&gt;&lt;br /&gt;この本では棋士の羽生善治氏がスポーツジャーナリストの二宮清純氏，元ラグビー日本代表監督の平尾誠二氏，カーネギーメロン大学教授の金出武雄氏と対談した内容が記されている．&lt;br /&gt;&lt;br /&gt;本書内で感銘を受けた箇所，共感を持てた箇所，考え深かった箇所をいくつか紹介したいと思う．&lt;br /&gt;&lt;br /&gt;p.12　秀才について&lt;br /&gt;二宮：秀才というのは相対的な能力評価だと，私は思うんですよ．周りとの比較でものを考える．たとえば，誰かが100メートルを9秒8で走ったら，自分は9秒7で走れば勝つことができるのだと．&lt;br /&gt;&lt;br /&gt;p.43　記憶力と創造力について&lt;br /&gt;二宮：「どうも記憶が悪くて」という人がいますが，そういう人にかぎって企画力や想像力では負けないと自負している．ですが，創造力やアイデアの源は，頭の中の記憶の組み合わせから生まれてくるような気がします．&lt;br /&gt;&lt;br /&gt;p.46　将棋には非常によくできたルールがあることについて&lt;br /&gt;羽生：制約や約束事があるから，工夫しよう，打破しようという気持ちになるのでしょうね．&lt;br /&gt;&lt;br /&gt;p.116　理想の将棋について&lt;br /&gt;羽生：私の将棋の理想は，一局の将棋が初手から終わりの一手まで，一本の線のようになっていることなんです．&lt;br /&gt;&lt;br /&gt;p.156　羽生の目標について&lt;br /&gt;金出：羽生さんは「いい棋譜を残したい」といわれていますね．&lt;br /&gt;&lt;br /&gt;p.158　有限ゲームについて&lt;br /&gt;金出：ものすごく賢い宇宙人が二人でやってきて，これからチェスを指そうと言う話になる．まずは駒を並べて，先手はじっと考えた末「勝った！」，相手は「参りました」といって，終わったという・・・&lt;br /&gt;&lt;br /&gt;p.176　将棋の盤面の評価について&lt;br /&gt;金出：つまり，盤面のよさを評価する関数は滑らかでない．&lt;br /&gt;&lt;br /&gt;p.189　研究について&lt;br /&gt;金出：研究というのは，自然の世界とか摂理に対して「こういうことをやらせてほしい」「いや，それは難しいからやってくれるな」と交渉しているんですよ．それがちょうどいいところで交渉できたら，研究は成功すると．&lt;br /&gt;&lt;br /&gt;p.229　思考法について&lt;br /&gt;羽生：最善手は一つである．過去の成功体験や決断を妨げている複雑な思いから脱却する勇気を持てば，どこに次の一手を打つべきかという本質も見えてくるはずである．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6787195098096099235?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6787195098096099235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6787195098096099235'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_16.html' title='簡単に，単純に考える'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8245785600011014188</id><published>2009-12-16T23:36:00.001+09:00</published><updated>2009-12-16T23:37:31.120+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>われはロボット（I, Robot）</title><content type='html'>われはロボット（I, Robot）アイザック・アシモフを読んだ&lt;br /&gt;&lt;br /&gt;SFの名作中の名作ですね．&lt;br /&gt;アシモフによって考えられたロボット工学三原則をご存じの方も多いのではないでしょうか？&lt;br /&gt;&lt;br /&gt;第一条 ロボットは人間に危害を加えてはならない。また、その危険を看過することによって、人間に危害を及ぼしてはならない。&lt;br /&gt;&lt;br /&gt;第二条 ロボットは人間にあたえられた命令に服従しなければならない。ただし、あたえられた命令が、第一条に反する場合は、この限りでない。&lt;br /&gt;&lt;br /&gt;第三条 ロボットは、前掲第一条および第二条に反するおそれのないかぎり、自己をまもらなければならない。&lt;br /&gt;&lt;br /&gt;この本の構成は短編集となっており，ロボット工学三原則を軸に話が展開されていきます．&lt;br /&gt;基本的にロボットはロボット工学三原則に基づいて行動します．つまり，命令を与えられて行動を起こす必要がある場合，原則に最も適した行動を選択する必要があります．そこで，一定時間内に，無数の行動パターンの中からベストな解を探索する必要があるのですが，探索が同じ箇所を繰り返したり，探索が止まってしまうことがあります．このような状態に陥るとロボットは暴走したり停止してしまいます．&lt;br /&gt;&lt;br /&gt;これを回避するために，人間はロボットに命令を与える際に，探索する必要がある空間をできるだけ限定し，命令の意図を明確にする必要があります．&lt;br /&gt;（フレーム問題ってやつですね）&lt;br /&gt;&lt;br /&gt;この本の中では，ロボットにこのような問題が起こり，人々に対して不利益をもたらすケースが記されています．&lt;br /&gt;&lt;br /&gt;あーーーーーーーーーーーなるほど！！と推理小説を読んでいる気分になり，その度にアシモフが半世紀も前によくこれだけの話を考えられたなと驚愕しました．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8245785600011014188?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8245785600011014188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8245785600011014188'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/i-robot.html' title='われはロボット（I, Robot）'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-3911815935640627137</id><published>2009-12-13T15:06:00.001+09:00</published><updated>2009-12-13T15:07:23.412+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>英語学習法</title><content type='html'>勝手に僕の英語学習法を公開したいと思います．&lt;br /&gt;&lt;br /&gt;タダで気軽に行うということがモットーですｗ&lt;br /&gt;&lt;br /&gt;◆Reading&lt;br /&gt;&lt;a href="http://www.voanews.com/specialenglish/index.cfm"&gt;[VOA Special English]&lt;/a&gt;&lt;br /&gt;毎日様々な分野のトピックが掲載され，購読することができます．&lt;br /&gt;また，ゆっくりめに音読してくれる音楽ファイル（mp3）をダウンロードすることができます．&lt;br /&gt;一度自分で読み，音声を聞きながらシャドーイングをしてはどうでしょうか．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆Writing&lt;br /&gt;&lt;a href="http://lang-8.com/"&gt;[lang-8]&lt;/a&gt;&lt;br /&gt;一言でいうと添削SNSです．ユーザは登録時に自分の学習したい言語と，母国語を登録します．そして，学習したい言語で日記を書きます．例えば今僕が英語で学習したいとしましょう．&lt;br /&gt;そうすると，英語が母国語の人たちが僕の日記を修正してくれます．逆に彼らが日本語を学びたく，日記を書いたとすると，僕は彼らの日記を修正します．人々の善意で成り立つまさにWeb 2.0というサイトです．&lt;br /&gt;もちろん，ネイティブとはいえ，一般の方なので，論文等のネイティブチェックに使えるわけではないのですが，気軽に日記を書いて修正してもらえるのは嬉しいです．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆Listening&lt;br /&gt;&lt;a href="http://www.youtube.com/education?b=400"&gt;[YouTube EDU]&lt;/a&gt;&lt;br /&gt;StanfordやHarvard, UCBerkeley, Carnegie Mellonなど名高い大学の講義の動画を無料で閲覧することができます．&lt;br /&gt;Stanfordの卒業式でのスティーブ・ジョブズやHarvardでのビル・ゲイツ，CMUでのランディ・パウシュの最後の授業はとても有名ですね．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ted.com/"&gt;[TED]&lt;/a&gt;&lt;br /&gt;Technology Entertainment Design conference (TED)での素晴らしいスピーチを聞くことができます．ビデオによっては，日本語を表示することも可能です．また，多くのビデオで英語の字幕を表示することができます．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆Speaking&lt;br /&gt;&lt;a href="http://www.englishcentral.com/"&gt;[EnglishCentral]&lt;/a&gt;&lt;br /&gt;このサイトでは，スピーキングの練習をすることができます．&lt;br /&gt;英語のビデオが流れるのですが，一文ずつ停止します．そして，マイクを通して今聞いた文を発声します．この発声に基づいて，ポイントを入手することができます．友人とポイントを競いあうことができますね．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆Vocabulary&lt;br /&gt;&lt;a href="http://smart.fm/"&gt;[smart.fm]&lt;/a&gt;&lt;br /&gt;効率良く英単語を学習することができます．&lt;br /&gt;良い点としては，iKnow（実際に単語を学習するアプリ）のインタフェースが良い点です．飽きずに楽しく学習することができます．&lt;br /&gt;また，コンテンツ（smart.fm上ではコースと呼びます）も分野別に整理されており，また，多数用意されています．例えば，英語入門，TOEIC listening or writing，TOEFL，Business用などです．おもしろいコースとして恋愛の生英語などがあります．&lt;br /&gt;僕はこのsmart.fmで6000ワード学習しました．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;◆TOEIC&lt;br /&gt;&lt;a href="http://stepup.yahoo.co.jp/english/toeictest/"&gt;[TOEICデイリーミニテスト - 英語学習 - Yahoo!学習]&lt;/a&gt;&lt;br /&gt;リスニングセクションのPart1-3,リーディングセクションのPart5から，毎日模擬TOEIC問題が掲載されます．&lt;br /&gt;時間が５分余った時，やってみてはどうでしょうか．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[TOEIC Testプラス・マガジン]&lt;br /&gt;こちらは書籍です．&lt;br /&gt;今話題のニュースや覚えて欲しい単語などが掲載されたあと，TOEICの模擬問題１回分が掲載されています．TOEICテストを受ける前に，過去問をやるだけで点数がいくぶんが伸びると思います．&lt;br /&gt;&lt;br /&gt;２ヶ月に１回発行されます．&lt;br /&gt;&lt;br /&gt;◆余談&lt;br /&gt;これは英語学習が目的ではないのですが，毎日Google Scholarで英語論文を１本検索し，アブストだけ目を通すようにしています．もちろん，アブストだけで論文の内容がしっかり伝わってくるわけではないので，英語もわからない上に，内容もわかならないことが多いのですが，英語アレルギーを少しでも減らすように，おまじない程度に行っています．（ただ，自分は毎日英語に触れているという意識を持つことは非常に重要だと思っています．）&lt;br /&gt;&lt;br /&gt;また，上記のように日課として行うから，少し疲れた日でも頑張って続けるというのもありますが，基本的に自分の興味のある分野を学習する，ということを通して英語を学習する方法がよいと思います．&lt;br /&gt;例えば，僕の場合，工学や科学技術に興味があるので，YouTube EDUやTED，VOA Special Englishなどでは，それらに関係ある内容しか見ません．また，lang-8では，旅行した時とか，月の写真を撮ったとか，僕自身の楽しかった思い出を書いています．（つらかった事をわざわざつらい英語で書きたくはないです）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;みなさんも是非．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-3911815935640627137?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3911815935640627137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3911815935640627137'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_5106.html' title='英語学習法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7036660805153921413</id><published>2009-12-13T01:31:00.000+09:00</published><updated>2009-12-13T01:31:01.174+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>企業の研究者をめざす皆さんへ</title><content type='html'>企業の研究者をめざす皆さんへ（丸山 宏著）&lt;br /&gt;&lt;br /&gt;IBMの東京基礎研究所の所長としてご活躍されていた丸山 宏さんが，企業の研究者の方，あるいはそれを目指す学生へのメッセージとして書かれた本である．&lt;br /&gt;&lt;br /&gt;トピックとしては以下のようなものがある．&lt;br /&gt;・研究について&lt;br /&gt;・コミュニケーショの大切さ&lt;br /&gt;・研究者のキャリア&lt;br /&gt;・リーダシップについて&lt;br /&gt;・企業の研究所のマネジメント&lt;br /&gt;・知的・契約・技術調査&lt;br /&gt;・研究所の風土&lt;br /&gt;・企業の研究者をめざす学生の皆さんへ&lt;br /&gt;&lt;br /&gt;企業の研究者をターゲットとしているため，研究者としてのキャリア形成に関する話題以外にも，研究所を機能させるためのマネジメントやビジネス論についても述べられている．&lt;br /&gt;&lt;br /&gt;印象に残った箇所を一部抜粋してみたいと思う．&lt;br /&gt;p.20&lt;br /&gt;CMUの金出先生とのエピソードにて&lt;br /&gt;（金出先生に筆者が）では，どうやったら良い問題を選ぶセンスを見に着けることができるのでしょう？夜の食事の席でこの質問をしたら，「うーん」としばらく考えて，「研究が成功したときにどういうデモをするつもりか」を考えてみたら，と言われました．&lt;br /&gt;金出先生のおっしゃるには，研究の成果をデモとして見せたとき，「これはどのように動いているのですか」と聞かれるようではまだまだで，見せたとたんに「これはいくらですか」と聞かれることが，デモの成功した証拠なのだそうです．&lt;br /&gt;&lt;br /&gt;p.44&lt;br /&gt;プレゼンテーションの仕方について&lt;br /&gt;私が会社に入って受けたプレゼンテーションの研修の中で，一番頭に残っていることは，「聴衆の興味を画面ではなく，あなた自身に向けるようにしなさい」ということです．&lt;br /&gt;（～略～）&lt;br /&gt;特に印象に残ったのが，「説得と納得の違い」です．いくら理詰めで説得しようとしても，人は自分の言葉で納得できないと行動にはつながらないものです，&lt;br /&gt;&lt;br /&gt;p.82&lt;br /&gt;IBMのテクニカル・コミュニティのリーダーであるNick Donofrioのスピーチについて&lt;br /&gt;Nickは，「Don't settle for anything」と言っています．&lt;br /&gt;（～略～）&lt;br /&gt;Steve Jobsのスピーチにも出てくる，現状に満足してしまったら進歩が無い，常に次の一歩を探して生きよう，という意味だ．&lt;br /&gt;&lt;br /&gt;p.151&lt;br /&gt;知的財産権について&lt;br /&gt;他人の知財を知らずに使うと罰せられるが，良い知財を持っているのに社会のためにそれを役立たせない人には罰則の規定がない．&lt;br /&gt;&lt;br /&gt;「Research that matters」という筆者の言葉，また，本の中で繰り返し引用されている金出先生の「素人発想，玄人実行」という言葉には大変感銘を受けました．&lt;br /&gt;&lt;br /&gt;企業の研究者を目指している人だけでなく，研究職を目指す人，さらには，大学での卒業論文のために研究を行う必要がある全ての人にこの本をオススメします．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7036660805153921413?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7036660805153921413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7036660805153921413'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post_13.html' title='企業の研究者をめざす皆さんへ'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-232713467332021611</id><published>2009-12-13T01:08:00.001+09:00</published><updated>2009-12-13T01:09:56.874+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>眠れなくなる宇宙のはなし</title><content type='html'>眠れなくなる宇宙のはなし（佐藤 勝彦著）を読みました．&lt;br /&gt;&lt;br /&gt;この本では人類の歴史上の宇宙観について，古代インドの捉え方や，宇宙をめぐる宗教裁判，相対性理論，そして最新の動向であるブレーン宇宙論までまとめてあります．&lt;br /&gt;また，それ以外にもアインシュタインなどの学者についての教科書には載ってないような小話が書かれており，非常に楽しく読むことができました．&lt;br /&gt;&lt;br /&gt;一部を抜粋して掲載したいと思います．&lt;br /&gt;p.114&lt;br /&gt;宇宙は永遠のものであると唱えたアリストテレスに対してのアクィナス&lt;br /&gt;「宇宙に始まりがあるというのは，信じるべきことであって，論証すべきものではないのだ」と主張したのです．人間の理性には限界があり，宇宙の始まりの問題はその限界を超えたものなので，これは議論しても始まらない，ただ聖書を信じていればいいのだ，というわけです．&lt;br /&gt;&lt;br /&gt;p.121&lt;br /&gt;アリスタルコスが唱えていた地動説を再発見したコペルニクスについて&lt;br /&gt;コペルニクスは神に逆らって地動説を唱えたわけでもありません．むしろ神様を信じ，宇宙を「偉大な創造者の荘厳な作品」だと信じていました．その上で，「神がお造りになった美しい宇宙の姿にふわさしいのは，天動説よりも地動説なんだ」と確信したんですね．&lt;br /&gt;&lt;br /&gt;p.221&lt;br /&gt;宇宙の歴史を説明するビッグバン宇宙論を完璧にする理論について&lt;br /&gt;私たち人間はニュートン力学を手にすることで，太陽系の天体の動きを説明し，未知の惑星の存在を予言することにも成功しました．さらに二十世紀には，ニュートン力学を乗り越える相対性理論を得て，宇宙がミクロンの卵から膨張してきたという宇宙の歴史を描けるようになったのです．そして，宇宙誕生の謎に迫るためには，相対性理論さえ乗り越える究極の理論が必要なのです．&lt;br /&gt;&lt;br /&gt;まさにタイトルに 偽りなしですね！ &lt;br /&gt;楽しく読むことができました．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-232713467332021611?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/232713467332021611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/232713467332021611'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/blog-post.html' title='眠れなくなる宇宙のはなし'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-2841014847506393674</id><published>2009-12-12T11:03:00.002+09:00</published><updated>2009-12-15T16:40:22.661+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>AutohotkeyでTVClockもどき</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/SyL5vZAW8lI/AAAAAAAACuo/-0igQggsjqQ/s1600-h/tvclock.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/SyL5vZAW8lI/AAAAAAAACuo/-0igQggsjqQ/s320/tvclock.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;僕は普段&lt;a href="http://www.geocities.jp/teamhasebe/download/software/tvclock/index.htm"&gt;こちら&lt;/a&gt;のサイトのTVClockというソフトウェアを使用させてもらっています．&lt;br /&gt;&lt;br /&gt;TVの時計のようなシンプルで視認性の高い時計なんですが，このソフトウェアのもどきをAutohotkeyで作成しました．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;clockPointX = 1440   ; X座標&lt;br /&gt;clockPointY = -20   ; Y座標&lt;br /&gt;clockColor = FFFFFF  ; フォントカラー&lt;br /&gt;backColor = 000000  ; 仮の背景色&lt;br /&gt;textSize  = 30   ; テキストサイズ&lt;br /&gt;updateTime = 20000   ; タイマをポーリングする時間(msec)&lt;br /&gt;&lt;br /&gt;Gui, Color, %backColor%&lt;br /&gt;Gui, Font, S%textSize%, Courier New&lt;br /&gt;Gui, Font, C%clockColor%&lt;br /&gt;Gui, Add, Text, vMyText %clockColor%, HH:MM&lt;br /&gt;Gui, +LastFound -0x00C00000 +ToolWindow&lt;br /&gt;&lt;br /&gt;WinSet, TransColor, %backColor% 255&lt;br /&gt;Gui, Show, X%clockPointX% Y%clockPointY%&lt;br /&gt;GuiControl,, MyText, %A_Hour%:%A_Min%&lt;br /&gt;&lt;br /&gt;SetTimer, Update, %updateTime%&lt;br /&gt;Gosub, Update&lt;br /&gt;return&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt; GuiControl,, MyText, %A_Hour%:%A_Min%&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-2841014847506393674?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2841014847506393674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2841014847506393674'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/autohotkeytvclock.html' title='AutohotkeyでTVClockもどき'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M60ZyknxGnQ/SyL5vZAW8lI/AAAAAAAACuo/-0igQggsjqQ/s72-c/tvclock.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7439526915600316229</id><published>2009-12-04T02:39:00.002+09:00</published><updated>2009-12-04T02:45:27.246+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>AutoHotkeyを使ったTexのコンパイル</title><content type='html'>私は，普段エディタにはEmEditorを使用しています．&lt;br /&gt;論文等書く際にTexを使う必要がありますが，WinShellなどは使わず，EmEditorで編集してから，バッチファイルを実行することにより，.texを.dviや.ps, .pdfにしていました．&lt;br /&gt;&lt;br /&gt;ここで，AutoHotkeyを利用して，EmEditorがアクティブな状態で，ホットキーを押すと，texファイルのコンパイルを行ってくれるようにしました．&lt;br /&gt;(EmEditorのTexプラグインもあるのですが，どうも使いづらい)&lt;br /&gt;&lt;br /&gt;AutoHotkeyのスクリプトは下記のようになります．&lt;br /&gt;プログラム内部では，platex, dviout, dvipdfmのコマンドを使用しています．&lt;br /&gt;これらのコマンドがお使いの環境で使用できることを確認してください．&lt;br /&gt;&lt;br /&gt;このスクリプトでは，EmEditorで，texファイルを編集している時，F5を押すと，texファイルをコンパイルし，dvioutからdviファイルを閲覧することができます．&lt;br /&gt;また，Ctrl+F5を押すと，tex=&gt;dvi=&gt;pdfの変換を行った後，pdfファイルを開いてくれます．&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*&lt;br /&gt;platex,dviout,dvipdfmが使用できる必要あり&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#NoEnv&lt;br /&gt;&lt;br /&gt;; EmEditorか判断&lt;br /&gt;#IfWinActive, ahk_class EmEditorMainFrame3&lt;br /&gt; *F5::             ; 任意キーとF5 or F5が押された場合&lt;br /&gt;  GetKeyState, ctrlFg, Ctrl    ; Ctrlが押されているか？&lt;br /&gt;&lt;br /&gt;  WinGet, window,, ahk_class EmEditorMainFrame3&lt;br /&gt;  WinGetTitle, title, ahk_id %window%  ; title=&gt;C:\aaa\bbb\ccc.tex -EmEditor&lt;br /&gt;&lt;br /&gt;  StringSplit, array, title, " "   ; array=&gt;{C:\aaa\bbb\ccc.tex,-EmEditor}&lt;br /&gt;  filePath = %array1%       ; filePath=&gt;C:\aaa\bbb\ccc.tex&lt;br /&gt;  StringRight, extension, filePath, 4  ; extension=&gt;.txt&lt;br /&gt;&lt;br /&gt;  If extension = .tex&lt;br /&gt;  {&lt;br /&gt;   StringGetPos, pos, filePath, \, 1&lt;br /&gt;   StringLeft, dir, filePath, pos  ; path=&gt;C:\aaa\bbb&lt;br /&gt;&lt;br /&gt;   RunWait, platex %filePath%, %dir% ; tex=&gt;dvi&lt;br /&gt;&lt;br /&gt;   StringGetPos, pos, filePath, ., 1&lt;br /&gt;   StringLeft, name, filePath, pos  ; name=&gt;C:\aaa\bbb\ccc&lt;br /&gt;   &lt;br /&gt;   If ctrlFg = D       ; Ctrlが押されている場合&lt;br /&gt;   {&lt;br /&gt;    IfWinExist ahk_class dviout  ; dvioutが開いていたら閉じる&lt;br /&gt;     WinClose&lt;br /&gt;    RunWait, dvipdfm %name%.dvi, %dir% ; dvi=&gt;pdf&lt;br /&gt;    If ErrorLevel = 1&lt;br /&gt;     Msgbox, "pdfを閉じてください"&lt;br /&gt;    Run, %name%.pdf&lt;br /&gt;   } Else {&lt;br /&gt;    IfWinNotExist ahk_class dviout&lt;br /&gt;     Run %name%.dvi&lt;br /&gt;    Else&lt;br /&gt;     WinActivate, ahk_class dviout&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; return&lt;br /&gt;#IfWinActive&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7439526915600316229?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7439526915600316229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7439526915600316229'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/autohotkeytex.html' title='AutoHotkeyを使ったTexのコンパイル'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-79599632733340359</id><published>2009-12-03T21:23:00.004+09:00</published><updated>2009-12-03T21:39:08.706+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>IMEのOn-OffをAutoHotkeyで行う</title><content type='html'>Google日本語入力が登場しましたね．&lt;br /&gt;&lt;br /&gt;早速私も使おうと思ってインストールしました．&lt;br /&gt;しかし，ここで問題が発生しました．&lt;br /&gt;&lt;br /&gt;私はHHK(Happy Hacking Keyboard)を愛用しているのですが，これは英字キーボードであるため，半角/全角キーがありません．&lt;br /&gt;そこで，私はMicrosoft IME等では，IMEのOn-OffをShift+Spaceに割り当てることで対処しています．&lt;br /&gt;&lt;br /&gt;しかし，Google日本語入力では，（私の見たところ）IMEのOn-Offを半角/全角キー意外に割り当てることはできません．&lt;br /&gt;&lt;br /&gt;そこで，仕方ないので，なんでもできるAutoHotKeyで，対処することにしました．&lt;br /&gt;&lt;br /&gt;まず，AutoHotkeyを流行らせるページのアップロードより，089.zipをダウンロードします．&lt;br /&gt;URL:&lt;br /&gt;&lt;a href="http://lukewarm.s101.xrea.com/up/index.php" target="_blank"&gt;http://lukewarm.s101.xrea.com/up/index.php&lt;/a&gt;&lt;br /&gt;zipを解凍し，中からIME.ahkを取り出します．&lt;br /&gt;&lt;br /&gt;これにはIMEの状態をSETしたりGETするための関数がいくつか用意されています．&lt;br /&gt;呼び出すには下記のように使用します．&lt;br /&gt;※Includeのパスは環境は環境に合わせてください．&lt;br /&gt;※例では左Shift+Spaceを押すことにより，IMEのOn-Offを切り替えれます． &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;#Include IME.ahk; 左Shift+Spaceを半角全角に&lt;br /&gt;&amp;lt;+Space::&lt;br /&gt;getIMEMode := IME_Get()&lt;br /&gt;if (%getIMEMode% = 0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IME_SET(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IME_SET(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-79599632733340359?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/79599632733340359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/79599632733340359'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/12/imeon-offautohotkey.html' title='IMEのOn-OffをAutoHotkeyで行う'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1524906866794201860</id><published>2009-11-20T20:35:00.002+09:00</published><updated>2009-11-20T21:27:07.836+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Google Chrome OSを入れてみた</title><content type='html'>[Download] &lt;br /&gt;こちらのサイトからVMの仮想ディスクイメージをダウンロードします．&lt;br /&gt;(DLにはユーザ登録が必要)&lt;br /&gt;&lt;a href="http://gdgt.com/google/chrome-os/download/"&gt;http://gdgt.com/google/chrome-os/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Install]&lt;br /&gt;VM PlayerやVM WorkStationで実行します．&lt;br /&gt;vmdkからの展開となるので，少し厄介．&lt;br /&gt;インストールには，下記ページを参照してください．&lt;br /&gt;&lt;a href="http://www.forest.impress.co.jp/docs/special/20091120_330552.html"&gt;http://www.forest.impress.co.jp/docs/special/20091120_330552.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Screen shot]&lt;br /&gt;&lt;br /&gt;・OSが立ち上がった直後のログイン画面．&lt;br /&gt;ここのログインにはGmailのアカウントが必要となります．&lt;br /&gt;また，ネットワークに接続されている必要があります．&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_M60ZyknxGnQ/SwZ8dBTqsfI/AAAAAAAACNY/F9D-BH45eRs/s1600/Chrome+OS-2009-11-21-19-39-48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_M60ZyknxGnQ/SwZ8dBTqsfI/AAAAAAAACNY/F9D-BH45eRs/s320/Chrome+OS-2009-11-21-19-39-48.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;・このページを見たところ．&lt;br /&gt;右上にメニューがあります． &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/SwZ8iXgz65I/AAAAAAAACNg/zP_9kxe7wcE/s1600/Chrome+OS-2009-11-21-19-52-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/SwZ8iXgz65I/AAAAAAAACNg/zP_9kxe7wcE/s320/Chrome+OS-2009-11-21-19-52-03.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;・メモリーの使用量&lt;br /&gt;26Mbyteほどで動作しているみたいです．&lt;br /&gt;ちなみにOSの最小動作メモリは32Mbyteとなっています．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/SwZ8lK9VsFI/AAAAAAAACNo/bJByq2JX3ok/s1600/Chrome+OS-2009-11-21-19-59-40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/SwZ8lK9VsFI/AAAAAAAACNo/bJByq2JX3ok/s320/Chrome+OS-2009-11-21-19-59-40.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;・ダウンロードしたファイルも，ブラウザ上からアクセスします．&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/SwZ8m5oM5uI/AAAAAAAACNw/JSKUYf2LLWA/s1600/Chrome+OS-2009-11-21-20-03-35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/SwZ8m5oM5uI/AAAAAAAACNw/JSKUYf2LLWA/s320/Chrome+OS-2009-11-21-20-03-35.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;・バージョン情報&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_M60ZyknxGnQ/SwZ8oTyS0sI/AAAAAAAACN4/SjvHmkh1VnU/s1600/Chrome+OS-2009-11-21-20-08-19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/SwZ8oTyS0sI/AAAAAAAACN4/SjvHmkh1VnU/s320/Chrome+OS-2009-11-21-20-08-19.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;まだまだ，実用レベルには達していないと思いますが，今後の開発には注目していきたいです．&lt;br /&gt;[追記]&lt;br /&gt;proxy環境下ではログインすらできないのかな？？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1524906866794201860?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1524906866794201860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1524906866794201860'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/11/google-chrome-os.html' title='Google Chrome OSを入れてみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_M60ZyknxGnQ/SwZ8dBTqsfI/AAAAAAAACNY/F9D-BH45eRs/s72-c/Chrome+OS-2009-11-21-19-39-48.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-699446618070418452</id><published>2009-11-15T19:12:00.001+09:00</published><updated>2009-11-15T19:13:21.298+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AR'/><title type='text'>reacTIVisionを使ってみた2(volume controller)</title><content type='html'>こんなのを作ってみました。&lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/f0d4kUKvLmY&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/f0d4kUKvLmY&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="303"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;二つのマーカーを使っていて、&lt;br /&gt;ひとつはボリューム調節用コントローラとして&lt;br /&gt;もうひとつは、写真を表示するためのXY座標を決定するために使用しています。&lt;br /&gt;&lt;br /&gt;ボリューム調節用コントローラは時計回転すると（見にくいんですけど）マーカーの下に黒色のゲージがたまっていきます。&lt;br /&gt;逆回転すると下がります。&lt;br /&gt;&lt;br /&gt;そして、ボリューム調節用コントローラのボリューム値によって写真を拡大・縮小しています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-699446618070418452?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/699446618070418452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/699446618070418452'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/11/reactivision2volume-controller.html' title='reacTIVisionを使ってみた2(volume controller)'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5314421922666750743</id><published>2009-11-10T18:38:00.002+09:00</published><updated>2009-11-10T18:41:03.385+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AR'/><title type='text'>reacTIVisionを使ってみた</title><content type='html'>&lt;a href="http://reactivision.sourceforge.net/"&gt;reacTIVision&lt;/a&gt;&lt;br /&gt;は，タンジブルユーザインターフェースやフィンガートラッキングを実現するためのオープンソースなフレームワークです．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;昨日，研究室の先輩に教えていただき，とりあえずサンプルプログラムをいじって，簡単なプログラムを書いてみた．&lt;br /&gt;&lt;br /&gt;どういうことをしているかって言うと，壁の手前にプロジェクターとカメラを用意しています．&lt;br /&gt;&lt;br /&gt;壁にマーカーを貼り付けることにより，マーカーの座標を取得し，その座標を基に，描画を行いプロジェクターから出力しています．&lt;br /&gt;&lt;br /&gt;とりあえず，作ってみたのは，&lt;br /&gt;&lt;br /&gt;二つのマーカーを使用した音楽再生プログラム．&lt;br /&gt;一つのマーカーは音楽プレーヤを表していて，処理として「Play」と「Stop」を持ちます．&lt;br /&gt;&lt;br /&gt;もうひとつのマーカーは音楽プレーヤをコントロールするためのマーカーです．&lt;br /&gt;音楽プレーヤマーカーの近くに表示されているPlayとStopの近くにこのコントロールマーカーを持っていくことで，音楽を再生したり止めたりすることができます．&lt;br /&gt;&lt;br /&gt;画像認識，処理などの知識なんて全くって言っていい程ないけど，reacTIVisionを使うと簡単にプログラムを書けます． &lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/I_zuioL4dQA&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/I_zuioL4dQA&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="303"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5314421922666750743?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5314421922666750743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5314421922666750743'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/11/reactivision.html' title='reacTIVisionを使ってみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1282333989452511658</id><published>2009-11-02T20:13:00.002+09:00</published><updated>2009-11-02T20:13:58.226+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Google Guiceを使ってみた</title><content type='html'>Google Guice はオープンソースの Java™ 開発用DI (Dependency Injection: 依存性注入)フレームワークです．&lt;br /&gt;&lt;br /&gt;DIとは依存性の注入のことで，同じインターフェースを持つ具象クラスを，設定によって入れ替え可能にする方法を指します．このことにより，プログラムの挙動を動的に変更することができます．&lt;br /&gt;&lt;br /&gt;[download]&lt;br /&gt;http://code.google.com/p/google-guice/downloads/list&lt;br /&gt;&lt;br /&gt;[Main.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.google.inject.AbstractModule;&lt;br /&gt;import com.google.inject.Guice;&lt;br /&gt;import com.google.inject.Injector;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  Injector injector = Guice.createInjector(new AbstractModule() {&lt;br /&gt;   @Override&lt;br /&gt;   protected void configure() {&lt;br /&gt;    bind( String.class ).toInstance( "まつたけ" );&lt;br /&gt;    bind( int.class ).toInstance( 5000 );&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt;  injector.getInstance(Item.class).view();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;[Item.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.google.inject.Inject;&lt;br /&gt;&lt;br /&gt;public class Item {&lt;br /&gt; @Inject&lt;br /&gt; private String name;&lt;br /&gt; @Inject&lt;br /&gt; private int price;&lt;br /&gt; &lt;br /&gt; public void view() {&lt;br /&gt;  System.out.println("商品名" + " : " + name);&lt;br /&gt;  System.out.println("値段" + " : " + price);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記のプログラムでは，次の２行でItemクラスのフィールドに対して値を代入しています．&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;bind( String.class ).toInstance( "まつたけ" );&lt;br /&gt;bind( int.class ).toInstance( 5000 );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ここでは，Itemクラスのフィールドの型が別なので，自動的にString型がnameへintがpriceに代入されています．&lt;br /&gt;&lt;br /&gt;ここで，Itemクラスに商品番号を表すint idというフィールドがあった時，どちらを代入すればよいのかわからないため，例外が飛びます．&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;bind( int.class ).toInstance( 5000 ); // price?&lt;br /&gt;bind( int.class ).toInstance( 1 );  // id?&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;そのとうな場合には，下記のようにアノテーションで名前をつけることにより，解決できます．&lt;br /&gt;&lt;br /&gt;[Main.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.google.inject.AbstractModule;&lt;br /&gt;import com.google.inject.Guice;&lt;br /&gt;import com.google.inject.Injector;&lt;br /&gt;import com.google.inject.name.Names;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  Injector injector = Guice.createInjector(new AbstractModule() {&lt;br /&gt;   @Override&lt;br /&gt;   protected void configure() {&lt;br /&gt;    bind( String.class ).annotatedWith(Names.named( "name" )).toInstance( "まつたけ" );&lt;br /&gt;    bind( int.class ).annotatedWith(Names.named( "price" )).toInstance( 5000 );&lt;br /&gt;    bind( int.class ).annotatedWith(Names.named( "id" )).toInstance( 1 );&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt;  injector.getInstance(Item.class).view();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;[Item.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.google.inject.Inject;&lt;br /&gt;import com.google.inject.name.Named;&lt;br /&gt;&lt;br /&gt;public class Item {&lt;br /&gt; @Inject&lt;br /&gt; @Named("name")&lt;br /&gt; private String name;&lt;br /&gt; @Inject&lt;br /&gt; @Named("price")&lt;br /&gt; private int price;&lt;br /&gt; @Inject&lt;br /&gt; @Named("id")&lt;br /&gt; private int id;&lt;br /&gt; &lt;br /&gt; public void view() {&lt;br /&gt;  System.out.println("商品名" + " : " + name);&lt;br /&gt;  System.out.println("値段" + " : " + price);&lt;br /&gt;  System.out.println("ID" + " " + id);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;Guice による依存性注入（IBM Developerworks)&lt;br /&gt;http://www.ibm.com/developerworks/jp/java/library/j-guice.html&lt;br /&gt;&lt;br /&gt;GoogleからリリースされたDIフレームワーク(gihyo.jp)&lt;br /&gt;http://gihyo.jp/dev/serial/01/awdp/000101&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GoogleのDIフレームワーク"Guice"を使ってみる(マイコミジャーナル)&lt;br /&gt;http://journal.mycom.co.jp/articles/2007/03/14/googleguice/001.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1282333989452511658?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1282333989452511658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1282333989452511658'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/11/google-guice.html' title='Google Guiceを使ってみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-8089469314595881082</id><published>2009-07-16T09:47:00.008+09:00</published><updated>2009-10-30T16:22:24.880+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>AutoHotKeyを使ってみた</title><content type='html'>AutoHotkeyはアプリケーション毎のホットキーの割り当てや，キーカスタマイズ，スクリプトによるOS/アプリケーションのコントロール等ができるツールです．&lt;br /&gt;&lt;br /&gt;簡単に言うと，自由自在に操作できる高機能なスクリプト実行環境です．&lt;br /&gt;&lt;br /&gt;詳しい使い方は，&lt;br /&gt;&lt;a href="http://lukewarm.s101.xrea.com/"&gt;AutoHotkeyを流行らせるページ&lt;/a&gt;&lt;br /&gt;に書いてあるので，見て下さい．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;いくつかスクリプトを書いたので，メモします&lt;br /&gt;■Alt+Tabの動作変更&lt;br /&gt;通常，Alt+TabでWindows標準のウィンドウ切り替えが起動しますが，インクリメンタルサーチで絞り込めるウィンドウ切り替えソフトウェア「&lt;a href="http://fw.ampll.org/index.php?cltc"&gt;CLTC&lt;/a&gt;」に変更します．&lt;br /&gt;&lt;pre name="code" class="js:nocontrols"&gt;!Tab::Run "C:\MyPrograms\cltc\cltc.exe"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■起動orアクティブ&lt;br /&gt;関数を定義し，プログラムが起動していなかったら起動し，起動している場合には，アクティブ（トップに表示すること）にします．&lt;br /&gt;ここでは，Alt+aで便利な2画面ファイラー「&lt;a href="http://www.h5.dion.ne.jp/~akt/akt_afx.htm"&gt;あふ&lt;/a&gt;」を，Alt+cで，ユーザデスクトップ上で，コマンドプロンプトを起動します．その他にもいくつか割り当ててますが，省略します．&lt;br /&gt;&lt;pre name="code" class="js"&gt;Launch(class, path)&lt;br /&gt;{&lt;br /&gt;IfWinNotExist ahk_class %class%&lt;br /&gt;Run, %path%&lt;br /&gt;else&lt;br /&gt;WinActivate, ahk_class %class% &lt;br /&gt;return&lt;br /&gt;}&lt;br /&gt;Launch_Param(class, path, param)&lt;br /&gt;{&lt;br /&gt;IfWinNotExist ahk_class %class%&lt;br /&gt;Run, %path%, %param%&lt;br /&gt;else&lt;br /&gt;WinActivate, ahk_class %class%&lt;br /&gt;return&lt;br /&gt;}&lt;br /&gt;!a::Launch("TAfxForm", "C:\MyPrograms\afx11\AFX.EXE")&lt;br /&gt;!c::Launch_Param("ConsoleWindowClass", "cmd.exe", "C:\Users\*****\desktop")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■F10でアクティブなウィンドウを半透明にする&lt;br /&gt;こんな感じ&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_M60ZyknxGnQ/Sl58nfFP4nI/AAAAAAAABuQ/ESio-xDQqdU/s1600-h/%E7%84%A1%E9%A1%8C.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 283px; height: 320px;" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/Sl58nfFP4nI/AAAAAAAABuQ/ESio-xDQqdU/s320/%E7%84%A1%E9%A1%8C.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5358857624417722994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;F10::&lt;br /&gt;WinGet, t, Transparent, A&lt;br /&gt;if %t%&lt;br /&gt;WinSet, Transparent, Off, A&lt;br /&gt;else&lt;br /&gt;WinSet, Transparent, 160, A&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Ctrl+F10で上記を全てのウィンドウに&lt;br /&gt;&lt;pre name="code" class="js"&gt;^F10::&lt;br /&gt;WinGet, id, list, , , Program Manager&lt;br /&gt;Loop, %id%&lt;br /&gt;{&lt;br /&gt;StringTrimRight, this_id, id%a_index%, 0&lt;br /&gt;WinGet, t, Transparent, ahk_id %this_id%&lt;br /&gt;if %t%&lt;br /&gt;WinSet, Transparent, Off, ahk_id %this_id% &lt;br /&gt;else&lt;br /&gt;WinSet, Transparent, 160, ahk_id %this_id% &lt;br /&gt;}&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■F11でアクティブなウィンドウを最大化&lt;br /&gt;&lt;pre name="code" class="js"&gt;F11::&lt;br /&gt;WinGet, State, MinMax, A&lt;br /&gt;if State != 0&lt;br /&gt;WinRestore, A&lt;br /&gt;else&lt;br /&gt;WinMaximize, A&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Ctrl+F11でアクティブなウィンドウを最小化&lt;br /&gt;&lt;pre name="code" class="js"&gt;^F11::&lt;br /&gt;WinGet, State, MinMax, A&lt;br /&gt;if State != 0&lt;br /&gt;WinRestore, A&lt;br /&gt;else&lt;br /&gt;WinMinimize, A&lt;br /&gt;return&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Win+カーソルでウィンドウの移動&lt;br /&gt;Ctrlも一緒に押すと移動量が少なくなります&lt;br /&gt;&lt;pre name="code" class="js"&gt;WinMoveStep(XD,YD,PARAM) {&lt;br /&gt;WinGet,win_id,ID,A&lt;br /&gt;WinGetPos,x,y,,,ahk_id %win_id%&lt;br /&gt;Step := 128&lt;br /&gt;if(PARAM = 1)&lt;br /&gt;Step := 24&lt;br /&gt;x := x + (XD * Step)&lt;br /&gt;y := y + (YD * Step)&lt;br /&gt;WinMove,ahk_id %win_id%,,%x%,%y%&lt;br /&gt;return&lt;br /&gt;}&lt;br /&gt;#Left::WinMoveStep(-1,0,0)&lt;br /&gt;#Right::WinMoveStep(1,0,0)&lt;br /&gt;#Up::WinMoveStep(0,-1,0)&lt;br /&gt;#Down::WinMoveStep(0,1,0)&lt;br /&gt;#^Left::WinMoveStep(-1,0,1)&lt;br /&gt;#^Right::WinMoveStep(1,0,1)&lt;br /&gt;#^Up::WinMoveStep(0,-1,1)&lt;br /&gt;#^Down::WinMoveStep(0,1,1)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Win+Shift+カーソルでウィンドウサイズを変更&lt;br /&gt;Ctrlも一緒に押すと移動量が少なくなります&lt;br /&gt;&lt;pre name="code" class="js"&gt;WinSizeStep(XD,YD,PARAM) {&lt;br /&gt;WinGet,win_id,ID,A&lt;br /&gt;WinGetPos,,,w,h,ahk_id %win_id%&lt;br /&gt;Step := 128&lt;br /&gt;if(PARAM = 1)&lt;br /&gt;Step := 24&lt;br /&gt;w := w + (XD * Step)&lt;br /&gt;h := h + (YD * Step)&lt;br /&gt;WinMove,ahk_id %win_id%,,,,%w%,%h%&lt;br /&gt;return&lt;br /&gt;}&lt;br /&gt;+#Left::WinSizeStep(-1,0,0)&lt;br /&gt;+#Right::WinSizeStep(1,0,0)&lt;br /&gt;+#Up::WinSizeStep(0,-1,0)&lt;br /&gt;+#Down::WinSizeStep(0,1,0)&lt;br /&gt;+#^Left::WinSizeStep(-1,0,1)&lt;br /&gt;+#^Right::WinSizeStep(1,0,1)&lt;br /&gt;+#^Up::WinSizeStep(0,-1,1)&lt;br /&gt;+#^Down::WinSizeStep(0,1,1)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■Shift+SpaceでIME ON-OFF切り替え&lt;br /&gt;&lt;pre name="code" class="js"&gt;+Space::Send, {vkF3sc029}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■単独のWinキーのみでスタートメニューを表示しない&lt;br /&gt;※誤動作防止のため&lt;br /&gt;&lt;pre name="code" class="js"&gt;RWin::return&lt;br /&gt;RWin &amp; RWin::return&lt;br /&gt;LWin::return&lt;br /&gt;LWin &amp; LWin::return&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■コマンドプロンプト&lt;br /&gt;コマンドプロンプト上でもクリップボードの内容を貼り付けるのに，Ctrl+vを使えるようにする．また，終了はCtrl+w,全て選択はCtrl+a等&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;#IfWinActive ahk_class ConsoleWindowClass&lt;br /&gt;^v::Send,!{Space}ep     ; ^V ペースト&lt;br /&gt;^w::Send,!{Space}c      ; ^W 終了&lt;br /&gt;^f::Send,!{Space}ef     ; ^F 検索&lt;br /&gt;^a::Send,!{Space}es     ; ^A 全て選択&lt;br /&gt;^k::Send,!{Space}ek     ; ^K 選択&lt;br /&gt;#IfWinActive&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;AutoHotkeyを流行らせるページに行くと便利なサンプルプログラムがあります．&lt;br /&gt;中でもホイールリダイレクトは便利！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-8089469314595881082?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8089469314595881082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/8089469314595881082'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/07/autohotkey.html' title='AutoHotKeyを使ってみた'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M60ZyknxGnQ/Sl58nfFP4nI/AAAAAAAABuQ/ESio-xDQqdU/s72-c/%E7%84%A1%E9%A1%8C.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5648514028862990558</id><published>2009-06-07T22:03:00.002+09:00</published><updated>2009-10-30T15:30:51.957+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linuxコマンド</title><content type='html'>-----------------------------&lt;br /&gt;find&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ /foo/bar 以下の全ファイル一覧を表示&lt;br /&gt;find /foo/bar -type f&lt;br /&gt;⇒ /foo/bar 以下の全ディレクトリ一覧を表示&lt;br /&gt;find /foo/bar -type d&lt;br /&gt;⇒ 特定のファイル名を検索&lt;br /&gt;find . -name "*.conf"&lt;br /&gt;⇒ 4日以内にアクセスされたファイル &lt;br /&gt;find . -atime -4&lt;br /&gt;⇒ 4日以内に修正されたファイル&lt;br /&gt;find . -mtime -4&lt;br /&gt;⇒ 10分以内に修正されたhtmlファイルを検索&lt;br /&gt;find . -mmin -10 -exec grep *.html {} \;&lt;br /&gt;⇒ /var/以下で"成功"という文字列を持つhtmlファイルを検索する&lt;br /&gt;find /var/ -name \*.html -print0 | xargs -0 grep 成功 /dev/null&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;iptables&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ 状態の確認&lt;br /&gt;iptables -L&lt;br /&gt;⇒ ポリシーの設定&lt;br /&gt;iptables -P INPUT ACCEPT&lt;br /&gt;iptables -P FORWARD DROP&lt;br /&gt;iptables -P OUTPUT ACCEPT&lt;br /&gt;⇒ ルールの削除&lt;br /&gt;iptables -F&lt;br /&gt;⇒ icmp(ping)からの入力を許可&lt;br /&gt;iptables -A INPUT -p icmp -j ACCEPT&lt;br /&gt;⇒ 自端末からの入力を許可&lt;br /&gt;iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;⇒ Web，SSHからの入力を許可&lt;br /&gt;iptables -A INPUT -p tcp --dport 80 -j ACCEPT&lt;br /&gt;iptables -A INPUT -p tcp --dport 22 -j ACCEPT&lt;br /&gt;⇒ 他の接続はすべて破棄(ポリシーの再設定)&lt;br /&gt;iptables -P INPUT DROP&lt;br /&gt;⇒ ルールをセーブする&lt;br /&gt;/etc/init.d/iptables save&lt;br /&gt;⇒ 再起動&lt;br /&gt;networking restart&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;netstat ネットワーク関連の統計情報を表示する&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ 全てのサービスを表示(-t:tcp,-u:udp)&lt;br /&gt;netstat -a&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;arp システムのARPキャッシュを操作する&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ 指定したホストに対しての情報を表示する&lt;br /&gt;arp -a [ホスト名]&lt;br /&gt;⇒ 指定したホストに対しての情報を削除する&lt;br /&gt;arp -d [ホスト名]&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;route ルーティング・テーブルを表示・設定する &lt;br /&gt;-----------------------------&lt;br /&gt;⇒ ルーティングを追加する 消す場合はaddをdelete&lt;br /&gt;route add -net [192.168.1.0] netmask 255.255.255.0 eth0&lt;br /&gt;⇒ デフォルト・ゲートウェエイを指定する&lt;br /&gt;route add default gw [192.168.0.1]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;at&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ 15時20分にjob.sh内のコマンドを実行します&lt;br /&gt;at -f job.sh 15:20&lt;br /&gt;⇒ 実行されていないジョブを表示する&lt;br /&gt;at -l&lt;br /&gt;⇒ ジョブを削除&lt;br /&gt;at -d [ジョブ番号]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------&lt;br /&gt;other&lt;br /&gt;-----------------------------&lt;br /&gt;⇒ バージョンの確認&lt;br /&gt;lsb_release -a&lt;br /&gt;⇒ Apacheデーモン起動&lt;br /&gt;/etc/rc.d/init.d/httpd start&lt;br /&gt;⇒ ログファイルの最後の5行をずっと監視する&lt;br /&gt;tail -n 5 -f [ファイル名]&lt;br /&gt;⇒ 現在の日付と時刻を表示する&lt;br /&gt;date&lt;br /&gt;⇒ 時刻を合わせる&lt;br /&gt;ntpdate ntp.nict.jp&lt;br /&gt;⇒ 実行するコマンドにのみ環境変数を一時的に設定&lt;br /&gt;env　変数名=設定する値 コマンド&lt;br /&gt;⇒ 現在ログインしているユーザーを表示する&lt;br /&gt;who&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5648514028862990558?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5648514028862990558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5648514028862990558'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/06/linux.html' title='Linuxコマンド'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-4012441095238187022</id><published>2009-05-26T02:24:00.006+09:00</published><updated>2009-10-30T15:31:32.556+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Ubuntu Serverでネットワークに接続できない</title><content type='html'>Ubuntu Server9.04をVM Ware上にインストールしましたが，初期状態でネットワークに接続できません(IPが正しく割り振られません)でした．&lt;br /&gt;少し詰まったのでメモ&lt;br /&gt;&lt;br /&gt;ネットワークカードを正常に認識していなかったようです．&lt;br /&gt;&lt;br /&gt;1.ネットワークデバイス名を調べる&lt;br /&gt;&lt;pre class="prettyprint"&gt;# lshw -C network&lt;/pre&gt;&lt;br /&gt;logical name をメモ&lt;br /&gt;私の環境ではeth0でした．&lt;br /&gt;&lt;br /&gt;2.ネットワークデバイスの設定&lt;br /&gt;&lt;pre class="prettyprint"&gt;# vi /etc/network/interfaces&lt;br /&gt;---------------------------&lt;br /&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;# 以下を追記&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet dhcp&lt;br /&gt;---------------------------&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3.ネットワークの再起動&lt;br /&gt;&lt;pre class="prettyprint"&gt;# /etc/init.d/networking restart&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以上により，正常にIPが割り振られネットワークに接続できます．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-4012441095238187022?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/4012441095238187022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/4012441095238187022'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/05/ubuntu-server.html' title='Ubuntu Serverでネットワークに接続できない'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1133754731075111274</id><published>2009-05-07T17:30:00.015+09:00</published><updated>2009-10-30T15:47:41.045+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>JBox2Dのプログラムサンプル</title><content type='html'>2D物理シュミレーションエンジンBox2DのJavaバージョンであるJBox2Dを使用してみました． &lt;br /&gt;JBox2D:http://www.jbox2d.org/ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下のプログラムは，ある閉じた空間(2D)内に複数のボールを用意し，物理演算を行ってボールが跳ねる様子を見ることができます． &lt;br /&gt;また，自由に新しいボールや壁を追加することができます．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[PhysicalWorld.java]&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:collapse"&gt;import org.jbox2d.collision.AABB;&lt;br /&gt;import org.jbox2d.collision.CircleDef;&lt;br /&gt;import org.jbox2d.collision.PolygonDef;&lt;br /&gt;import org.jbox2d.collision.Shape;&lt;br /&gt;import org.jbox2d.common.Vec2;&lt;br /&gt;import org.jbox2d.dynamics.Body;&lt;br /&gt;import org.jbox2d.dynamics.BodyDef;&lt;br /&gt;import org.jbox2d.dynamics.World;&lt;br /&gt;import org.jbox2d.dynamics.joints.MouseJoint;&lt;br /&gt;import org.jbox2d.dynamics.joints.MouseJointDef;&lt;br /&gt;import org.jbox2d.collision.*;&lt;br /&gt;&lt;br /&gt;import java.awt.*;&lt;br /&gt;import java.awt.event.MouseAdapter;&lt;br /&gt;import java.awt.event.MouseEvent;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;&lt;br /&gt;import java.util.*;&lt;br /&gt;&lt;br /&gt;public class PhysicalWorld extends JFrame {&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;new PhysicalWorld();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public PhysicalWorld() {&lt;br /&gt;// タイトルを設定&lt;br /&gt;setTitle("MyFrame");&lt;br /&gt;// 閉じるボタンを押した際，プログラムを終了&lt;br /&gt;setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;// 起動時のロケーション設定&lt;br /&gt;// setLocation(0, 0);&lt;br /&gt;&lt;br /&gt;// メインパネルを作成してフレームに追加&lt;br /&gt;MainPanel panel = new MainPanel();&lt;br /&gt;Container contentPane = getContentPane();&lt;br /&gt;contentPane.add(panel);&lt;br /&gt;setVisible(true);&lt;br /&gt;// パネルサイズに合わせてフレームサイズを自動設定&lt;br /&gt;pack();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MainPanel extends JPanel implements Runnable {&lt;br /&gt;// パネルサイズ&lt;br /&gt;private static int width = 600;&lt;br /&gt;private static int height = 400;&lt;br /&gt;// 1m = 10px&lt;br /&gt;private static final int WORLD_SCALE = 10;&lt;br /&gt;private World mWorld;&lt;br /&gt;&lt;br /&gt;// 壁格納用リスト&lt;br /&gt;private java.util.List groundBodyList = new ArrayList();&lt;br /&gt;// ボール格納用リスト&lt;br /&gt;private java.util.List ballBodyList = new ArrayList();&lt;br /&gt;&lt;br /&gt;// マウスジョイント&lt;br /&gt;private MouseJointDef mouseJointDef;&lt;br /&gt;private MouseJoint mouseJoint;&lt;br /&gt;&lt;br /&gt;// アニメーション用スレッド&lt;br /&gt;private Thread thread;&lt;br /&gt;Body ballBody;&lt;br /&gt;&lt;br /&gt;public MainPanel() {&lt;br /&gt;initMainPanel();&lt;br /&gt;initWorld();&lt;br /&gt;initGround();&lt;br /&gt;initBall();&lt;br /&gt;// スレッドを起動&lt;br /&gt;thread = new Thread(this);&lt;br /&gt;thread.start();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void initMainPanel() {&lt;br /&gt;// パネルの推奨サイズを設定&lt;br /&gt;// pack()するときに必要&lt;br /&gt;setPreferredSize(new Dimension(width, height));&lt;br /&gt;setBackground(Color.BLACK);&lt;br /&gt;// マウスリスナを登録&lt;br /&gt;this.addMouseListener(new MyListener());&lt;br /&gt;this.addMouseMotionListener(new MyListener());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void initWorld() {&lt;br /&gt;Vec2 minV = new Vec2(-100,-100);&lt;br /&gt;Vec2 maxV = new Vec2(100,100);&lt;br /&gt;AABB aabb = new AABB(minV,maxV);&lt;br /&gt;mWorld = new World(aabb, new Vec2(0.0f,9.8f),true);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void initGround() {&lt;br /&gt;// 上壁&lt;br /&gt;createGroundBody(0.0f, 0.0f, (width * 0.9f) / WORLD_SCALE, 0.0f);&lt;br /&gt;// 下壁&lt;br /&gt;createGroundBody(0.0f, (height * 0.9f) / WORLD_SCALE, (width * 0.9f) / WORLD_SCALE, (height * 0.9f) / WORLD_SCALE);&lt;br /&gt;// 左壁&lt;br /&gt;createGroundBody(0.0f, 0.0f, 0.0f, (height * 0.9f) / WORLD_SCALE);&lt;br /&gt;// 右壁&lt;br /&gt;createGroundBody((width * 0.9f) / WORLD_SCALE, 0.0f, (width * 0.9f) / WORLD_SCALE, (height * 0.9f) / WORLD_SCALE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void initBall() {&lt;br /&gt;// ボールの作成&lt;br /&gt;for(int i = 15; i &amp;lt; 30; i++){&lt;br /&gt;createBallBody((float)i, 10.0f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ジョイント用ボールの作成&lt;br /&gt;BodyDef ballBodyDef = new BodyDef();&lt;br /&gt;ballBodyDef.position.set(15.0f, 5.0f);&lt;br /&gt;CircleDef ballShapeDef = new CircleDef();&lt;br /&gt;ballShapeDef.radius = 1.0f;&lt;br /&gt;ballShapeDef.density = 1.0f;&lt;br /&gt;ballShapeDef.restitution = 0.7f;&lt;br /&gt;&lt;br /&gt;ballBody = mWorld.createBody(ballBodyDef);&lt;br /&gt;ballBody.createShape(ballShapeDef);&lt;br /&gt;ballBody.setMassFromShapes();&lt;br /&gt;ballBodyList.add(ballBody);&lt;br /&gt;&lt;br /&gt;mouseJointDef = new MouseJointDef();&lt;br /&gt;mouseJointDef.body1 = mWorld.getGroundBody();&lt;br /&gt;mouseJointDef.body2 = ballBody;&lt;br /&gt;mouseJointDef.target =&amp;nbsp; ballBody.getWorldCenter();&lt;br /&gt;mouseJointDef.maxForce = 1000;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void createGroundBody(float sx, float sy, float ex, float ey){&lt;br /&gt;BodyDef groundBodyDef = new BodyDef();&lt;br /&gt;groundBodyDef.position.set((sx + ex)/2.0f, (sy + ey)/2.0f);&lt;br /&gt;PolygonDef groundShapeDef = new PolygonDef();&lt;br /&gt;int angle = (int)(Math.atan((double)(ey - sy) / (double)(ex - sx)) * 180 / Math.PI);&lt;br /&gt;float dis = (float)Math.sqrt(Math.pow((sx-ex), 2) + Math.pow((sy-ey), 2)) / 2.0f;&lt;br /&gt;groundShapeDef.setAsBox(dis, 0.1f, new Vec2(0,0),(float)(Math.PI * angle / 180.0));&lt;br /&gt;Body groundBody = mWorld.createBody(groundBodyDef);&lt;br /&gt;groundBody.createShape(groundShapeDef);&lt;br /&gt;groundBodyList.add(groundBody);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void createBallBody(float x, float y){&lt;br /&gt;BodyDef ballBodyDef = new BodyDef();&lt;br /&gt;ballBodyDef.position.set(x, y);&lt;br /&gt;CircleDef ballShapeDef = new CircleDef();&lt;br /&gt;ballShapeDef.radius = 1.0f;&lt;br /&gt;ballShapeDef.density = 1.0f;&lt;br /&gt;ballShapeDef.restitution = 0.7f;&lt;br /&gt;Body ballBody = mWorld.createBody(ballBodyDef);&lt;br /&gt;ballBody.createShape(ballShapeDef);&lt;br /&gt;ballBody.setMassFromShapes();&lt;br /&gt;ballBodyList.add(ballBody);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void paintComponent(Graphics g) {&lt;br /&gt;super.paintComponent(g);&lt;br /&gt;&lt;br /&gt;g.setColor(Color.GREEN);&lt;br /&gt;&lt;br /&gt;for(Body groundBody : groundBodyList){&lt;br /&gt;Shape shape = groundBody.getShapeList();&lt;br /&gt;Vec2[] vPts = ((PolygonShape)shape).getVertices();&lt;br /&gt;&lt;br /&gt;int minX = (int)Math.min(Math.min(vPts[0].x, vPts[1].x), Math.min(vPts[2].x, vPts[3].x));&lt;br /&gt;int minY = (int)Math.min(Math.min(vPts[0].y, vPts[1].y), Math.min(vPts[2].y, vPts[3].y));&lt;br /&gt;int maxX = (int)Math.min(Math.max(vPts[0].x, vPts[1].x), Math.max(vPts[2].x, vPts[3].x));&lt;br /&gt;int maxY = (int)Math.min(Math.max(vPts[0].y, vPts[1].y), Math.max(vPts[2].y, vPts[3].y));&lt;br /&gt;&lt;br /&gt;minX = (int)(groundBody.getWorldCenter().x + minX) * WORLD_SCALE;&lt;br /&gt;minY = (int)(groundBody.getWorldCenter().y + minY) * WORLD_SCALE;&lt;br /&gt;maxX = (int)(groundBody.getWorldCenter().x + maxX) * WORLD_SCALE;&lt;br /&gt;maxY = (int)(groundBody.getWorldCenter().y + maxY) * WORLD_SCALE;&lt;br /&gt;&lt;br /&gt;if(vPts[0].y &amp;lt;= vPts[1].y){&lt;br /&gt;g.drawLine(minX, minY, maxX, maxY);&lt;br /&gt;} else {&lt;br /&gt;g.drawLine(minX, maxY, maxX, minY);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;g.setColor(Color.RED);&lt;br /&gt;int r = 2;&lt;br /&gt;Vec2 pos;&lt;br /&gt;&lt;br /&gt;for(Body ballBody : ballBodyList){&lt;br /&gt;pos = ballBody.getWorldCenter();&lt;br /&gt;g.fillOval((int)((pos.x-r/2) * WORLD_SCALE), (int)((pos.y-r/2) * WORLD_SCALE), r*WORLD_SCALE, r*WORLD_SCALE);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// メインループ&lt;br /&gt;public void run() {&lt;br /&gt;// プログラムが終了するまでフレーム処理を繰り返す&lt;br /&gt;while (true) {&lt;br /&gt;mWorld.step(1/20f, 8);&lt;br /&gt;&lt;br /&gt;// ボールを再描画&lt;br /&gt;repaint();&lt;br /&gt;&lt;br /&gt;// 20ミリ秒だけ休止&lt;br /&gt;try {&lt;br /&gt;Thread.sleep(20);&lt;br /&gt;} catch (InterruptedException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MyListener extends MouseAdapter {&lt;br /&gt;Point startP,endP;&lt;br /&gt;&lt;br /&gt;// ボタンプレス時&lt;br /&gt;public void mousePressed(java.awt.event.MouseEvent e){&lt;br /&gt;if((e.getModifiers() &amp;amp; MouseEvent.BUTTON1_MASK) != 0){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 左クリック&lt;br /&gt;// ジョイントの作成&lt;br /&gt;mouseJoint = (MouseJoint)mWorld.createJoint(mouseJointDef);&lt;br /&gt;mouseJoint.m_localAnchor = ballBody.getLocalCenter();&lt;br /&gt;} else if((e.getModifiers() &amp;amp; MouseEvent.BUTTON3_MASK) != 0){&amp;nbsp;&amp;nbsp; // 右クリック&lt;br /&gt;// クリックポイントの作成&lt;br /&gt;startP = e.getPoint();&lt;br /&gt;}&lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;// ボタンリリース時&lt;br /&gt;public void mouseReleased(java.awt.event.MouseEvent e){&lt;br /&gt;if((e.getModifiers() &amp;amp; MouseEvent.BUTTON1_MASK) != 0){&lt;br /&gt;// ジョイントの削除&lt;br /&gt;mWorld.destroyJoint(mouseJoint);&lt;br /&gt;mouseJoint = null;&lt;br /&gt;} else if((e.getModifiers() &amp;amp; MouseEvent.BUTTON3_MASK) != 0){&lt;br /&gt;// リリース場所の格納&lt;br /&gt;endP = e.getPoint();&lt;br /&gt;if(Math.abs(startP.x - endP.x) &amp;lt; 3 &amp;amp;&amp;amp; Math.abs(startP.y - endP.y) &amp;lt; 3){&amp;nbsp;&amp;nbsp; // プレス時とリリース時にあまり差が無い場合&lt;br /&gt;// 新しいボールを作成&lt;br /&gt;createBallBody(startP.x / WORLD_SCALE, startP.y / WORLD_SCALE);&lt;br /&gt;} else {&lt;br /&gt;// プレス場所からリリース場所まで壁を作成する&lt;br /&gt;createGroundBody(startP.x / WORLD_SCALE, startP.y / WORLD_SCALE, endP.x / WORLD_SCALE, endP.y / WORLD_SCALE);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// マウスドラッグ時&lt;br /&gt;public void mouseDragged(java.awt.event.MouseEvent e){&lt;br /&gt;if((e.getModifiers() &amp;amp; MouseEvent.BUTTON1_MASK) != 0){&lt;br /&gt;if(mouseJoint != null){&lt;br /&gt;// ボールの移動&lt;br /&gt;int x = e.getPoint().x / WORLD_SCALE;&lt;br /&gt;int y = e.getPoint().y / WORLD_SCALE;&lt;br /&gt;mouseJoint.setTarget(new Vec2(x, y));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/SgKd0lAGQiI/AAAAAAAABjY/TaW2lEkoL6I/s1600-h/%E7%84%A1%E9%A1%8C.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5332998435371368994" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/SgKd0lAGQiI/AAAAAAAABjY/TaW2lEkoL6I/s320/%E7%84%A1%E9%A1%8C.jpg" style="cursor: pointer; display: block; height: 227px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/SgKd0lAGQiI/AAAAAAAABjY/TaW2lEkoL6I/s1600-h/%E7%84%A1%E9%A1%8C.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-80252aa07282c892" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v13.nonxt6.googlevideo.com/videoplayback?id%3D80252aa07282c892%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331664584%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D83368AEC12243C971C7D343A40A89422A1F78EC9.5A26EFE93A801FFB9FD7F753C645C741D2D1BECD%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D80252aa07282c892%26offsetms%3D5000%26itag%3Dw160%26sigh%3DK3IXEvPrn2cUo9bG-UkhltM8SvI&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v13.nonxt6.googlevideo.com/videoplayback?id%3D80252aa07282c892%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331664584%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D83368AEC12243C971C7D343A40A89422A1F78EC9.5A26EFE93A801FFB9FD7F753C645C741D2D1BECD%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D80252aa07282c892%26offsetms%3D5000%26itag%3Dw160%26sigh%3DK3IXEvPrn2cUo9bG-UkhltM8SvI&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1133754731075111274?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=80252aa07282c892&amp;type=video%2Fmp4' length='0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1133754731075111274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1133754731075111274'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/05/jbox2d.html' title='JBox2Dのプログラムサンプル'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M60ZyknxGnQ/SgKd0lAGQiI/AAAAAAAABjY/TaW2lEkoL6I/s72-c/%E7%84%A1%E9%A1%8C.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1203908851895497678</id><published>2009-01-14T17:56:00.005+09:00</published><updated>2009-10-30T15:42:49.282+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>[Java]インタフェースのフック</title><content type='html'>Javaでインタフェースのフックを行います．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;サンプルプログラムは，GUIに表示されたボタンを押した場合のフックについて記述してあります．&lt;br /&gt;&lt;br /&gt;[実行クラス Main.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.lang.reflect.InvocationHandler;&lt;br /&gt;import java.lang.reflect.Proxy;&lt;br /&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;&lt;br /&gt;public class Main extends JFrame{&lt;br /&gt;&lt;br /&gt;public Main(){&lt;br /&gt;setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;setBounds(200, 200, 200, 200);&lt;br /&gt;setVisible(true);&lt;br /&gt;JPanel p = new JPanel();&lt;br /&gt;&lt;br /&gt;InvocationHandler handler = new MyInvocationHandler(new MyListener());&lt;br /&gt;ActionListener action = (ActionListener) Proxy.newProxyInstance(MyListener.class.getClassLoader(), new Class[]{ActionListener.class}, handler);&lt;br /&gt;&lt;br /&gt;JButton btn = new JButton("push");&lt;br /&gt;btn.addActionListener(action);&lt;br /&gt;btn.setActionCommand("btn");&lt;br /&gt;&lt;br /&gt;p.add(btn);&lt;br /&gt;add(p);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;new Main();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[イベントリスナー MyListener,java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.awt.event.*;&lt;br /&gt;&lt;br /&gt;public class MyListener implements ActionListener{&lt;br /&gt;public void actionPerformed(ActionEvent e){&lt;br /&gt;if(e.getActionCommand().equals("btn")){&lt;br /&gt;System.out.println("push");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[インボケーションハンドラー　MyInvocationHandler.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.lang.reflect.InvocationHandler;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;&lt;br /&gt;public class MyInvocationHandler implements InvocationHandler {&lt;br /&gt;&lt;br /&gt;private ActionListener action;&lt;br /&gt;&lt;br /&gt;public MyInvocationHandler(ActionListener action) {&lt;br /&gt;this.action = action;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {&lt;br /&gt;Object result;&lt;br /&gt;System.out.println("前処理");&lt;br /&gt;result = method.invoke(action, args);&lt;br /&gt;System.out.println("後処理");&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GUIで表示されたボタンを押した際の処理結果は下記の様になります．&lt;br /&gt;&lt;pre class="prettyprint"&gt;前処理&lt;br /&gt;push&lt;br /&gt;後処理&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1203908851895497678?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1203908851895497678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1203908851895497678'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/01/java_14.html' title='[Java]インタフェースのフック'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6735241664951705599</id><published>2009-01-14T17:46:00.005+09:00</published><updated>2009-10-30T15:44:47.147+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>[Java]リフレクションによるメソッドの取得</title><content type='html'>リフレクションを用いて，特定クラスのメソッドを解析します．&lt;br /&gt;サンプルプログラムでは親クラスから継承しているメソッドは取り除いています．&lt;br /&gt;&lt;br /&gt;[調べるクラス Function.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.util.*;&lt;br /&gt;&lt;br /&gt;public class Function {&lt;br /&gt;public static int service(List list, int a ,byte e) throws Exception{&lt;br /&gt;return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void service2(){&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[メソッド情報を保持するクラス MethodInfo.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.util.List;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;public class MethodInfo {&lt;br /&gt;private String    name;   // メソッド名&lt;br /&gt;private String    modifier;  // 修飾子&lt;br /&gt;private List&lt;string&gt;  paramTypes;  // メソッドの引数型の配列&lt;br /&gt;private String    returnType;  // 返り値の型&lt;br /&gt;&lt;br /&gt;public MethodInfo(){};&lt;br /&gt;&lt;br /&gt;public MethodInfo(String   _name,&lt;br /&gt;String   _modifer,&lt;br /&gt;List&lt;string&gt; _paramTypes,&lt;br /&gt;String   _returnType){&lt;br /&gt;name         = _name;&lt;br /&gt;modifier     = _modifer;&lt;br /&gt;paramTypes   = _paramTypes;&lt;br /&gt;returnType   = _returnType;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setName(String _name){&lt;br /&gt;name = _name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setModifier(String _modifer){&lt;br /&gt;modifier = _modifer;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setParamTypes(List&lt;string&gt; _paramTypes){&lt;br /&gt;paramTypes = _paramTypes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setReturnType(String _returnType){&lt;br /&gt;returnType = _returnType;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getName(){&lt;br /&gt;return name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getModifier(){&lt;br /&gt;return modifier;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public List&lt;string&gt; getParamTypes(){&lt;br /&gt;return paramTypes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getReturnType(){&lt;br /&gt;return returnType;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String toString(){&lt;br /&gt;String str =  "Modifier : " + modifier + "\n";&lt;br /&gt;str += "Name : " + name + "\n";&lt;br /&gt;str += "Params : " + paramTypes.toString() + "\n";&lt;br /&gt;str += "Retrun : " + returnType;&lt;br /&gt;return str;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[解析実行クラス MethodAnalyzer.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import java.lang.reflect.*;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class MethodAnalyzer {&lt;br /&gt;private String className;&lt;br /&gt;public MethodAnalyzer(String _className){&lt;br /&gt;className = _className;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* クラスのメソッド一覧を取得する&lt;br /&gt;* @param cls&lt;br /&gt;* @return &lt;br /&gt;*/&lt;br /&gt;private List&lt;method&gt; getMethodList(Class cls){&lt;br /&gt;List&lt;method&gt; list = new ArrayList&lt;method&gt;();&lt;br /&gt;Method[] methods = cls.getMethods();&lt;br /&gt;for(Method method : methods){&lt;br /&gt;list.add(method);&lt;br /&gt;}&lt;br /&gt;return list;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* 親クラスのメソッド一覧を取得する&lt;br /&gt;* @param clas&lt;br /&gt;* @return&lt;br /&gt;*/&lt;br /&gt;private List&lt;method&gt; getParentMethodList(Class cls){&lt;br /&gt;return getMethodList(cls.getSuperclass());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* 第１引数から第２引数に存在するMethodを削除する&lt;br /&gt;* @param list1&lt;br /&gt;* @param list2&lt;br /&gt;*/&lt;br /&gt;private void removeMatchList(List&lt;method&gt; list1, List&lt;method&gt; list2){&lt;br /&gt;for(Method method : list2){&lt;br /&gt;if(list1.indexOf(method) != -1){&lt;br /&gt;list1.remove(method);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* リフレクションを用いて，クラスを解析する．&lt;br /&gt;* @return MethodInfo[]&lt;br /&gt;*/&lt;br /&gt;public MethodInfo[] analyze(){&lt;br /&gt;//　メソッド情報を保持&lt;br /&gt;MethodInfo[] methodInfos = null;&lt;br /&gt;try{&lt;br /&gt;// 親クラスには存在せず，自クラスのみに存在するメソッドを抽出&lt;br /&gt;Class cls = Class.forName(className);&lt;br /&gt;List&lt;method&gt; methodList = getMethodList(cls);&lt;br /&gt;removeMatchList(methodList, getParentMethodList(cls));&lt;br /&gt;&lt;br /&gt;//　メソッド情報配列の領域確保&lt;br /&gt;methodInfos = new MethodInfo[methodList.size()];&lt;br /&gt;&lt;br /&gt;for(int i = 0 ; i &lt; methodList.size(); i++){&lt;br /&gt;// メソッド情報配列の初期化&lt;br /&gt;methodInfos[i] = new MethodInfo();&lt;br /&gt;&lt;br /&gt;// 修飾子を取得&amp;格納&lt;br /&gt;methodInfos[i].setModifier(Modifier.toString(methodList.get(i).getModifiers()));&lt;br /&gt;&lt;br /&gt;// 戻り値の型を取得&amp;格納&lt;br /&gt;methodInfos[i].setReturnType(methodList.get(i).getReturnType().getName());&lt;br /&gt;&lt;br /&gt;// メソッド名を取得&amp;格納&lt;br /&gt;methodInfos[i].setName(methodList.get(i).getName());&lt;br /&gt;&lt;br /&gt;// 引数の型を取得&amp;格納&lt;br /&gt;Class[] params = methodList.get(i).getParameterTypes();&lt;br /&gt;List&lt;string&gt; paramTypes = new ArrayList&lt;string&gt;();&lt;br /&gt;for(Class c : params){&lt;br /&gt;paramTypes.add(c.getName());&lt;br /&gt;}&lt;br /&gt;methodInfos[i].setParamTypes(paramTypes); &lt;br /&gt;}&lt;br /&gt;} catch (ClassNotFoundException cnfe){&lt;br /&gt;cnfe.printStackTrace();&lt;br /&gt;}&lt;br /&gt;return methodInfos;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 使用例&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;MethodAnalyzer ma = new MethodAnalyzer("Function");&lt;br /&gt;MethodInfo[] mis = ma.analyze();&lt;br /&gt;&lt;br /&gt;for(MethodInfo mi : mis){&lt;br /&gt;System.out.println(mi.toString() + "\n");&lt;br /&gt;} &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[実行結果]&lt;br /&gt;&lt;pre name="code" class="java"&gt;Modifier : public&lt;br /&gt;Name : service2&lt;br /&gt;Params : []&lt;br /&gt;Retrun : void&lt;br /&gt;&lt;br /&gt;Modifier : public static&lt;br /&gt;Name : service&lt;br /&gt;Params : [java.util.List, int, byte]&lt;br /&gt;Retrun : int&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6735241664951705599?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6735241664951705599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6735241664951705599'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2009/01/java.html' title='[Java]リフレクションによるメソッドの取得'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-3064311369918134152</id><published>2008-11-12T20:57:00.005+09:00</published><updated>2009-10-30T16:18:28.618+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>[SunSPOT]IO制御</title><content type='html'>SunSPOTのIOポートを利用します．&lt;br /&gt;モーターを回します．&lt;br /&gt;２台のSunSPOT端末を利用します．&lt;br /&gt;&lt;br /&gt;１台は，SunSPOT端末で，Z軸の傾きをもう一台のSunSPOT端末に送信します．&lt;br /&gt;&lt;br /&gt;受信側では，Z軸がプラス方向の場合は，モーターを正回転，マイナス方向の場合には，逆回転させます．&lt;br /&gt;&lt;br /&gt;[送信側SunSpotIOSender.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.sun.spot.sensorboard.EDemoBoard;&lt;br /&gt;import com.sun.spot.io.j2me.radiogram.*;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.IAccelerometer3D;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.ITriColorLED;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.LEDColor;&lt;br /&gt;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;import javax.microedition.midlet.MIDlet;&lt;br /&gt;import javax.microedition.midlet.MIDletStateChangeException;&lt;br /&gt;&lt;br /&gt;public class SunSpotIOSender extends MIDlet {&lt;br /&gt;&lt;br /&gt;private static final int HOST_PORT = 67;&lt;br /&gt;private final int CENTER = 0;&lt;br /&gt;private final int FORWARD = 1;&lt;br /&gt;private final int BACK = -1;&lt;br /&gt;private final double THRESHOLD = 0.6;&lt;br /&gt;private final int NUM = 30;&lt;br /&gt;&lt;br /&gt;protected void startApp() throws MIDletStateChangeException {&lt;br /&gt;RadiogramConnection rCon = null;&lt;br /&gt;Datagram dg = null;&lt;br /&gt;double z;&lt;br /&gt;&lt;br /&gt;IAccelerometer3D accelerometer = EDemoBoard.getInstance().getAccelerometer();&lt;br /&gt;ITriColorLED[] leds = EDemoBoard.getInstance().getLEDs();&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;rCon = (RadiogramConnection) Connector.open("radiogram://broadcast:" + HOST_PORT);&lt;br /&gt;dg = rCon.newDatagram(50);  // only sending 12 bytes of data&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e + " in connection initialization.");&lt;br /&gt;System.exit(1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int[] Zdirects = new int[NUM];&lt;br /&gt;int point = 0;&lt;br /&gt;int Ztransmit = CENTER;&lt;br /&gt;&lt;br /&gt;while (true) {&lt;br /&gt;try {&lt;br /&gt;z = accelerometer.getTiltZ();&lt;br /&gt;&lt;br /&gt;// Z軸判定&lt;br /&gt;if(point == NUM) point = 0;&lt;br /&gt;if(z &gt; THRESHOLD){&lt;br /&gt;Zdirects[point] = FORWARD;&lt;br /&gt;} else if(z &lt; -1 * THRESHOLD){&lt;br /&gt;Zdirects[point] = BACK;&lt;br /&gt;} else {&lt;br /&gt;Zdirects[point] = CENTER;&lt;br /&gt;}&lt;br /&gt;point++;&lt;br /&gt;&lt;br /&gt;if(isSameValues(Zdirects)){&lt;br /&gt;if(Zdirects[0] != Ztransmit){&lt;br /&gt;dg.reset();&lt;br /&gt;Ztransmit = Zdirects[0];&lt;br /&gt;dg.writeDouble(Ztransmit);&lt;br /&gt;rCon.send(dg);&lt;br /&gt;if(Ztransmit == FORWARD){&lt;br /&gt;setLEDGreen(leds);&lt;br /&gt;} else if(Ztransmit == BACK){&lt;br /&gt;setLEDRed(leds);&lt;br /&gt;} else {&lt;br /&gt;setLEDOFF(leds);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e + " while collecting/sending sensor sample.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDRed(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setColor(LEDColor.RED);&lt;br /&gt;leds[i].setOn();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDGreen(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setColor(LEDColor.GREEN);&lt;br /&gt;leds[i].setOn();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDOFF(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setOff();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private boolean isSameValues(int data[]){&lt;br /&gt;int start = data[0];&lt;br /&gt;&lt;br /&gt;for(int i = 1; i &lt; data.length; i++){&lt;br /&gt;if(start != data[i])&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void pauseApp() {&lt;br /&gt;// This will never be called by the Squawk VM&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void destroyApp(boolean arg0) throws MIDletStateChangeException {&lt;br /&gt;// Only called if startApp throws any exception other than MIDletStateChangeException&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;[受信側 SunSpotIOReceiver.java]&lt;pre name="code" class="java"&gt;import com.sun.spot.sensorboard.EDemoBoard;&lt;br /&gt;import com.sun.spot.sensorboard.IDemoBoard;&lt;br /&gt;import com.sun.spot.io.j2me.radiogram.*;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.ITriColorLED;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.LEDColor;&lt;br /&gt;import com.sun.spot.sensorboard.io.IIOPin;&lt;br /&gt;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;import javax.microedition.midlet.MIDlet;&lt;br /&gt;import javax.microedition.midlet.MIDletStateChangeException;&lt;br /&gt;&lt;br /&gt;public class SunSpotIOReceiver extends MIDlet {&lt;br /&gt;&lt;br /&gt;private static final int HOST_PORT = 67; &lt;br /&gt;private final int FORWARD = 1;&lt;br /&gt;private final int BACK = -1;&lt;br /&gt;&lt;br /&gt;protected void startApp() throws MIDletStateChangeException {&lt;br /&gt;RadiogramConnection rCon = null;&lt;br /&gt;Datagram dg = null;&lt;br /&gt;double Zdirect;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;// Open up a server-side broadcast radiogram connection&lt;br /&gt;// to listen for sensor readings being sent by different SPOTs&lt;br /&gt;rCon = (RadiogramConnection) Connector.open("radiogram://:" + HOST_PORT);&lt;br /&gt;dg = rCon.newDatagram(rCon.getMaximumLength());&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("setUp caught " + e.getMessage());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// "eDemo"ボードの参照を取得&lt;br /&gt;IDemoBoard eDemo = EDemoBoard.getInstance();&lt;br /&gt;&lt;br /&gt;// 汎用入出力ポート(D0)にアクセスするための参照を取得&lt;br /&gt;IIOPin pin0 = eDemo.getIOPins()[EDemoBoard.D0];&lt;br /&gt;IIOPin pin3 = eDemo.getIOPins()[EDemoBoard.D3];&lt;br /&gt;pin0.setAsOutput(true);&lt;br /&gt;pin3.setAsOutput(true);&lt;br /&gt;&lt;br /&gt;// eDemoボード上のLEDにアクセスするための参照を取得&lt;br /&gt;ITriColorLED[] leds = eDemo.getLEDs();&lt;br /&gt;&lt;br /&gt;while (true) {&lt;br /&gt;try {&lt;br /&gt;// Read sensor sample received over the radio&lt;br /&gt;rCon.receive(dg);&lt;br /&gt;Zdirect = dg.readDouble();&lt;br /&gt;&lt;br /&gt;// Zについて&lt;br /&gt;if(Zdirect == FORWARD){&lt;br /&gt;pin0.setHigh();&lt;br /&gt;pin3.setLow();&lt;br /&gt;setLEDGreen(leds);&lt;br /&gt;} else if(Zdirect == BACK){&lt;br /&gt;pin0.setLow();&lt;br /&gt;pin3.setHigh();&lt;br /&gt;setLEDRed(leds);&lt;br /&gt;&lt;br /&gt;} else {&lt;br /&gt;pin0.setLow();&lt;br /&gt;pin3.setLow();&lt;br /&gt;setLEDOFF(leds);&lt;br /&gt;}&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e +  " while reading sensor samples.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDRed(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setColor(LEDColor.RED);&lt;br /&gt;leds[i].setOn();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDGreen(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setColor(LEDColor.GREEN);&lt;br /&gt;leds[i].setOn();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLEDOFF(ITriColorLED[] leds){&lt;br /&gt;for(int i = 0; 0 &lt; leds.length; i++){&lt;br /&gt;leds[i].setOff();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void pauseApp() {&lt;br /&gt;// This will never be called by the Squawk VM&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void destroyApp(boolean arg0) throws MIDletStateChangeException {&lt;br /&gt;// Only called if startApp throws any exception other than MIDletStateChangeException&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;実行結果&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/SRrGyJsIVrI/AAAAAAAAACM/0tM_K8Pc28E/s1600-h/DSCF0583.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/SRrGyJsIVrI/AAAAAAAAACM/0tM_K8Pc28E/s320/DSCF0583.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5267741279059990194" /&gt;&lt;/a&gt;IO部分&lt;a href="http://1.bp.blogspot.com/_M60ZyknxGnQ/SRrG6-Hh5uI/AAAAAAAAACU/OV8_vMP81CI/s1600-h/DSCF0584.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_M60ZyknxGnQ/SRrG6-Hh5uI/AAAAAAAAACU/OV8_vMP81CI/s320/DSCF0584.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5267741430572508898" /&gt;&lt;/a&gt;&lt;br /&gt;久々にはんだこてを使いました．&lt;br /&gt;IO部分には，紙などを止めるクリップを使用し，手作り感が満載です．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-3064311369918134152?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3064311369918134152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/3064311369918134152'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/11/sunspotio.html' title='[SunSPOT]IO制御'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M60ZyknxGnQ/SRrGyJsIVrI/AAAAAAAAACM/0tM_K8Pc28E/s72-c/DSCF0583.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-2019832375765167164</id><published>2008-11-12T20:26:00.011+09:00</published><updated>2009-10-30T16:18:55.089+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>[SunSPOT]3D加速度の取得</title><content type='html'>Sun Microsystems社が開発したSunSPOTをいじってみました．&lt;br /&gt;SunSPOT(&lt;a href="http://jp.sun.com/products/software/sunspot/"&gt;http://jp.sun.com/products/software/sunspot/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SunSPOTの端末で取得したXYZ軸方向の加速度をBaseStationに転送し，ホストPC上でグラフ化します．&lt;br /&gt;グラフ化にはJFreeChartを使用しました.&lt;br /&gt;JFreeChart(&lt;a href="http://www.jfree.org/jfreechart/"&gt;http://www.jfree.org/jfreechart/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;[端末側SunSPOT AccelationOnSunSpot.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.sun.spot.sensorboard.EDemoBoard;&lt;br /&gt;import com.sun.spot.io.j2me.radiogram.*;&lt;br /&gt;import com.sun.spot.sensorboard.peripheral.IAccelerometer3D;&lt;br /&gt;import com.sun.spot.util.Utils;&lt;br /&gt;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;import javax.microedition.midlet.MIDlet;&lt;br /&gt;import javax.microedition.midlet.MIDletStateChangeException;&lt;br /&gt;&lt;br /&gt;public class AccelationOnSunSpot extends MIDlet {&lt;br /&gt;&lt;br /&gt;private static final int HOST_PORT = 67;&lt;br /&gt;&lt;br /&gt;protected void startApp() throws MIDletStateChangeException {&lt;br /&gt;RadiogramConnection rCon = null;&lt;br /&gt;Datagram dg = null;&lt;br /&gt;IAccelerometer3D accelerometer = EDemoBoard.getInstance().getAccelerometer();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;rCon = (RadiogramConnection) Connector.open("radiogram://broadcast:" + HOST_PORT);&lt;br /&gt;dg = rCon.newDatagram(50);  // only sending 12 bytes of data&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e + " in connection initialization.");&lt;br /&gt;System.exit(1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;double x,y,z;&lt;br /&gt;&lt;br /&gt;while (true) {&lt;br /&gt;try {&lt;br /&gt;x = accelerometer.getAccelX();&lt;br /&gt;y = accelerometer.getAccelY();&lt;br /&gt;z = accelerometer.getAccelZ();&lt;br /&gt;&lt;br /&gt;dg.reset();&lt;br /&gt;dg.writeDouble(x);&lt;br /&gt;dg.writeDouble(y);&lt;br /&gt;dg.writeDouble(z);&lt;br /&gt;rCon.send(dg);&lt;br /&gt;&lt;br /&gt;Utils.sleep(100);&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e + " while collecting/sending sensor sample.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void pauseApp() {&lt;br /&gt;// This will never be called by the Squawk VM&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void destroyApp(boolean arg0) throws MIDletStateChangeException {&lt;br /&gt;// Only called if startApp throws any exception other than MIDletStateChangeException&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[ホスト側BaseStation AccelationOnDesktop.java]&lt;br /&gt;&lt;pre name="code" class="java"&gt;import com.sun.spot.io.j2me.radiogram.*;&lt;br /&gt;import javax.microedition.io.*;&lt;br /&gt;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import org.jfree.chart.ChartPanel;&lt;br /&gt;import org.jfree.chart.JFreeChart;&lt;br /&gt;import org.jfree.chart.axis.DateAxis;&lt;br /&gt;import org.jfree.chart.axis.DateTickMarkPosition;&lt;br /&gt;import org.jfree.chart.axis.NumberAxis;&lt;br /&gt;import org.jfree.chart.axis.ValueAxis;&lt;br /&gt;import org.jfree.chart.labels.StandardXYToolTipGenerator;&lt;br /&gt;import org.jfree.chart.plot.XYPlot;&lt;br /&gt;import org.jfree.chart.renderer.xy.StandardXYItemRenderer;&lt;br /&gt;import org.jfree.chart.renderer.xy.XYItemRenderer;&lt;br /&gt;import org.jfree.chart.title.LegendTitle;&lt;br /&gt;import org.jfree.data.time.Millisecond;&lt;br /&gt;import org.jfree.data.time.TimeSeries;&lt;br /&gt;import org.jfree.data.time.TimeSeriesCollection;&lt;br /&gt;&lt;br /&gt;import java.awt.Font;&lt;br /&gt;&lt;br /&gt;public class AccelationOnDesktop extends JFrame implements Runnable{&lt;br /&gt;private static final int HOST_PORT = 67;&lt;br /&gt;private Thread th;&lt;br /&gt;private TimeSeries XSeries;&lt;br /&gt;private TimeSeries YSeries;&lt;br /&gt;private TimeSeries ZSeries;&lt;br /&gt;&lt;br /&gt;public AccelationOnDesktop(){&lt;br /&gt;initChart();&lt;br /&gt;&lt;br /&gt;th = new Thread(this);&lt;br /&gt;th.start();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void initChart(){&lt;br /&gt;&lt;br /&gt;//create DataSeries object&lt;br /&gt;XSeries = new TimeSeries("X", Millisecond.class);&lt;br /&gt;YSeries = new TimeSeries("Y", Millisecond.class);&lt;br /&gt;ZSeries = new TimeSeries("Z", Millisecond.class);&lt;br /&gt;&lt;br /&gt;TimeSeriesCollection dataset = new TimeSeriesCollection();&lt;br /&gt;dataset.addSeries(XSeries);&lt;br /&gt;dataset.addSeries(YSeries);&lt;br /&gt;dataset.addSeries(ZSeries);&lt;br /&gt;&lt;br /&gt;DateAxis domainAxis = new DateAxis("Time");&lt;br /&gt;domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);&lt;br /&gt;&lt;br /&gt;ValueAxis rangeAxis = new NumberAxis("Acceleration");&lt;br /&gt;&lt;br /&gt;XYItemRenderer renderer = new StandardXYItemRenderer();&lt;br /&gt;renderer.setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());&lt;br /&gt;&lt;br /&gt;XYPlot plot = new XYPlot(dataset,domainAxis,rangeAxis,renderer);&lt;br /&gt;plot.getRenderer().setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());&lt;br /&gt;&lt;br /&gt;JFreeChart chart = new JFreeChart("XYZ Acceleration", JFreeChart.DEFAULT_TITLE_FONT, plot, true);&lt;br /&gt;LegendTitle legend = chart.getLegend();&lt;br /&gt;legend.setItemFont(new Font("Ariel", Font.BOLD, 20));&lt;br /&gt;ChartPanel cPanel = new ChartPanel (chart);&lt;br /&gt;&lt;br /&gt;this.add(cPanel);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void run() {&lt;br /&gt;RadiogramConnection rCon = null;&lt;br /&gt;Datagram dg = null;&lt;br /&gt;double x,y,z;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;rCon = (RadiogramConnection) Connector.open("radiogram://:" + HOST_PORT);&lt;br /&gt;dg = rCon.newDatagram(rCon.getMaximumLength());&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("setUp caught " + e.getMessage());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while (true) {&lt;br /&gt;try {&lt;br /&gt;rCon.receive(dg);&lt;br /&gt;x = dg.readDouble();&lt;br /&gt;y = dg.readDouble();&lt;br /&gt;z = dg.readDouble();&lt;br /&gt;&lt;br /&gt;XSeries.add(new Millisecond(), x);&lt;br /&gt;YSeries.add(new Millisecond(), y);&lt;br /&gt;ZSeries.add(new Millisecond(), z);  &lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println("Caught " + e +  " while reading sensor samples.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;AccelationOnDesktop aod = new AccelationOnDesktop();&lt;br /&gt;aod.setSize(600,300);&lt;br /&gt;aod.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;aod.setVisible(true);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;実行結果&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_M60ZyknxGnQ/SRq_E4QqN-I/AAAAAAAAACE/1qeAox6G26o/s1600-h/XYZ.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5267732804705859554" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 632px; CURSOR: hand; HEIGHT: 319px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/SRq_E4QqN-I/AAAAAAAAACE/1qeAox6G26o/s320/XYZ.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-2019832375765167164?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2019832375765167164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2019832375765167164'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/11/sunspot3d.html' title='[SunSPOT]3D加速度の取得'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M60ZyknxGnQ/SRq_E4QqN-I/AAAAAAAAACE/1qeAox6G26o/s72-c/XYZ.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-5278322096083814957</id><published>2008-07-30T16:50:00.009+09:00</published><updated>2009-10-30T16:24:28.692+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Javaからネイティブコードを生成する方法</title><content type='html'>Javaでネイティブな実行ファイル(コード)を作成する方法をご紹介します．&lt;br /&gt;&lt;br /&gt;構築環境はUbuntu 8.0.4です&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;準備：&lt;/strong&gt;&lt;br /&gt;GCJ (GNU Compiler for Java)をインストール&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;%　sudo apt-get install gcj&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ちなみにapt-getを使う際，プロキシを介すネットワーク環境の場合&lt;br /&gt;以下のように設定ファイルを作る必要があります．&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;% sudo vim /etc/apt/apt.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;Acquire {&lt;br /&gt;http::proxy "http://[username]:[password]@[proxy_addr]:[port]/"&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;gcjのインストール後，[% gcj -v]等で正しくインストールされ，パスも通っているか確かめます．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;プログラム作成：&lt;/strong&gt;&lt;br /&gt;以下のようなサンプルプログラムを作成します．&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;//Hello.java&lt;br /&gt;public class Hello{&lt;br /&gt;public static void main(String[] args){&lt;br /&gt;System.out.println("hello World");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;コンパイル：&lt;/strong&gt;&lt;br /&gt;方法１：オブジェクトファイルを作らずコンパイルする方法&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;% gcj --main=Hello -o Hello.exe Hello.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;方法２：オブジェクトファイルを作成してコンパイルする方法&lt;br /&gt;&lt;pre name="code" class="java:nocontrols"&gt;% gcj -c -o Hello.o Hello.java&lt;br /&gt;% gcj --main=Hello -o Hello Hello.o&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;以上です．Swingやawt等のGUIを作成しようするプログラムはうまく動作しないことがあるみたいです．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-5278322096083814957?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5278322096083814957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/5278322096083814957'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/07/java.html' title='Javaからネイティブコードを生成する方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7784322191173905242</id><published>2008-07-11T14:28:00.007+09:00</published><updated>2009-10-30T16:06:10.056+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>JavaからWin32APIをたたく方法</title><content type='html'>JavaからWin32APIを呼ぶ方法を調べたのでメモしときます&lt;br /&gt;(Cとかで書け、というツッコミは御勘弁)&lt;br /&gt;&lt;br /&gt;JavaからC系の言語を使用するための方法として&lt;br /&gt;JNI(Java Native Interface)が存在します。&lt;br /&gt;&lt;br /&gt;Win32APIを使用するCのプログラムコードを書き、&lt;br /&gt;それをJavaからこのJNIを利用することで、間接的にJavaからWin32APIを使用することが可能となりますが、JNIは使用するまでに多くのステップ数を踏む必要があります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そこで、Win32APIをJavaから利用するためのライブラリを使用します。&lt;br /&gt;&lt;br /&gt;そのライブラリはEclipseのPluginsディレクトリ内に存在する「org.eclipse.swt.win32.win32.x86_[バージョン].jar」です。&lt;br /&gt;&lt;br /&gt;このjarファイルにクラスパスを通し、importすることで、ライブラリを利用することができます。&lt;br /&gt;(Eclipseでjarファイルにクラスパスを通す場合は[プロジェクト名を右クリック]-[Build Pass]-[Add External Archives]です)&lt;br /&gt;&lt;br /&gt;/////////////////////&lt;br /&gt;サンプルプログラム&lt;br /&gt;/////////////////////&lt;br /&gt;&lt;pre name="code" class="java"&gt;//Main.java&lt;br /&gt;&lt;br /&gt;import org.eclipse.swt.internal.win32.OS;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;static void process() {&lt;br /&gt;int hDC = OS.GetDC(0);&lt;br /&gt;try {&lt;br /&gt;for (int i = 0; i &lt; 500; i += 1) {&lt;br /&gt;OS.MoveToEx(hDC, 0, i, 0);&lt;br /&gt;OS.LineTo(hDC, 500, 500 - i);&lt;br /&gt;try {&lt;br /&gt;Thread.sleep(5);&lt;br /&gt;} catch (InterruptedException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} finally {&lt;br /&gt;OS.ReleaseDC(0, hDC);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;process();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;参考サイト：&lt;br /&gt;http://homepage2.nifty.com/igat/igapyon/diary/2005/ig051228.html&lt;br /&gt;http://d.hatena.ne.jp/unageanu/20070518&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7784322191173905242?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7784322191173905242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7784322191173905242'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/07/javawin32api.html' title='JavaからWin32APIをたたく方法'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1228678909984396119</id><published>2008-06-29T00:25:00.003+09:00</published><updated>2008-06-29T00:32:50.145+09:00</updated><title type='text'>論文発表</title><content type='html'>4月の下旬にFIT2008情報科学技術フォーラムに投稿した論文が採択されました．&lt;br /&gt;&lt;br /&gt;9月2日に慶応大学の湘南藤沢キャンパスで発表してきます．&lt;br /&gt;頑張ります．&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;学部４年の間に後2,3回外で発表し，採択かどうかに関わらず1本英語論文を書いてみたいな．&lt;br /&gt;これを目標に頑張ります（もちろん，研究内容がしっかりしたものじゃないとダメだと思うけど）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみに発表会のリストなるものを研究室の先生に教えてもらったので記載します&lt;br /&gt;&lt;a href="http://www.ipsj.or.jp/cgi-bin/ipsj_calendar.cgi"&gt;http://www.ipsj.or.jp/cgi-bin/ipsj_calendar.cgi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;↓ここらへんが日程的によい気がするので，前向きに考えていきたいと思います．&lt;br /&gt;&lt;br /&gt;マルチメディア通信と分散処理ワークショップ（山口）&lt;br /&gt;&lt;a href="http://www.dpsws.org/2008/WS/"&gt;http://www.dpsws.org/2008/WS/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NSDI （ボストン）&lt;br /&gt;&lt;a href="http://www.usenix.org/events/nsdi09/cfp/cfp.html"&gt;http://www.usenix.org/events/nsdi09/cfp/cfp.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1228678909984396119?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1228678909984396119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1228678909984396119'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/06/blog-post.html' title='論文発表'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-9030359710867987749</id><published>2008-05-28T20:36:00.005+09:00</published><updated>2009-10-30T16:05:13.184+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書'/><title type='text'>分散(第1章)</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;「分散システム 原理とパラダイム」&lt;br /&gt;アンドリュー・S. タネンバウム (著), マールテン・ファン スティーン (著), Andrew S. Tanenbaum (原著), Maarten van Steen (原著)&lt;br /&gt;&lt;br /&gt;↑の本を読むことになったので、まとめていきます&lt;br /&gt;今回は第1章&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■分散システムの定義&lt;br /&gt;分散システムはそのユーザに対して単一のコヒーレントシステムとして見える独立したコンピュータの集合である。&lt;br /&gt;&lt;br /&gt;例1)大学や会社部署におけるワークステーションのネットワーク&lt;br /&gt;例2)注文の自動処理を支援する作業フロー情報システム&lt;br /&gt;例3)World Wide Web&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■目標&lt;br /&gt;○ユーザとリソースとの接続&lt;br /&gt;例えば、１つのプリンタを複数ユーザで共有&lt;br /&gt;&lt;br /&gt;○透過性&lt;br /&gt;プロセスやリソースが複数のコンピュータにまたがって物理的に分散されている事実を隠蔽したい。&lt;br /&gt;&lt;br /&gt;○開放性&lt;br /&gt;インターフェース定義が重要&lt;br /&gt;メカニズムからポリシーの分離&lt;br /&gt;&lt;br /&gt;○スケーラビリティ&lt;br /&gt;拡張のし易さ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ハードウェア概念&lt;br /&gt;○マルチプロセッサ&lt;br /&gt;全てのCPUは共有メモリに直接アクセス&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5205392079617499106" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_M60ZyknxGnQ/SD1EhF47n-I/AAAAAAAAAA4/mtpGewiC48Q/s320/1.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;○同種マルチコンピュータシステム&lt;br /&gt;各CPUはそれ自身のローカルメモリを持つ&lt;br /&gt;&lt;br /&gt;○異種マルチコンピュータシステム&lt;br /&gt;分散システムの多くはコレ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ソフトウェア概念&lt;br /&gt;○分散オペレーティングシステム&lt;br /&gt;-ユニプロセッサオペレーティングシステム&lt;br /&gt;CPUが１つだけのコンピュータを管理&lt;br /&gt;&lt;br /&gt;-マルチプロセッサオペレーティングシステム&lt;br /&gt;CPUが複数のコンピュータを管理&lt;br /&gt;&lt;br /&gt;-マルチコンピュータオペレーティングシステム&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5205392341610504178" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_M60ZyknxGnQ/SD1EwV47n_I/AAAAAAAAABA/VQba2paQGsA/s320/2.JPG" border="0" /&gt;&lt;br /&gt;-分散共有メモリシステム&lt;br /&gt;&lt;br /&gt;■ミドルウェア&lt;br /&gt;分散透過性を改善するために用いられるソフトウェアの付加的な層&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5205392401740046338" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_M60ZyknxGnQ/SD1Ez147oAI/AAAAAAAAABI/ozAJpvG1sJg/s320/3.JPG" border="0" /&gt;&lt;br /&gt;○ミドルウェアモデル&lt;br /&gt;&lt;br /&gt;○ミドルウェアサービス&lt;br /&gt;-通信機能&lt;br /&gt;-アクセス透過性&lt;br /&gt;-名前付け&lt;br /&gt;-永続性&lt;br /&gt;&lt;br /&gt;■まとめ&lt;br /&gt;分散システムは共同で動作する&lt;br /&gt;○利点&lt;br /&gt;-異なるコンピュータで動作する異なるアプリケーションを単一のシステムに統合しやすくなる&lt;br /&gt;-分散システムは下位にあるネットワークの大きさに比して大規模化しやすい &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-9030359710867987749?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/9030359710867987749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/9030359710867987749'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/05/1.html' title='分散(第1章)'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_M60ZyknxGnQ/SD1EhF47n-I/AAAAAAAAAA4/mtpGewiC48Q/s72-c/1.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-2516511043356051107</id><published>2008-05-02T16:24:00.005+09:00</published><updated>2008-05-02T18:02:34.427+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Stubを用いないRMI通信</title><content type='html'>/////////////////////&lt;br /&gt;クライアント用プログラム&lt;br /&gt;/////////////////////&lt;br /&gt;&lt;pre class="prettyprint"&gt;//Client.java&lt;br /&gt;import java.rmi.Naming;&lt;br /&gt;&lt;br /&gt;public class Client {&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  if(args.length != 1){&lt;br /&gt;   System.err.println("% java -option Clinet IP_ADDRESS");&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  try {&lt;br /&gt;   Hello stub = (Hello) Naming.lookup("rmi://" + args[0] + "/Hello");&lt;br /&gt;   String response = stub.sayHello();&lt;br /&gt;   System.out.println(response);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace( );&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/////////////////////&lt;br /&gt;サーバ用プログラム&lt;br /&gt;/////////////////////&lt;br /&gt;&lt;pre class="prettyprint"&gt;//Server.java&lt;br /&gt;import java.rmi.registry.Registry;&lt;br /&gt;import java.rmi.registry.LocateRegistry;&lt;br /&gt;import java.rmi.server.UnicastRemoteObject;&lt;br /&gt;&lt;br /&gt;public class Server implements Hello {&lt;br /&gt; public String sayHello( ) {&lt;br /&gt;  return "Hello World!";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void main(String args[]) {&lt;br /&gt;  try {&lt;br /&gt;   Server obj = new Server();&lt;br /&gt;   Hello stub = (Hello)UnicastRemoteObject.exportObject(obj, 0);&lt;br /&gt;   &lt;br /&gt;    Registry registry = LocateRegistry.getRegistry();&lt;br /&gt;   registry.bind("Hello", stub);&lt;br /&gt;&lt;br /&gt;   System.out.println("Server ready");&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace( );&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/////////////////////&lt;br /&gt;共通プログラム&lt;br /&gt;/////////////////////&lt;br /&gt;&lt;pre class="prettyprint"&gt;//Hello.java&lt;br /&gt;import java.rmi.Remote;&lt;br /&gt;import java.rmi.RemoteException;&lt;br /&gt;&lt;br /&gt;public interface Hello extends Remote {&lt;br /&gt; String sayHello() throws RemoteException;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;サーバ側のディレクトリ構造&lt;br /&gt;(例では，C:\work内にServer.classとHello.class，C:\codebase内にHello.classを配置)&lt;br /&gt;&lt;pre class="prettyprint"&gt;// 配置&lt;br /&gt;C:-+-work-------+-Server.class&lt;br /&gt;   |            |&lt;br /&gt;   |            +-Hello.class&lt;br /&gt;   |&lt;br /&gt;   +-codebase---+-Hello.class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;// サーバ側コマンド&lt;br /&gt;// 適当な箇所でレジストリを立ち上げる&lt;br /&gt;// 例では，Cの直下でレジストリを立ち上げている&lt;br /&gt;C:\&gt;rmiregistry&lt;br /&gt;&lt;br /&gt;// rmiregistryとは別のコマンドプロンプトを立ち上げる&lt;br /&gt;// 例では，C:\work内&lt;br /&gt;C:\work&gt;java -Djava.rmi.server.codebase=file:///C:\codebase\ Server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;クリアント側のディレクトリ構造&lt;br /&gt;(Client.classとHello.classを同じディレクトリに配置)&lt;br /&gt;&lt;pre class="prettyprint"&gt;// 配置&lt;br /&gt;-+-Client.class&lt;br /&gt; |&lt;br /&gt; +-Hello.class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;// クライアント側コマンド&lt;br /&gt;java Client [サーバのIPアドレス]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-2516511043356051107?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2516511043356051107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/2516511043356051107'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/05/stubrmi.html' title='Stubを用いないRMI通信'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-4978666572252344237</id><published>2008-05-01T12:46:00.076+09:00</published><updated>2008-05-01T19:14:33.990+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>javax.tools</title><content type='html'>プログラムからプログラムをコンパイル&amp;amp;呼び出す方法について&lt;br /&gt;(IEでソースをコピーすると改行が崩れるので，そういう人はFireFoxで)&lt;br /&gt;&lt;br /&gt;実行環境:JDK 6&lt;br /&gt;&lt;br /&gt;呼び出すプログラム&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;//Main.java&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;&lt;br /&gt;import javax.tools.JavaCompiler;&lt;br /&gt;import javax.tools.StandardJavaFileManager;&lt;br /&gt;import javax.tools.ToolProvider;&lt;br /&gt;import javax.tools.JavaCompiler.CompilationTask;&lt;br /&gt;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; &lt;br /&gt; // プログラムをコンパイルする&lt;br /&gt; static void compile(String fileName) {&lt;br /&gt;  // 1. JavaCompiler インスタンスを取得.&lt;br /&gt;  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();&lt;br /&gt;  if(compiler == null) {&lt;br /&gt;   System.out.println("Compiler is not provided.");&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // 2. java.io.File ベースのファイル・マネージャ.&lt;br /&gt;  StandardJavaFileManager fileManager =&lt;br /&gt;   compiler.getStandardFileManager(null, null, null);&lt;br /&gt;&lt;br /&gt;  // 3. コンパイルするソース・ファイル.&lt;br /&gt;  File[] sourceFiles = { new File(fileName + ".java") };&lt;br /&gt;&lt;br /&gt;  // 4. コンパイル・タスクを取得する.&lt;br /&gt;  CompilationTask task = compiler.getTask(&lt;br /&gt;    null, fileManager, null, null,&lt;br /&gt;    null, fileManager.getJavaFileObjects(sourceFiles));&lt;br /&gt;&lt;br /&gt;  // 5. コンパイル・タスクを実行し, 結果を表示する.&lt;br /&gt;  boolean result = task.call();&lt;br /&gt;  if(!result){&lt;br /&gt;   System.out.println("Compile error");&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // リフレクションを用いて，メソッドを呼び出す&lt;br /&gt; static void reflect(String fileName , String methodName)&lt;br /&gt;           throws Exception{&lt;br /&gt;  // クラスを取得&lt;br /&gt;  Class cls = Class.forName(fileName);&lt;br /&gt;  // メソッドを取得&lt;br /&gt;  Method method = cls.getMethod(methodName,null);&lt;br /&gt;  // メソッドを実行&lt;br /&gt;  method.invoke(cls.newInstance(),null);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) throws Exception {&lt;br /&gt;  if(args.length != 2){&lt;br /&gt;   System.out.println("%java -option Main FILENAME METHODNAME");&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  compile(args[0]);&lt;br /&gt;  reflect(args[0], args[1]);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;呼び出されるプログラム&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;//Test.java&lt;br /&gt;&lt;br /&gt;public class Test {&lt;br /&gt; public void print(){&lt;br /&gt;  System.out.println("hello");&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;コンパイル 方法&lt;br /&gt;C:\MyPrograms\Java\jdk1.6.0_03\libの部分は環境によって変える&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;set lib=C:\MyPrograms\Java\jdk1.6.0_03\lib&lt;br /&gt;javac -cp .;%lib%\tools.jar Main.java&lt;br /&gt;java -cp .;%lib%\tools.jar Main Test print&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;参考URL&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/jp/java/library/j-jcomp/index.html?ca=drs-jp-1211"&gt;javax.tools を使って動的アプリケーションを作成する&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.techscore.com/tech/J2SE/JavaSE6/8.html#mustang8-1"&gt;TECHSCORE&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-4978666572252344237?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/4978666572252344237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/4978666572252344237'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/05/javaxtools.html' title='javax.tools'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6233449513467638610</id><published>2008-04-26T10:17:00.006+09:00</published><updated>2009-12-13T01:53:38.880+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='論文'/><title type='text'>FIT投稿</title><content type='html'>情報処理学会主催の2008 第7回情報科学技術フォーラム(FIT)に論文を投稿しました．&lt;br /&gt;参照URL:&lt;a href="http://www.ipsj.or.jp/10jigyo/fit/fit2008/index.html"&gt;http://www.ipsj.or.jp/10jigyo/fit/fit2008/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;査読に通れば，発表ということになります．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6233449513467638610?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6233449513467638610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6233449513467638610'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/04/fit.html' title='FIT投稿'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7268937578190488438</id><published>2008-04-21T17:56:00.002+09:00</published><updated>2008-04-21T18:01:44.071+09:00</updated><title type='text'>論文締切</title><content type='html'>&lt;p&gt;FIT2008 第7回情報科学技術フォーラムの査読付き締め切りは4/24の15:00。&lt;/p&gt;&lt;p&gt;長い（であろう）研究生活の第一歩。&lt;/p&gt;&lt;p&gt;難しいと思うけど、Acceptしてくれるといいなぁ～。&lt;/p&gt;&lt;p&gt;もう一息！！&lt;/p&gt;&lt;p&gt;（か、二息か三息か・・・）&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7268937578190488438?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7268937578190488438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7268937578190488438'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/04/blog-post_21.html' title='論文締切'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-7549414199875876023</id><published>2008-04-13T14:13:00.002+09:00</published><updated>2008-04-13T14:18:08.076+09:00</updated><title type='text'>心構え</title><content type='html'>(技術情報なし)&lt;br /&gt;&lt;br /&gt;中山和久という人が書いた文章だったんだけど，リンク切れでうまく表示できなかったので，Googleのキャッシュからコピペ・・・&lt;br /&gt;&lt;br /&gt;いくつかいい言葉があるな&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 全世界のバイオの力を総結集して世界の富を全部集めても、大腸菌一つもとからは作れない。これは厳然たる事実で、なぜできないのかといえ 　ば、「大腸菌様」がなぜ生きているのかが、科学的に分からないからです。まして、人間がどうして生きているかは、私は99パーセント分からないと思う。（中略）しかし、それは神というよりも、サムシング・グレートとしか言いようがない。&lt;br /&gt;（解説：筑波大学時代の恩師M先生の著書からの引用。生きていることって本当に不思議です。生命科学の研究者としては生きていることの本質に少しでも迫りたいものです。でもそこにたどり着くのは長い道のりです。）&lt;br /&gt;&lt;br /&gt;2. ライフサイエンスに絶対はない&lt;br /&gt;（解説：生きていることはファジーです。簡単には割り切れない生命現象はたくさんあるでしょうし、まったく予想もつかないようなことが起こっているのかもしれません。）&lt;br /&gt;&lt;br /&gt;3. 種の無いところに木は生えぬ&lt;br /&gt;（解説：どんな天才でも、何もないところから新たな発想をすることはできません。普段勉強して得た基礎知識をもとにして、新たな発想が生まれます。）&lt;br /&gt;&lt;br /&gt;4. アンテナは大きいほど良い&lt;br /&gt;（解説：自分のやっている狭い研究分野だけにとらわれることなく、いろんなことを勉強しましょう。バックグラウンドが広ければ広いほど、柔軟な発想が生まれてきま　す。それに、今やっている研究を一生続ける訳ではありません。いろんなことに興味を持ちましょう。）&lt;br /&gt;&lt;br /&gt;5. 中原をめざす&lt;br /&gt;（解説：研究をする際には、枝葉のことにはあまりとらわれずに、まずはその現象の本質を見極めましょう。）&lt;br /&gt;&lt;br /&gt;6. 「100打ったうちの1つ当たりゃ　一流の研究者や！　10打ったうちの1つ当たりゃ　超一流の研究者や！！」&lt;br /&gt;（解説：大学院生時代にN先生から何度も聞いた言葉。研究は試行錯誤の連続です。失敗にめげてはいけません。）&lt;br /&gt;&lt;br /&gt;7. 嘘からでた真&lt;br /&gt;（解説：実験をやって予想通りの結果が得られることは少ないですが、失敗したと思った予想外の結果のなかに真実が隠されているかもしれません。失敗だと思った実験　のデータをゴミ箱に捨てることなく、ちゃんと記録に残しておきましょう。）&lt;br /&gt;&lt;br /&gt;8. 1日10歩　3日で30歩　30歩進んで　20歩下がる&lt;br /&gt;（解説：実験がうまくいかない時には、もう一度元に戻って良く考えてみましょう。何かヒントが思い浮かぶかもしれません。）&lt;br /&gt;&lt;br /&gt;9. 棚から落ちたボタ餅を確実に拾う&lt;br /&gt;（解説：セレンディピティー serendipity を確実にものにするのも研究者としての大切な資質です。）&lt;br /&gt;&lt;br /&gt;10. ピペットマン持っては日本一の　夢も大きなサイエンティスト　世界を相手に勇気を持って　中央突破を試みる　頑張れ！　強いぞ！　僕らの仲間　京大．．．．．&lt;br /&gt;（解説：研究をやっていると、海外の研究室との競争になることはしばしばです。毎日がオリンピックみたいなものです。昔懐かしいアニメの主題歌のメロディーに乗ってこの歌を口ずさみ、真っ向勝負を挑みましょう。）&lt;br /&gt;&lt;br /&gt;11. 先生の背中　先輩の背中&lt;br /&gt;（解説：先生や先輩から見習う点は多いものです。もちろん、見習わない方が良いこともありますが．．．．）&lt;br /&gt;&lt;br /&gt;12. 何は友あれ&lt;br /&gt;（解説：研究仲間は将来にわたって大切な存在です。コンビニ弁当を一人で食べるだけではなく、仲間と一緒にメシを食ったり酒を飲んだりしながら、研究のことや将来のことやくだらない世間話に花を咲かせましょう。将来、きっと自分の財産になるはずです。）&lt;br /&gt;&lt;br /&gt;13. 聞くは一時の恥、聞かぬは一生（末代）の恥&lt;br /&gt;（解説：知らないことを恥じる必要はまったくありません。先生や先輩にドシドシ質問して自分の糧としましょう。質問せずにずっと知らないままでいることほど損なことはありません。聞く勇気を持ちましょう。）&lt;br /&gt;&lt;br /&gt;14. 僕はここにいる&lt;br /&gt;（解説：研究をやっていく上で自己満足できるかどうかが最も重要ですが、他己満足（他人からの評価）が得られなければ研究を継続できません。自分の存在をどのぐらいアピールできるかはとっても大切です。自分の研究内容を人にわかりやすく伝えましょう。）&lt;br /&gt;&lt;br /&gt;15. 今　古い船を動かせるのは　古い水夫じゃないだろう&lt;br /&gt;（解説：フォーク少年だった頃によく聴いた吉田拓郎の「イメージの詩」の一節。人それぞれに感じ方は違うと思いますが、何となく意味は伝わるでしょう。）&lt;br /&gt;&lt;br /&gt;16. もう一息&lt;br /&gt;　　もう一息と言ふ処でくたばつては&lt;br /&gt;　　何事もものにならない。&lt;br /&gt;　　もう一息&lt;br /&gt; 　 それにうちかつてもう一息&lt;br /&gt;  　それにも打ち克つて&lt;br /&gt;　　もう一息。&lt;br /&gt;　　もう一息&lt;br /&gt;　　もうだめだ&lt;br /&gt;　　それをもう一息&lt;br /&gt;  　勝利は大変だ&lt;br /&gt;　　だがもう一息。&lt;br /&gt;（武者小路実篤『もう一息』解説：掛谷秀昭先生のシンポジウムでの発表の最後のスライドで、とっても印象的でした。）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-7549414199875876023?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7549414199875876023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/7549414199875876023'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/04/blog-post_13.html' title='心構え'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-6669759015955354985</id><published>2008-04-12T10:03:00.013+09:00</published><updated>2008-04-12T10:43:37.477+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Javassist</title><content type='html'>&lt;p&gt;千葉　滋氏(東京工業大学・大学院情報理工学研究科 )開発&lt;/p&gt;&lt;p&gt;バイトコード（クラスファイル）を直接操作することのできるライブラリ．&lt;/p&gt;&lt;p&gt;これはどういうことかと言うと，普段プログラムを作る際には，Javaプログラム(*.java)をコンパイルし，クラスファイル(*.class)を得る．これをJAVA VM上にロードすることにより実行する．&lt;/p&gt;&lt;p&gt;Javassistでは，プログラムを変更することなく（また，コンパイルすることなく）クラスファイルを操作することができる．&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;例として，何の機能を持たないA.javaを用意する．&lt;/p&gt;&lt;p&gt;[A.java]&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#99ffff;"&gt;public class A{&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#99ffff;"&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A.javaをコンパイルしたA.classはこのようになる．（実際はバイトコードなので見ることはできない）&lt;/p&gt;&lt;p&gt;&lt;br /&gt;[A.class(編集前)]&lt;br /&gt;&lt;pre&gt;&lt;strong&gt;&lt;span style="color:#66ffff;"&gt;public class A extends java.lang.Object{&lt;br /&gt;    public A();&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;このA.classに対し，Javassistを用いたMain.javaにて編集を行ってみる．&lt;/p&gt;&lt;p&gt;[Main.java]&lt;br /&gt;&lt;pre&gt;&lt;strong&gt;&lt;br /&gt;&lt;span style="color:#66ffff;"&gt;import javassist.*;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;     ClassPool cp = ClassPool.getDefault();&lt;br /&gt;        CtClass cc = cp.get("A");&lt;br /&gt;     &lt;br /&gt;        // フィールドの追加&lt;br /&gt;        CtField f1 = CtField.make("int x;", cc);&lt;br /&gt;        cc.addField(f1);&lt;br /&gt;     &lt;br /&gt;        // メソッドの追加&lt;br /&gt;        CtMethod m = CtNewMethod.make(&lt;br /&gt;            "public String toString() {" +&lt;br /&gt;            "  return \" abcde \"; }", cc);&lt;br /&gt;        cc.addMethod(m);&lt;br /&gt;     &lt;br /&gt;        // クラスファイルの更新&lt;br /&gt;        cc.writeFile();&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Mainプログラムを動かすとA.classの中身は以下のようになる．&lt;/p&gt;&lt;p&gt;[A.class(編集後)]&lt;br /&gt;&lt;pre&gt;&lt;strong&gt;&lt;span style="color:#66ffff;"&gt;public class A extends java.lang.Object{&lt;br /&gt;    int x;&lt;br /&gt;    public A();&lt;br /&gt;    public java.lang.String toString();&lt;br /&gt;}&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;このようにJavassistを用いることにより，バイトコードにフィールドの追加やメソッドの追加などの処理を行うことができる．&lt;/p&gt;&lt;p&gt;他にも，いろんなことができるみたいなので，↓ページをご覧くらはい．&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.csg.is.titech.ac.jp/~chiba/notes/javapress03/index.html"&gt;http://www.csg.is.titech.ac.jp/~chiba/notes/javapress03/index.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;（Javassist -- Java バイトコードを操作するクラスライブラリ -- 入門）&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-6669759015955354985?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6669759015955354985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/6669759015955354985'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/04/javassist.html' title='Javassist'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1268225070885728651.post-1208111623542755703</id><published>2008-04-11T15:47:00.001+09:00</published><updated>2008-04-11T15:47:34.944+09:00</updated><title type='text'>テスト</title><content type='html'>テストです．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1268225070885728651-1208111623542755703?l=ayakix-lablog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1208111623542755703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1268225070885728651/posts/default/1208111623542755703'/><link rel='alternate' type='text/html' href='http://ayakix-lablog.blogspot.com/2008/04/blog-post.html' title='テスト'/><author><name>Ryota Ayaki (綾木良太)</name><uri>http://www.blogger.com/profile/02508761482040698827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
