このブログを検索

9.28.2011

Chrome 16.0.891.0 dev-m の文字化け?フォントがおかしくなる現象の対処法-未解決

ここのブログにたどり着くということは,dev-m版のChromeのユーザであると思われる.
私もChrome(dev-m)16.0.8910.0に,先ほど(2011/09/28)アップデートした. 
そしたら,2バイト文字(恐らくこの文字のみ)が途切れ途切れになる不具合に出くわす.
文字は読めるのだが,非常に読みにくい.
そこで,いろいろ設定をいじっていた結果を追記していく. 

応急処置として,メイリオに変更したら,この不具合は発生しなかった.

 とりあえず,これが現状の打開策だろう.
この設定を中心に原因を探る.
(ここでこの記事を投下.)

2011/09/28 : 現状「メイリオ」に変更
一部のサイト等で改善されているだけだと思われる.
以前フォントがおかしいサイトが多い.
スタイルシートに原因があると思われる.

2011/10/01 : 現状「メイリオ」に変更
ソース(cssを中心に)でいろいろ文字サイズを変更したり,調べたりしていてわかったこと
*HTMLの技術者でないので,憶測で話を進めます.有識者の方の意見がほしいところです

文字サイズを小さく(具体的には通常の60%くらい大きさで出力)させると発生しなくなった.
あとで具体的なコードを載せておきます.

情報をあつめててわかったのは,chromeのアンチエイリアス機能に問題があるとのこと.
参考:ヘルプフォーラム
なので,アンチエイリアスを発生させなければ,大丈夫です.

文字の表示サイズを小さくするとか・・・
その場しのぎな解決法なので,これでもう大丈夫という対策があれば,また更新します.

7.02.2011

「日本Androidの会 横浜支部第九回定例会」 行ってきました

日本Androidの会 横浜支部第九回定例会に行ってきました.

//日本Androidの会 横浜支部第九回定例会(発表順)
1 有山さん AOSPにContributeしてみた 実践編
2 堀里さん 技術者による簡単デザイン講座 ~2枚目アプリを作ってみよう!!~
3 アンドロイドールのみなさん アンドロイドールが横浜支部にやってきた!
4 一森さん・安達さん アンドロイドール立ち上げの経緯とサイト紹介
5 美月あかりさん アンドロイドールについてと女の子の視点
6 藤川ありささん・砂岡春奈さん アンドロイドールをはじめて一カ月の私
7 ロボ部 ABCで講演&ブース展示しますよ(仮)
8 PF部 ABCで講演しますよ(仮)
9 ゆうしぐ 2年目の横浜支部について
10 丸山先生 IT技術のコンシューマ化とそのインパクト

アプリをつくっても,デザインがイケてなかったりしたのですが,
「2 堀里さん 技術者による簡単デザイン講座 ~2枚目アプリを作ってみよう!!~」
Inkscapeの紹介をされていました.
使い方とかは気合でなんとかなるかなと思う感じ.
(adobeさんのIllustratorとかもいいかもしれんけど,高いからね.)
あと,フォントの話もされていたなぁ
ちなみに紹介されていたのは
フォントふぉんとFONT.com

//途中終了

5.21.2011

[勉強会資料]第三回さくさくテキストマイニング

はじめまして,Twitter id:Taka_Kuniのtakahito kuniyoshiです.
今回の投稿は第三回さくさくテキストマイニングの資料を書きます.

さくさくテキストマイニングの目的に

・テキストマイニングについての学習のスタートアップ
・テキストマイニング技術に関して気軽に参加・議論することができる場の提供

がありましたので,私の知っていることや個人でやっていることをちょろっと書きます.

私の発表の目的としては「テキストマイニングについての学習のスタートアップ」に注目して,
テキストマイニングってなにができるの?ってところから入っていきたいと思います.
しかし,会場等に初心者の方がいないのであれば,ここはすっとばして,やっていることにいきなり入りたいと思います.
ですので,発表用のスライドはすごく多いかと.

(途中終了,またあとで書きます)

4.13.2011

最近の動向

おはようございます.
今春から社会人になりまして,現在研修のまっただ中です.
勉強会等に参加したいのですが,社会人生活に馴染めず,まだ行けてない情況です.
学生の頃と違い,土日が完璧に暇になったので行きたいのですが,
思うように都合がつかず,現在は家でいろいろとネタをつくってます.

現在つくっているのは,
前の日記の実験用アプリケーション作成.
と,
検索結果のマップ化アプリケーション
をつくっています.

前者の方は,SOMのライブラリを作成しているので,すぐ作成できるのですが,
Kohonenの文献にもあるように,多くの方が作成されているため,あまりやる気がおきません.
新規性の問題ですね.

後者の方は,うまくいくか前実験の段階です.
実験結果等は,こちらのブログにて,発表させていただきます.
学会発表等でもいいのですが,アイデア勝負なところがあるため,ブログにて公開し,
すぐにウェブアプリケーションをリリースしたいと考えています.
主に携帯端末を対象に考えているので,Android用のアプリケーションも考えていますので,
ご意見等ございましたら,御連絡ください.

今日のところは以上となります.
社会人生活で忙しく,まだ慣れない生活ですが,がんばっていきたいと考えています.
おやすみなさい.

2.01.2011

サービス案1

昼間に考えたサービス案を書き留めます.
事前調査等はしておらず,ただの思いつきなので,研究・ビジネス化等盗む要素があれば,盗んでくださって構いません.
また,既にこういうのがあるよ等の情報があれば,お教え願いたいと思います.
けれど,ビジネス化しにくいかと思うので,なんとも言えないですね.

話を戻して,サービス案1を書きます.
昨日,部屋じまんコミュニティ「リムル」In My Bagにて,自室のPC環境や鞄の中身を公開しました.
その際に,持ち物等のタグをつける点があったのですが,In My Bagでは画像中の領域を指定して,タグをつけることができます.
これは,おもしろいなぁなんて思ったりもしましたが,めんどくさい.
持ち物にコメントをつけるには最適だが,この持ち物がなにかの説明を付けるのがめんどくさかった.楽しんでいたけどね.
(この時点でわかるかと思いますが,私はめんどくさがりです)
これを自動化させれば,コメント付ける際にも楽に付けることができるのではないか,また同時にショッピングサイトと連動させ購入ページに飛ばせれば,アフィリエイト等も望める.
まぁ,最後の一言は余分かと思いますが,自動で行ってもらえると楽になるのは確かです.

そこで,自動化させるためのシステムを構築し,鞄だけでなく様々な写真から商品を紹介するサービスを展開させれないかと考えました.
商品を抽出する際には,領域抽出等で可能かと思いますが,
システムの最大の問題点は,商品の外観をある程度システムが知っている必要がある点です.
一点からの画像のみでは,正確に推測するのは難しいと考えます.
複数の画像を用意し,そのデータベースに対しマッチングを行えば,精度もあがるかとおもいます.
あと,問題点としては,画像中に完全に露出している状態でないときの対処法ですね.
そこをクリアすれば,サービスとして提供できるかと思います.
マネタイズの点は提案の時点では考えていません.
そこまで落としこむ必要性も将来性も現段階の知識的に不可能に近いので.

このシステムの要点をまとめると,
・複数視点からみた物体データベースの作成
・ノイズ(障害物)がある状態からの物体抽出
・抽出した物体とデータベースの照合
をクリアする必要があるかと思います.

昼間にパッと思いついただけなので,なんとも言えないのですが,
メモとして扱って,これからもサービス案があれば書いていこうかと思います.

以上

10.19.2010

KDDIとSkypeの戦略的包括提携「Skype™ au」の提供について

無断リンクですが,以下のことが発表されました.
au携帯電話でskype
あくまで素人目線の意見ですので,聞き流すくらいでちょうどいいかと思います.
それでも読んでくれる方はどうぞ.

私がPCに触りだしたくらいは2000年くらいだったと思う.
そのころ使っていたメッセンジャーはYahoo!だったかな.
すでにボイスチャットとかはできていたから,現在と考えて表面上ではそこまで技術進歩してない(あくまでユーザからしたらね,転送速度・容量とかは変わったけどさ)
まだ携帯電話ももってなくて,PHSを持ってた気がする.
それくらいのときから,電話を急にするようになって,電話代で何度怒られたことか.

本題に戻ろうか,携帯電話でskypeは,油と水みたいに混ざらないだろうなと思ってました.
skypeID間の通話は無料(パケット料はかかる)みたいなものですからね.
事業の1部として,無線通話を扱っている業者からすれば,いい迷惑だろうと思います.
それをやってのけたauは挑戦者だと思うし,どんな策略があるのだろうと考えました.

考えられるのは,誰もやってないことに挑戦することでの,ユーザの確保.
また,通信技術・端末性能ともに高性能化する中,止めることができないと判断したのか.
今,ぱっと考えられたのはこの2点です.
1点目は,他者との差別化を図るには最大の武器になる点です.
公式には国内の事業者はどこもやってないことをやってのけることで,集客も見込めるうえに,流出も防げる点があります.
2点目はそのままですね.

それにしても,この発表は,驚きでした.
今までにできる端末などは知っていましたが,あまり身近でなかったことから手を出さずにいたのですが,
この発表で少しauもいいなと思いました.

近い将来,音声通信が無料になる日も近いのでは…

だらだらと続けるわけにはいかないので,ここで終わりにします.
なにかおもしろい記事があったら,また感想などを書こうかと思います.

10.03.2010

自己組織化マップの応用1-序章-

自己組織化マップを利用した巡回セールスマン問題の準最適解を導く-序章-

今回のキーワード
「巡回セールスマン問題」
「自己組織化マップ(SOM)」
「準最適解」

今回は序章として,問題定義と解決方法並びにSOMについてを記す.
結果等は次回の投稿にて行います.

まず,巡回セールスマン問題とはなにかから入ります.
巡回セールスマン問題とは,別名が多くありますが,要するに目的地を最短で回るためのルートはどのルートか導くことです.
最近の話でいうと,Google DevQuizの第3問あたりであったかと思います.
あの問題では,距離が問題なのではなく,移動時間に焦点を当てていました.

本題に戻ると,巡回ルートは都市(以降データ点とする)が多くなれば指数的にルートが増えていきます.
数学的知識を使えば,巡回ルートは減らすことができますが,それでも指数的に増えることには変わりありません.
では,どうやって解けばいいか.
コンピュータを使って,解かせるのが一番早いでしょう.
今回私が用いるのは「自己組織化マップ(以降SOM)」です.
SOMの一般的な使用法は,高次元のベクトルを二次元に射影することで可視化などを促すことが,多いかと思います.
この射影することができる点を利用し,巡回セールスマン問題の準最適解を導きます.
具体的にはマップではなく,1次元にして利用するので,「自己組織化リング」とでもいいましょうか.
準最適解しか導くことができないのは,学習系のアルゴリズムであるため,精密な距離計算を行わないことから
必然的に最適解に近い結果しか導くことができないからです.
しかし,データ点が増えても短時間でルートを算出できる点や,膨大な時間や複雑なアルゴリズムが不要である点など,
多くの利点があります.
(まぁ,ほんとのことを言えば,最近SOMばっかり使ってるので,ほかのことにも応用させたいと思っているだけなんですけどね)

早いですけど,今回は問題定義だけ行い,グラフィック化させるシステムができれば,解答編を描きたいと思います.

まとめ
今回の目的:巡回セールスマン問題をSOMを利用して解く(データ点に関しては,乱数なり実際の都市なりを利用)
自己組織化写像wikipedia
巡回セールスマン問題

9.23.2010

[Java]Scanner VS BufferedReader

ファイル入力の際にいつもBufferedReaderクラスしか使ったことなかったですが,
ふとしたときにScannerクラスの存在を知ったので,
違いと個々の使い分け法記します.

また,説明する際に使用するテキストファイル内容は
test.txt
Hello World
1 2 3
おはよう!
を使用します.

・BufferedReaderクラス使用
コード例
try {
   BufferedReader in = new BufferedReader(new FileReader(textAd));
   String line;
   while ((line = in.readLine()) != null) {
    System.out.println(line);
   }
   in.close();
  } catch (IOException er) {
   System.out.println(er.getMessage());
  }

・Scannerクラス使用
try {
   File file = new File(textAd);
   Scanner ScanFile = new Scanner(file);
   while (ScanFile.hasNextLine()) {
    System.out.println(ScanFile.nextLine());
   }
   ScanFile.close();
  } catch (IOException er) {
   System.out.println(er.getMessage());
  }

上記のプログラムを個々に100回繰り返した時の時間を比較したところ,
BufferedReaderクラス : 0.015秒
Scannerクラス     : 0.062秒

Scannerクラスのほうが遅いことがわかる.
では,Scannerクラスを利用するメリットはないかといえば,そうではありません.

メリット1 キーボード入力
  Scanner scan = new Scanner(System.in);
  String line = scan.next();
  System.out.println(line);
  line = scan.next();
  System.out.println(line);
実行結果(入力: hello world)
hello
world

メリット2 型指定キーボード入力
  int line = scan.nextInt();
  System.out.println(line);
  line = scan.nextInt();
  System.out.println(line);

実行結果(入力:123 456
123
456

以上のようにBufferedReaderを使用した場合、よりScannerを利用した方がコードは簡潔にすることが可能です。
暗黙的に2つに分けると決めていたのですが、実際使用する場合は、
  while (scan.hasNextInt()) {
   int line = scan.nextInt();
   System.out.println(line);
  }
と、書くといいかもしれません。
また、使用する際はExceptionが発生した場合に対処するためtry文なりthrowなりで対策する必要があります。

参考資料
Scanner
BufferedReader

9.21.2010

test

package SGM.main;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import SGM.Data.Data;

/*
 Training Set (9,603 docs): LEWISSPLIT="TRAIN";  TOPICS="YES"
 Test Set (3,299 docs): LEWISSPLIT="TEST"; TOPICS="YES"
 Unused (8,676 docs):   LEWISSPLIT="NOT-USED"; TOPICS="YES"
 or TOPICS="NO"
 */
public class Main {
 private static String FileAd = "D:/TESTDATA/Reuter/file";
 private static LinkedList<String> fileList = new LinkedList<String>();

 public static void main(String[] args) {

  setFileList(FileAd);

  SGMReader sgm = new SGMReader(fileList);

  String line = "<TITLE>BAHIA COCOA REVIEW</TITLE>";
  String key = "TITLE";

  System.out.println(getData(line, key));

 }

 private static void setFileList(String address) {
  File file = new File(address);
  String[] list = file.list();

  for (int i = 0; i < list.length; i++) {
   String _ad = new String(address).concat("/" + list[i]);
   if (isFile(_ad)) {
    fileList.add(_ad);
    System.out.println(_ad);
   } else {
    setFileList(_ad);
   }
  }
 }

 private static Boolean isFile(String address) {
  File file = new File(address);
  if (file.isFile()) {
   return true;
  }
  return false;
 }

 private static String getData(String line, String key) {
  int beginIndex = line.indexOf(key) + key.length() + 1;
  int endIndex = line.lastIndexOf(key) - 2;
  line = line.substring(beginIndex, endIndex);
  return line;
 }
}

class SGMReader {
 private String fileAd = "./reut2-001.sgm";
 private String[] element = { "REUTERS", "DATE", "TOPICS", "PLACES", "D", "PEOPLE", "ORGS",
   "EXCHANGES", "COMPANIES", "UNKNOWN", "TEXT", "TITLE", "DATELINE", "BODY", };

 private int testNum = 0;
 private int trainNum = 0;
 private int sum = 0;

 public SGMReader(LinkedList<String> fileList) {
  for (String ad : fileList) {
   this.Reader(ad);
  }

  System.out.println("test:\t" + testNum + "\ntrainNum:\t" + trainNum + "\nsum:" + sum);
 }

 public SGMReader() {
  this.Reader();
 }

 private void Reader(String ad) {
  ArrayList<String> SGM = new ArrayList<String>();
  String title = new String();
  Data data;
  try {
   File fHandle = new File(ad);
   Scanner fScan = new Scanner(fHandle);
   String Mode = "Unused";
   Boolean ReadMode = false;
   String ID = new String();
   Boolean SaveMode = false;

   while (fScan.hasNextLine()) {
    String str = fScan.nextLine();
    // System.out.println(str);

    if (this.haveKey("LEWISSPLIT", str)) {
     SGM.clear();
     ID = new String();
     title = new String();
     ReadMode = false;
     Mode = "Unused";
     SaveMode = false;
     if (this.isTrainingSet(str).equals("TRAIN")) {
      Mode = "TRAIN";
      title = "TRAIN";
      ID = this.getNewID(str);
      trainNum++;
     } else if (this.isTrainingSet(str).equals("TEST")) {
      Mode = "TEST";
      title = "TEST";
      ID = this.getNewID(str);
      testNum++;
     }
    }

    if (Mode != "Unused") {
     if (this.haveKey("TOPICS>", str)) {
      str = str.replace("<D>", "");
      str = str.replace("</D>", "_");
      String topics = this.getData(str, "TOPICS");
      // if (topics.length() != 0) {
      title = title.concat("." + topics + "" + ID + ".txt");
      sum++;
      SaveMode = true;
      // }
     }

     if (this.haveKey("<BODY", str)) {
      str = str.substring(str.indexOf("BODY") + new String("BODY").length() + 1);
      ReadMode = true;
     }
     if (this.haveKey("</BODY", str)) {
      if (SaveMode == true) {
       data = new Data(title, SGM);
      }
      SGM.clear();
      ID = new String();
      title = new String();
      ReadMode = false;
      Mode = "Unused";
      SaveMode = false;
     }

     if (ReadMode == true) {
      SGM.add(str);
      // System.out.println(str);
     }
    }
   }

   System.out.println(SGM.size());
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
 }

 private String getData(String line, String key) {
  int beginIndex = line.indexOf(key) + key.length() + 1;
  int endIndex = line.lastIndexOf(key) - 2;
  line = line.substring(beginIndex, endIndex);
  return line;
 }

 private String getNewID(String line) {
  int beginIndex = line.indexOf("NEWID") + new String("NEWID").length() + 2;
  int endIndex = line.length() - 2;
  return line.substring(beginIndex, endIndex);
 }

 private String isTrainingSet(String line) {
  if (this.haveKey("YES", line)) {
   if (this.haveKey("TEST", line)) {
    if (!this.haveKey("NOT-USED", line)) {
     return "TEST";
    } else {
     return "Unused";
    }
   } else if (this.haveKey("TRAIN", line)) {
    return "TRAIN";
   } else {
    return "Unused";
   }
  } else {
   return "Unused";
  }
 }

 private Boolean haveKey(String key, String line) {
  if (line.indexOf(key) > 0) {
   return true;
  } else {
   return false;
  }
 }

}

7.19.2010

花火

今日、バイトの仲間と花火をしました。
この年になると、手持ちの花火とか、噴射系の花火とかに魅力を感じないのはなぜだろう。
とかいいつつ、噴射系の花火を手に持ってあばれていたのは私です、すみません。
*よい子は真似しないでね*

線香花火が一番!
だけど、風が強かったり、ちょっとグダグダになって申し訳ない。
そんなこんなで、楽しかった夏の日も終わり、明日からは学校!学校!学校の毎日です。

学校で習ったことや書き留めておきたいものを書いていこうかな。
最初の題目は、ニューラルネットワークの導入部分でも書こうか。

てか、機械学習って需要あるのか謎だけど気にしない!

7.17.2010

Hello World

とりあえず、はじめまして、くに タッくんです。
この名前は、あだ名?呼び名?である「くに」と
一部の人から呼ばれていた「タッくん(これ、すごく気に入ってます)」を合わせただけです。
一応まだ学生をしていますが、そろそろ社会人です。

今現在は、研究室と家とバイト先くらいにしかいませんが、
たまに近郊で開催される勉強会などのイベントに参加していますよ。

前回はandroidのイベントだったかな。
楽しかったので、もっと勉強して、また参加したい。

短いですが、hello worldはこのへんで。