Proxyの壁を超えろ!Beyond the Proxy!

Eclipseでソフトウェアをインストールするとき,
認証付きプロキシの設定方法です.

プロキシがSOCKSに対応していない場合,
Eclipseの設定でSOCKSの認証情報を
書かないようにしましょう.

試した環境:
Juno Service Release 2
Eclipse SDK(Version: 3.7.2)<プロキシありの場合>

1.Eclipseを開きます.
2.Window>Preferences>General>Network Connectionsを開きます.
3.
・プロキシ設定をコントロールパネルのインターネットオプションで
している場合

私の場合,Active ProviderをManualに設定しました.
Nativeだと,エラーになりました.

環境によってManualかNativeに設定してください.

・その他の場合,Manualに設定してください.

4.Proxy entriesの設定
・プロキシがSOCKSに対応していない場合

SOCKSの項目は書かないようにします.
それ以外の項目を埋めることができます.
ユーザ認証がある場合,認証情報をお忘れなく.

・プロキシがSOCKSに対応している場合

すべての項目を埋めることができます.
ユーザ認証がある場合,認証情報をお忘れなく.

5.OKを押します.<プロキシなしの場合>
1.〜2.まで同じです.
3.Active ProviderをDirectでOKです.
4.OKを押します.

お疲れ様でした.

参考:
http://d.hatena.ne.jp/sardine/20090626



iPhoneアプリ申請時,Version Mismatch - CFBundleVersionや,CFBundleShortVersionStringとはなんぞや.

iPhoneアプリを提出しようとするとき,
Validateを行う.
このときに,Version Mismatchのような
エラーがでた.

これを押し切ってWaiting for Reviewまで持って行くと
以下のようなメールが来る.

Dear developer,

We have discovered one or more issues with your recent delivery for "TweetSwan". Your delivery was successful, but you may wish to correct the following issues in your next delivery:

Version Mismatch - Neither CFBundleVersion ['5.2'] nor CFBundleShortVersionString ['5.2'] in the Info.plist match the version of the app set in iTunes Connect ['2.1'].
If you would like to update your binary for this app, you can reject this binary from the Binary Details page in iTunes Connect. Note that rejecting your binary will remove your app from the review queue and the review process will start over from the beginning when you resubmit your binary.

これは,AppleStoreに表示するために設定したバージョンが
iTunesConnectと,Xcode上(つまりinfo.plistのCFBundleShortVersionString)で異なる
という意味だ.

iTunesConnectには,リリース(AppStoreに表示する)用に
バージョンを記述する.
例)上のメールの場合,2.1に設定している.

info.plistには2つのバージョンを記述する.
・CFBundleVersionー開発用
・CFBundleShortVersionStringーリリース用
例)上のメールの場合,両方5.2に設定している.

このCFBundleShortVersionStringとiTunesConnectのバージョン番号が
一致すればOK

引用:

CFBundleVersion (String - iOS, OS X) specifies the build version number of the bundle, which identifies an iteration (released or unreleased) of the bundle.

CFBundleShortVersionString (String - iOS, OS X) specifies the release version number of the bundle, which identifies a released iteration of the app.


参照:
https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102364




Java SE 7のアップグレード手こずった人←

EclipseにてJava SE 7 のライブラリを使おうとしたとき,
Eclipseさんに知らせなければなりません.

[Mac]
ナビゲーションバーで.
eclipse>環境設定>左のナビゲーションで,Java▶>Installed JREs▶>
右の編集で,Add>Standard VM>Next>
JRE homeのDirectoryボタンを押して,Finderで探して
「/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home」を選択
JRE nameをJava SE 7に変えておくと便利
・Finishボタンを押す.
Java SE 6のチェックを外して,Java SE 7に変更

How to create automatically (Fake) DAO pattern class from a original class

Note:I would like to get your feedback

You can create automatically FAKE DAO(Data Access Object) pattern class
using this function:

def createDaoFromClassName(className:String):(String,String) = {
		val clazz = Class.forName(className)
		val packageName = clazz.getPackage().getName()
		val fieldNames = clazz.getDeclaredFields().map(_.getName())
		val fPara = clazz.getDeclaredFields().map{ e => e.getType().getName() match{
		  		case "java.lang.String" => "String"
		  		case "int" => "Int"
		  		case "long" => "Long"
		  		case "float" => "Float"
		  		case "double" => "Double"
		  		case "boolean" => "Boolean"
		  		case "char" => "Char"
		  		case "byte" => "Byte"
		  		case "short" => "Short"
			  	case "java.lang.Integer" => "Int"
			  	case "java.lang.Long" => "Long"
			  	case "java.lang.Double" => "Double"
			  	case "java.lang.Float" => "Float"
			  	case "java.lang.Boolean" => "Boolean"
			  	case "java.lang.Character" => "Char"
			  	case "java.lang.Byte" => "Byte"
			  	case "java.lang.Short" => "Short"
			  	case i => i
			  }
		}
		val point = className.lastIndexOf(".")
		val originClassName =  if (point != -1) {
			className.substring(point+1,className.length())
		 }else{
		   className
		 }
		val constructor = clazz.getConstructors()(0)
		val consts = constructor.getParameterTypes().map{ e => e.getName() match{
		  		case "java.lang.String" => "String"
		  		case "int" => "Int"
		  		case "long" => "Long"
		  		case "float" => "Float"
		  		case "double" => "Double"
		  		case "boolean" => "Boolean"
		  		case "char" => "Char"
		  		case "byte" => "Byte"
		  		case "short" => "Short"
			  	case "java.lang.Integer" => "Int"
			  	case "java.lang.Long" => "Long"
			  	case "java.lang.Double" => "Double"
			  	case "java.lang.Float" => "Float"
			  	case "java.lang.Boolean" => "Boolean"
			  	case "java.lang.Character" => "Char"
			  	case "java.lang.Byte" => "Byte"
			  	case "java.lang.Short" => "Short"
			  	case i => i
			  }
		}
		//consts.foreach(println)
		val header = """package dao
import queryprj.obms
import """+className+"""
				
class """+originClassName+"""Dao {
	val className = """"+originClassName+""""
}""" + "\n"
		val update = (fieldNames,fPara).zipped map{
		  (e,f) =>{
		    "\tdef update"+e+"(ID:Any,"+e+":"+f+") = {\n\t\tval obj:"+
		    originClassName+" = obms.getObject(className, ID)\n\t\tobj."+e+" = "+e+"\n\t}\n"
		  }
		}
		val mkConstArgWT = (consts,0 to consts.length).zipped map {
		  (arg,count) => "arg"+count+":"+arg
		}
		val mkConstArg = (consts,0 to consts.length).zipped map {
		  (arg,count) => "arg"+count
		}
		
		val middle = "trait "+originClassName+"DaoUpdator extends "+originClassName+"Dao{\n\n\tdef create"+originClassName+
		"(ID:Any,"+mkConstArgWT.mkString(",")+") = {\n\t\tobms.createObject(className, ID)("+mkConstArg.mkString(",")+")\n\t}\n\tdef delete"+
		originClassName+"(ID:Any) = {\n\t\tobms.deleteObject(className, ID)\n\t}\n"+
		update.mkString+"\n}\n"
		
		val footer = "trait "+originClassName+"DaoSelector extends "+originClassName+"Dao {\n\tdef getAll : List["+
		originClassName+"] =  {\n\t\tobms.getAllList(className)\n\t}\n\tdef getByName(ID:Any):"+
		originClassName+" = {\n\t\tobms.getObject(className, ID)\n\t}\n}\n"
		
		val result = header + middle + footer
		
		println(result)
		(originClassName+"Dao.scala",result)
	  }

For example,
one original Car class below:

package domainScala
import java.util.Date

class Car(n:Int,o:String,p:Long,q:Float,r:Double,s:Boolean,t:Char,u:Byte,v:Short,f:Party,g:Date){
  var number:Int = n
  var maxCarry:Float = _ 
  def run = println(this.toString + " runs.")
  override def toString = "Car Instance(number:" + number + ",maximum payload:" + maxCarry + "t)"
}

You can automatically create this Fake DAO pattern class:

package dao
import queryprj.obms
import domainScala.Car
				
class CarDao {
	val className = "Car"
}
trait CarDaoUpdator extends CarDao{

	def createCar(ID:Any,arg0:Int,arg1:String,arg2:Long,arg3:Float,arg4:Double,arg5:Boolean,arg6:Char,arg7:Byte,arg8:Short,arg9:domainScala.Party,arg10:java.util.Date) = {
		obms.createObject(className, ID)(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
	}
	def deleteCar(ID:Any) = {
		obms.deleteObject(className, ID)
	}
	def updatenumber(ID:Any,number:Int) = {
		val obj:Car = obms.getObject(className, ID)
		obj.number = number
	}
	def updatemaxCarry(ID:Any,maxCarry:Float) = {
		val obj:Car = obms.getObject(className, ID)
		obj.maxCarry = maxCarry
	}

}
trait CarDaoSelector extends CarDao {
	def getAll : List[Car] =  {
		obms.getAllList(className)
	}
	def getByName(ID:Any):Car = {
		obms.getObject(className, ID)
	}
}

Subject to the number of cunstructor arguments, how do I create new instance from class name?

Scala:

def instantiate(className:String)(args:Any*): AnyRef = {
	    val clazz = Class.forName(className)
		val constructor = clazz.getConstructors()(0)
		val constNum = constructor.getParameterTypes().length
		val workArgs:Array[AnyRef] = new Array(constNum)
		var count=0
		for(arg <- args if(count < workArgs.length)){
		  workArgs(count) = arg match{
		    case i:AnyRef => i
		    case i:Int => new java.lang.Integer(i)
		    case i:Long => new java.lang.Long(i)
		    case i:Float => new java.lang.Float(i)
		    case i:Double => new java.lang.Double(i)
		    case i:Boolean => new java.lang.Boolean(i)
		    case i:Char => new java.lang.Character(i)
		    case i:Byte => new java.lang.Byte(i)
		    case i:Short => new java.lang.Short(i)
		    case _ => arg.asInstanceOf[AnyRef]
		  }
		  count = count + 1
		}
		return constructor.newInstance(workArgs:_*).asInstanceOf[AnyRef]
	}

or

you can write recursion instead of for loop below:

private def instantiate(className:String)(args:Any*): AnyRef = {
    println(className)
	    val clazz = Class.forName(className)
		val constructor = clazz.getConstructors()(0)
		val constNum = clazz.getConstructors()(0).getParameterTypes().length
		val workArgs:Array[AnyRef] = new Array(constNum)
    
		def checkArg(count:Int) {
			if(count<workArgs.length&&count<args.length){
			  checkArg(count+1)
			  workArgs(count) = args(count) match{
			  	case i:AnyRef => i
			  	case i:Int => new java.lang.Integer(i)
			  	case i:Long => new java.lang.Long(i)
			  	case i:Float => new java.lang.Float(i)
			  	case i:Double => new java.lang.Double(i)
			  	case i:Boolean => new java.lang.Boolean(i)
			  	case i:Char => new java.lang.Character(i)
			  	case i:Byte => new java.lang.Byte(i)
			  	case i:Short => new java.lang.Short(i)
			  	case _ => args(count).asInstanceOf[AnyRef]
			  }
		  } 
		}
		
		checkArg(0)
		return constructor.newInstance(workArgs:_*).asInstanceOf[AnyRef]
	}

I would like to get your feedback

Scala: How do I create a new instance from class name?

def instantiate[T](className:String)(args:Any*): T = {
	    val clazz = Class.forName(className)
		val constructor = clazz.getConstructors()(0)
		val workArg:Array[AnyRef] = new Array(args.length)
		var i=0
		for(arg <- args){
		  workArg(i) = arg match{
		    case i:AnyRef => i
		    case i:Int => new java.lang.Integer(i)
		    case i:Long => new java.lang.Long(i)
		    case i:Float => new java.lang.Float(i)
		    case i:Double => new java.lang.Double(i)
		    case i:Boolean => new java.lang.Boolean(i)
		    case i:Char => new java.lang.Character(i)
		    case i:Byte => new java.lang.Byte(i)
		    case i:Short => new java.lang.Short(i)
		    case _ => arg.asInstanceOf[AnyRef]
		  }
		  i = i + 1
		}
		return constructor.newInstance(workArg:_*).asInstanceOf[T]
	}