何一つ誇るものがない

人生のアンチパターン

約1年半使用していたIS01のレビュー

この度、約1年半近く使用していたauのスマートフォン「IS01」のレビューをここに記す。

androidのバージョンアップが出来なかった
当初、androidのバージョンが上がっても対応可能と謳っていたのに、断念しやがった。

・バッテリーの減りが半端じゃなかった
最低限の機能設定にしても、朝家出て夜家に着くまでバッテリーが持てば調子が良かった。

・アプリ、マーケットが使えなかった
OSのバージョンが上がらなくて、androidマーケットさえもマトモに繋がらなかった。
アプリをダウンロードしようとしても、「お使いのOSは〜」、「お使いの端末は〜」の
メッセージが表示されてことごとく拒否られた。

・キャリアメールが届かなくなる
長期期間、連続稼動していると突然キャリアメールが届かなくなり、
再起動しないとメールが取得出来なかった。

・全体的に動作がもっさりしてた
動作が重いのは、想定出来たが反応遅すぎ。

・コピペの使い方が分からなかった
なんでalt+cでコピーなんだよ。言われないと気づかねーよ

・ネタになる
「それどうやって電話するのwww」、もういい聞くな。


この黒歴史を踏まえて、未来のandroidを進めて欲しい。
ちなみにiPhone 4S最高です。

Javaでタプル

Commons Lang 3いじってたところ
org.apache.commons.lang3.tuple
なんてパッケージがあったから使ってみた。

まず、タプルとはなんぞやって言ったらpythonperlでよく使ってるアレです。
タプル - Wikipedia

returnが複数返せる便利ものですね。

実装するこんな感じです。

     @Test
     public void testTaple() {
         MutablePair taple = new MutablePair("str1", "str2");
     
         Assert.assertEquals(taple.getLeft(), "str1");
         Assert.assertEquals(taple.getRight(), "str2");
     }

JavaDocを読むと
ImmutablePairはスレッドセーフで、
MutablePairはスレッドセーフじゃないみたいです。

今のところ、2つしか戻せないので今後の拡張が気になる所と
タプル用のインタフェースが出来ないかなーと思ってる次第。

モテるギタリスト女子力を磨くための4つの心得

こんにちは、ギタリストマネジメントを専攻しているマーティ・フリードマン嬢です。
私は学歴も知識もありませんしブスですが、ギターに関してはプロフェッショナル。
今回は、モテるギタリスト女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

1. あえて2〜3万円代のギターを飲み会に持っていく
あえて2〜3万円代のギターを使うようにしましょう。
そして飲み会の場で好みの男がいたら話しかけ、わざとらしくギターを出していじってみましょう。
そして「あ〜ん! このギター本当にマジでチョームカつくんですけどぉぉお〜!」と言って、男に「どうしたの?」と言わせましょう。
言わせたらもう大成功。「ギターとか詳しくなくてぇ〜! ずっとコレ使ってるんですけどぉ〜! 使いにくいんですぅ〜! ぷんぷくり〜ん(怒)」と言いましょう。
だいたいの男は高いギターを持ちたがる習性があるので、安かったとしても10万円代のギターを使っているはずです。

そこで男が「高いギターにしないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。
そう言われたらあなたは「なんかなんかぁ〜! 最近じぶそんのれすぱうるが人気なんでしょー!? あれってどうなんですかぁ? 高いの欲しいんですけどわかんなぁぁああい!! 私かわいそーなコ★」と返します。
すると男は「ギブソンレスポールでしょ?本当に良くわからないみたいだね。どんなのが欲しいの?」という話になって、次の休みの日にふたりでケータイ選びのデートに行けるというわけです。
あなたの女子力が高ければ、男がPRS private stockを買ってくれるかも!? 

2. 椎名林檎を真似るとモテる
「ぅるぁぁぁ!」とかギターを掻き毟るように弾くなどを表現する椎名林檎を真似ると、バンドメンバーの男性は「普段はこの子カワイイなぁ」や「(精神的に)支えてあげたいかも」と思ってくれます。
練習スタジオでは日常よりもギャップが増幅されて相手に伝わるので 椎名林檎のマネを多用することによって、男性はあなたを普段は可憐で女の子らしいと勘違いしてくれるのです。そういうキャラクターにするとほぼ絶対に同性に嫌われますが気にしないようにしましょう。

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく
スタジオ練習終わりの飲み会などで男が女性に話すことといえば速弾きやマイナーなバンドの話ばかり。
よって、女性にとってどうでもいい話ばかりです。
でもそこで適当に「へぇーそうなんですかぁ〜?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女ダメだな」と気がついてしまいます。
ダメ女だとバレたら終わりです。そこは無意味にテンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。
積極的に話を聞いてくれる女性に男は弱いのです。

いろいろと話を聞いたあと、「ジミーペイジはRed Zeppelinで、リッチー・ブラックモアDeep Purpleなんですね! 覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。
続けて左右交互にカスタネットを叩くふりをしながら「うんたんうんたん♪ うんたんうんたん♪」と言って、「どうしたの?」と男に言わせるのもアリ。
そこで「私のMTRに録音しているのでありますっ☆」と言えばギタリスト女子力アップ! そこでまた男は「この子おもしろくてカワイイかも!?」と思ってくれます。
私は学歴も知識もありませんしブスですが、こういうテクニックを使えば知識がない私のようなバカ女のほうがモテたりするのです。男は優越感に浸りたいですからね。

4. ライブではお酒が飲めない女をアピールせよ
ライブハウスに客が入ったら、真っ先にアルコールの入ったドリンクを探して「あーん! 私これ飲めないんですよねぇ〜(悲)」と言いましょう。
するとほぼ100パーセント「どうして? 嫌いなの?」と聞かれるので、「嫌いじゃないし飲みたいけど飲めないんですっ><」と返答しましょう。
ここでまた100パーセント「嫌いじゃないのにどうして飲めないの?」と聞かれるので、うつむいて3〜5秒ほど間をおいてからボソッとこう言います。
「……だって、……だって、お酒飲んじゃったら酔っ払ってギターが弾けなくなっちゃうじゃないですかぁっ! ギターかわいそうですぅ! まだ本番始まってもいないのにぃぃ〜(悲)。ピロピロとすら弾けないんですよ……」と身を震わせて言うのです。


その瞬間、あなたの女子力がアップします。きっと男は「なんて平沢唯のようなコなんだろう! 絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。
意中の男と付き合うことになったら、そんなことは忘れて好きなだけお酒を飲んで大丈夫です。「飲めないんじゃなかったっけ?」と言われたら「大丈夫になった」とか「慣れた」、「むしろ飲まないと弾けない」と言っておけばOKです。

JavaでXMLを取得して表示する

ggrksしてもトップに出てこなかったのでここに残す。

JavaXMLについて(SAXとかDOMとか)はメンドクサイのでまとめたのを貼っとく。
http://www.evernote.com/shard/s22/sh/90411537-4697-4a68-98b0-e8631fc10a92/d2a48e34b43db9479751833209ad0150

○仕様
 1.JavaでURL接続でXML形式のデータを取得する
2.1で取得したXMLをparseして出力する

で、実装したソース

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.nio.charset.MalformedInputException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


/**
 * @author akira1908jp
 *
 */
public class Hogehoge {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws MalformedInputException,
			ProtocolException, IOException {

		URL url = new URL("http://tenki.wet.co.jp/forecast/day01tky.rdf");
		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
		urlConn.setRequestMethod("GET");
		urlConn.setInstanceFollowRedirects(false);
		urlConn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");

		urlConn.connect();

		Document doc = null;
		try {
			doc = getDocumet(urlConn.getInputStream());
		} catch (SAXException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

		// ルートの要素名になっている子ノードを取得する
		Element root = doc.getDocumentElement();
		System.out.println("ルート要素名:" + root.getTagName());

		// 各ノードリストを取得
		NodeList nodeList = root.getElementsByTagName("channel");
		System.out.println("ノードリストの数は:" + nodeList.getLength());

		for (int i = 0; i < nodeList.getLength(); i++) {
			Element element = (Element)nodeList.item(i);
			//

			System.out.println(getChildren(element, "title"));


			System.out.println(getChildren(element, "description"));

			System.out.println(getChildren(element, "pubDate"));

			// 各ノードリストを取得
			NodeList list = element.getElementsByTagName("item");
			System.out.println("リストの数は:" + nodeList.getLength());
			for (int j = 0; j< list.getLength(); j++) {
				Element element2 = (Element)list.item(j);
				System.out.println(getChildren(element2, "title"));

				System.out.println("Link:" + getChildren(element2, "link"));

				System.out.println("description:" + getChildren(element2, "description"));

				System.out.println(getChildren(element2, "pubDate"));
			}
		}

		urlConn.disconnect();
	}

	private static Document getDocumet(InputStream is) throws SAXException,
			IOException, ParserConfigurationException {

		DocumentBuilder docbuilder = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder();
		return docbuilder.parse(is);

	}

	  /**
	   * 指定されたエレメントから子要素の内容を取得。
	   *
	   * @param   element 指定エレメント
	   * @param   tagName 指定タグ名
	   * @return  取得した内容
	   */
	  public static String getChildren(Element element, String tagName) {
	    NodeList list = element.getElementsByTagName(tagName);
	    Element cElement = (Element)list.item(0);
	    return cElement.getFirstChild().getNodeValue();
	  }

}

で実行して、出力すると↓な感じ

ルート要素名:rss
ノードリストの数は:1
天気 -東京都-  ウェザーテック
11日17時発表 東京地方  今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック
Wed, 11 May 2011 17:31:49 +0900
リストの数は:1
11日17時発表 東京地方  今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック
Link:http://tenki.wet.co.jp/forecast/day01tky.htm#area1
description:11日17時発表 東京地方  今夜〔雨〕 明日〔曇 のち 雨〕 明後日〔曇 一時 雨〕 ウェザーテック
Wed, 11 May 2011 17:31:49 +0900
[ CM ] ホームページに天気予報をのせるなら、ここを見てください。
Link:http://wicon.wet.co.jp/?day01rss31
description:[ CM ] ホームページに天気予報をのせるなら、ここを見てください。
Wed, 11 May 2011 17:31:49 +0900
11日17時発表 伊豆諸島北部  今夜〔雨〕 明日〔雨〕 明後日〔晴 一時 雨〕 ウェザーテック
Link:http://tenki.wet.co.jp/forecast/day01tky.htm#area2
description:11日17時発表 伊豆諸島北部  今夜〔雨〕 明日〔雨〕 明後日〔晴 一時 雨〕 ウェザーテック
Wed, 11 May 2011 17:31:49 +0900

ついでにAtndもやってみた。

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.nio.charset.MalformedInputException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


/**
 * @author akira1908jp
 *
 */
public class AtndRSS {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws MalformedInputException,
			ProtocolException, IOException {

		URL url =
			new URL("http://atnd.org/events.rss");
		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
		urlConn.setRequestMethod("GET");
		urlConn.setInstanceFollowRedirects(false);
		urlConn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");

		urlConn.connect();

		Document doc = null;
		try {
			doc = getDocumet(urlConn.getInputStream());
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}

		// ルートの要素名になっている子ノードを取得する
		Element root = doc.getDocumentElement();
		System.out.println("ルート要素名:" + root.getTagName());

		// 各ノードリストを取得
		NodeList nodeList = root.getElementsByTagName("channel");
		System.out.println("ノードリストの数は:" + nodeList.getLength());

		for (int i = 0; i < nodeList.getLength(); i++) {
			Element element1 = (Element)nodeList.item(i);
			//

			System.out.println(getChildren(element1, "title"));


			System.out.println(getChildren(element1, "description"));

			System.out.println(getChildren(element1, "pubDate"));

			// 各ノードリストを取得
			NodeList list = element1.getElementsByTagName("item");
			System.out.println("リストの数は:" + nodeList.getLength());
			for (int j = 0; j< list.getLength(); j++) {
				Element element2 = (Element)list.item(j);
				System.out.println(getChildren(element2, "title"));

				System.out.println("author:" + getChildren(element2, "author"));
				System.out.println("Link:" + getChildren(element2, "link"));

				System.out.println("description:" + getChildren(element2, "description"));

				System.out.println(getChildren(element2, "pubDate"));
			}
		}

		urlConn.disconnect();
	}

	private static Document getDocumet(InputStream is) throws SAXException,
			IOException, ParserConfigurationException {

		DocumentBuilder docbuilder = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder();
		return docbuilder.parse(is);

	}

	  /**
	   * 指定されたエレメントから子要素の内容を取得。
	   *
	   * @param   element 指定エレメント
	   * @param   tagName 指定タグ名
	   * @return  取得した内容
	   */
	  public static String getChildren(Element element, String tagName) {
	    NodeList list = element.getElementsByTagName(tagName);
	    Element cElement = (Element)list.item(0);
	    return cElement.getFirstChild().getNodeValue();
	  }

}

イベント詳細のdescriptionが取得出来なかった。
分かる人がいたら、是非教えてください。

勢いでやっただけなので、もっと上手いやり方があったら教えてください。