MySQL Casual Advent Calendar 2011 - MySQL Casual 16日目のエントリです。
MySQLでファイル出力の方法を紹介します。
実際、自分で業務で使用していたとびっきりCasualなテクニックです。
約1年半使用していたIS01のレビュー
この度、約1年半近く使用していたauのスマートフォン「IS01」のレビューをここに記す。
・androidのバージョンアップが出来なかった
当初、androidのバージョンが上がっても対応可能と謳っていたのに、断念しやがった。
・バッテリーの減りが半端じゃなかった
最低限の機能設定にしても、朝家出て夜家に着くまでバッテリーが持てば調子が良かった。
・アプリ、マーケットが使えなかった
OSのバージョンが上がらなくて、androidマーケットさえもマトモに繋がらなかった。
アプリをダウンロードしようとしても、「お使いのOSは〜」、「お使いの端末は〜」の
メッセージが表示されてことごとく拒否られた。
・キャリアメールが届かなくなる
長期期間、連続稼動していると突然キャリアメールが届かなくなり、
再起動しないとメールが取得出来なかった。
・全体的に動作がもっさりしてた
動作が重いのは、想定出来たが反応遅すぎ。
・コピペの使い方が分からなかった
なんでalt+cでコピーなんだよ。言われないと気づかねーよ
・ネタになる
「それどうやって電話するのwww」、もういい聞くな。
Javaでタプル
Commons Lang 3いじってたところ
org.apache.commons.lang3.tuple
なんてパッケージがあったから使ってみた。
まず、タプルとはなんぞやって言ったらpythonやperlでよく使ってるアレです。
タプル - 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してもトップに出てこなかったのでここに残す。
JavaとXMLについて(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が取得出来なかった。
分かる人がいたら、是非教えてください。
勢いでやっただけなので、もっと上手いやり方があったら教えてください。