
Twitter連携としては「すれちがったー」さんが抜群のバランス感なのでアレですが、一応Twidroidを入れてあると連携してTweetも打てます。
ただ、、いかんせんHT-03A同士で実験をしていないので、、お互いうまく発見できるか分かりません。。が。ぜひ使えたら、また使えなかったりバグっていたら教えて下さい!
konpyuta:~/work/j2s asummer$ cat javaMain.javaおもいきりシームレス。
class javaMain {
public static void main(String[] args){
scalaConv objScala = new scalaConv(args[0]);
System.out.println(objScala.getResult());
System.out.println(objScala);
}
}
konpyuta:~/work/j2s asummer$ cat scalaConv.scala
class scalaConv(tmpStr:String){
val tmpPre = "xxx>";
def getResult = {
tmpPre + tmpStr;
}
override def toString = {
tmpPre + tmpStr;
}
}
konpyuta:~/work/j2s asummer$ javac javaMain.java
konpyuta:~/work/j2s asummer$ scalac scalaConv.scala
konpyuta:~/work/j2s asummer$ java -cp ~/work/scala/lib/scala-library.jar:. javaMain test
xxx>test
xxx>test
konpyuta:~/work/j2s asummer$
val tmpStr:String = '^'+args(0)+".*";というのが、一行で書けるScalaのRichStringは、やはり魅力です。
val objStr = tmpStr.r;
println(aryTmp.filter{w => {
w match {
case objStr() => { true;}
case _ => { false; }
}
}}(0));
println(aryTmp.filter{x => x.startsWith(args(0))});
特に意識せずに使う文字列型がコレ、というのはしかし、考えようによってはやり過ぎですが。。まぁLLと捉えればまったくありかと。import com.google.appengine.api.memcache._
class memcached {
val cache:MemcacheService = MemcacheServiceFactory.getMemcacheService();
def setValue(strKey:String,strValue:String) = {
cache.put(strKey,strValue);
}
def getValue(strKey:String):String = {
cache.get(strKey).asInstanceOf[String];
}
}
~snip~お分かりの方は是非コメントください。一部ではGAE/JをPythonで使うべきかJavaで使うべきか、から発展した大変な議論が巻き起こったようですが、私はのんびりとScalaでがんばります。
[scalac] D:\work\workspace\test\src\com\digipepper\memcached.scala:51: error:
type mismatch;
[scalac] found : String
[scalac] required: K
[scalac] cache.put(key, value);
[scalac] ^
~snip~
import java.util.Properties;エラー処理とかとても適当ですが、何かの参考に。
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
class sendmail(strFrom:String) {
var props:Properties = new Properties();
var session:Session = Session.getDefaultInstance(props, null);
def send(strTo:String, strSubject:String, strBody:String) {
try {
var msg:Message = new MimeMessage(session);
msg.setFrom(new InternetAddress(strFrom));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(strTo, "Mr. User"));
msg.setSubject(MimeUtility.encodeText(strSubject,"iso-2022-jp","B"));
msg.setText(strBody+"\n");
Transport.send(msg);
} catch {
case e:AddressException => printf("Exp_A(%s)\n", e.getMessage)
case e:MessagingException => printf("Exp_B(%s)\n", e.getMessage)
case e => e.printStackTrace
}
}
}
<lift:helloDB.tstForm form="post">SNIPPET:
<testBox:lines>Lines</testBox:lines>
<testBox:desc>To Do</testBox:desc>
<testBox:submit>submit</testBox:submit>
</lift:helloDB.tstForm>
def tstForm(argForm: NodeSeq) = {
// とりあえずモデルオブジェクトを作成(!)
val hellom = HelloModel.create;
// 入力を受け取り保存するかを判断
def checkAndSave(): Unit = hellom.validate match {
// S.noticeで に値を出力
case Nil => hellom.save ; S.notice("Added "+hellom.desc)
case xs => S.error(xs) ; S.mapSnippet("helloDB.tstForm", doForm)
// S.redirectTo("/")は不要
// →何にせよ最後にdoFormしているから(再描画される)
}
// テンプレートへバインドする関数
def doForm(argForm: NodeSeq) = {
bind("testBox", argForm,
//"lines" -> toShow.toString,
"lines" -> toShow, // toShowでXMLを返すようにするから
"desc" -> hellom.desc.toForm,
"submit" -> submit("SAVE", checkAndSave)); // ボタンもタグ必要
}
// バインド実行(上の関数を)
doForm(argForm);
}<lift:helloDB.tstForm form="post">SNIPPET:
<testBox:lines>Lines</testBox:lines>
<label for="desc">
<testBox:desc>To Do</testBox:desc>
</label>
<testBox:submit>submit</testBox:submit>
</lift:helloDB.tstForm>
def tstForm(argForm: NodeSeq): NodeSeq = {
val hellom = HelloModel.create;
bind("testBox",argForm,
"lines" -> toShow, // toShowでXMLを返すようにするから
"desc" -> SHtml.text(hellom.desc, hellom.desc(_)), // descカラムへ書込み
"submit" -> SHtml.submit("SAVE", hellom.save)
)
}via kwout
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import javax.imageio.ImageIO;
object Alarm2 {
var clockImage:Image = ImageIO.read(new File("clock.png"));
var alarmImage:Image = ImageIO.read(new File("alarm.png"));;
var icon:TrayIcon = new TrayIcon(clockImage);
var alarmTime:Date = new Date();
def main(args : Array[String]){
var tray:SystemTray = SystemTray.getSystemTray();
var menu:PopupMenu = new PopupMenu();
var item:MenuItem = new MenuItem("表示");
item.addActionListener(new ActionListener() {
def actionPerformed(event:ActionEvent):Unit = {
icon.displayMessage("Alarm", "メッセージ!", TrayIcon.MessageType.INFO);
println("message was displayed.");
}
});
menu.add(item);
item = new MenuItem("終了");
item.addActionListener(new ActionListener() {
def actionPerformed(event:ActionEvent):Unit = {
System.exit(0);
}
});
menu.add(item);
icon = new TrayIcon(clockImage, "アラーム", menu);
icon.setImage(alarmImage);
tray.add(icon);
}
}