備忘録

物忘れが酷いので

html5の<input type="date">をjava.util.Dateに変換する

まず、Date(String s)というコンストラクタを使ってやってみましたが、非推奨ということで
他の方法を探します。
すると、java.text.DateFromat(String s)というのを使って簡単にできることがわかりました。

import java.text.DateFormat;
import java.util.Date;
...

  DateFormat df = new DateFormat("yyyy-MM-dd");
  Date d = df.parse((String)request.getAttribute("date"));
...

非常に簡単です。

jstlのテンプレ(slim3)

<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@page isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>

なぜか2行目に

<%@page isELIgnored="false" %>

を書かないとEclipseで認識されませんでした。

追記、
書かなくても、書いても警告は消えませんでした。

eclipseでgoogle app engineにjspファイルを使おうとするとデプロイできない

以下の様なエラーが出てしまいます

java.lang.RuntimeException: Cannot get the System Java Compiler. Please use a JDK, not a JRE.

これを解決するためには
eclipse/pleiades等/eclipse/eclipse.ini
を編集します。
readmeにeclipse.ini.originalというファイルがあるがそれではありません。

--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs


-vm
C:\Program Files (x86)\Java\jdk1.7.0_45_x86\bin\javaw.exe
(自分の環境に合わせてこれを加えます)

-vmargs
-Xverify:none
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Dosgi.requiredJavaVersion=1.7
-Xms1024m
-Xmx1024m

少しググれば解決策は見つかるのにreadmeのeclipse.ini.originalを弄っていました(ノ∀`)

GAEforJavaでjdconfigのエラーを治す

<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

となっているのを

<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd">

にします。

GAEforJavaでプロジェクトがデバックできなくなる

Usage: <dev-appserver> [options] <war directory>

というエラー・メッセージが出て、デバックできなりました。

対処法は
プロジェクトのpropertiesを開きます。
Run & Debug Settingを開きます。
設定を全て消し、okをクリックです。

tweepyでstreamingを使う

まず、filterを使ってみます

import sys
import tweepy
from tweepy.auth import OAuthHandler
from tweepy.api import API

class myExeption(Exception): pass

class StreamListener(tweepy.streaming.StreamListener):

	def __init__(self):
		#データベースに接続するときなどに使えます
                #↓これを忘れると動きません
		super(StreamListener,self).__init__()

	def __del__(self):
		#データベースを閉じることなどに使えます

	def on_status(self,status):
                
		text = status.text #本文
		date = status.created_at #ツイートされた日時(確かdatetime型)
        name = status.author.name #投稿者id名(unicode型、sqlite3で都合が良いので.encode("utf-8")とはしませんでした
		screen_name = status.author.screen_name #投稿者の名前
                img = status.author.profile_image_url #投稿者のプロファイル画像
"""
その他にもauthorはid,location,followers_count,status_count,description,friends_count,
profile_background_image_url,lang,time_zone,following.favorities_count
などを持っている
"""
		return True

	def on_error(self,status):
		print "can't get"

	def on_timeout(self):
		raise myExeption

def get_oauth():
    consumer_key =  ''
    consumer_secret =  ''
    access_key = ''
    access_secret  = ''
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    return auth

if __name__ == '__main__':
	auth = get_oauth()
	stream = tweepy.Stream(auth,StreamListener())
	while True :
		try:
			stream.filter(languages=['ja'],track=['yomiuri','sankei','nikkei'])
		except myExeption() :
                        #twitterに弾かれた場合は少し待って接続し直します
			time.sleep(60)
			stream = tweepy.Stream(auth,StreamListener())

twitterにアプリを登録してキーをもらうには
https://dev.twitter.com/apps

filterは1アカウントに一つしか使えないようです
もし、たくさんのワードで検索したいなら
import re
on_status(self,status)ないで
if re.search(u"hoge",status.text)!=None
とやってstatusの中身を切り分けていくと良いです

ユーザーストリームを使いたい場合は

if __name__ == '__main__':
    auth = get_oauth()

    stream = Stream(auth, StreamListener(), secure=True)


    stream.userstream()

とやれば良いです

初めてのPython 第3版

初めてのPython 第3版

入門 自然言語処理

入門 自然言語処理

パターン認識と機械学習 上

パターン認識と機械学習 上

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

統計的機械学習―生成モデルに基づくパターン認識 (Tokyo Tech Be‐TEXT)

統計的機械学習―生成モデルに基づくパターン認識 (Tokyo Tech Be‐TEXT)

Abstract Factory

概要

Abstract Factoryは関連するインスタンス群を整合性
もって生成するデザインパターン。例えば、車A、車Bを
作るときに、それぞれのタイヤ、ボディ、エンジンを
正しい組み合わせで整合性を持って組み立てなければならない。
このとき、プラグラマが部品をその時その時に組み合わせて
いたのでは間違いが生じてしまう。Factory Methodパターン
のCreateクラスのようなFactoryクラスを用いてまとめて
生成することで組み合わせを間違いなく整合性を持って
組み立てられる。
・Abstract Factoryクラス
AbstractProductを生成するメソッドのインターフェイスを定義する
・Abstract Productクラス
生成される部品のインターフェイスを定義する。
・Concrete Factoryクラス
Abstract Factoryクラスを実装し、Abstract Product
クラスのサブクラスを生成するメソッドを実装する。
・Concrete Productクラス
Abstract Productクラスを実装する。

Abstract Factoryの実現方法

/* Abstract Productクラス */
interface Tire{}
interface Body{}
interface Engine{}

/* Abstract Factoryクラス */
interface CarFactory{
  public Tire createTire();
  public Body createBody();
  public Engine createEngine();
}

/* Concrete Productクラス */
class TireA implements Tire{}
class TireB implements Tire{}
class BodyA implements Body{}
class BodyB implements Body{}
class EngineA implements Engine{}
class EngineB implements Engine{}

/* Concrete Factoryクラス */
class CarAFactory implements CarFactory{
  public Tire createTire(){
    return new TireA();
  }
  public Body createBody(){
    return new BodyA();
  }
  public Engine createEngine(){
    return new EngineA();
  }
}

/* Concrete Factoryクラス */
class CarBFactory implements CarFactory{
  public Tire createTire(){
    return new TireB();
  }
  public Body createBody(){
    return new BodyB();
  }
  public Engine createEngine(){
    return new EngineB();
  }
}

class Client{
  public void CarManufacturer(CarFactory factory){
    Tire tire = factory.createTire();
    Body body = factory.createBody();
    Engine engine = factory.createEngine();
  }
}

欠点

この例では新しい車を追加するのは容易だが新しい部品、
例えば、ハイブリッド用のバッテリーを搭載するように
するときは変更が容易ではない。