2011-10-08

Java6のjrunscriptでshowdown.jsを使ってみる

MarkdownをJavaから使う方法を調べてみたら、showdown.jsをJava 6付属のRhinoで実行できるようなので、試してみた。

例えばC:\input.txtに以下のように書いておく。

Markdown *rocks*.

showdownのアーカイブをダウンロードして、コマンドプロンプト(Windowsの場合)でshowdown.jsのあるディレクトリに移動した後、以下の1行をコマンド入力する。

jrunscript -f showdown.js -e "print('\n'+new Showdown.converter().makeHtml(read('',true)));" < C:\input.txt

すると以下のHTMLが出力される。(1行目の>>はjrunscriptのプロンプト。2行目からがshowdown.jsの出力)

>>
<p>Markdown <em>rocks</em>.</p>

ちなみに、上記のやり方だと、入力するテキストの行数だけjrunscriptのプロンプトが1行目に出力されて何となく目に付く。標準入力(< C:\input.txt)ではなく普通に入力ファイル名と出力ファイル名を指定するやり方に変えれば解消するはず。

--
showdown.jsは、以下のGitHubからダウンロード可能:
coreyti-showdown - GitHub
https://github.com/coreyti/showdown

showdown.jsがサポートするMarkdown文法についての短く分かりやすい説明:
Showdown - Markdown in Javascript
http://pamgau.net/showdown/

Javaでshowdown.jsを使う方法は、以下の記事を参考にさせていただきました:
Markdown記法をJavaで扱いたい...Scripting for the Java と showdownを組み合わせる - Object Design
http://osima.jp/blog/showdown-on-java.html

2011-04-02

Google App Engineを触ってみて感じたこと色々

  • 以外と動く。cronの設定を誤って"1分に1回実行"と書いてしまった時、1時間の間に60回ツイートしてくれた。(その後、設定の修正とツイートの削除対応に追われた)
  • 管理画面にCPU利用時間の警告が敏感に表示されて、結構ビビる。特にSpin-up(インスタンスの起動)は重い処理なので、後で確実に警告表示される。
  • データストアの使い方が想像以上に難しい。仮に時間を掛けて自作アプリ用の最適な使い方を見つけ出したとして、その後にGoogle App Engine以外のプラットフォームに移植できるかというと、何とも。
  • 小さいアプリなら、データストアへのアクセスは低レベルAPIでいいんじゃない? と思った。GoogleのチュートリアルはJDOの例だけ紹介しているのだが、ちょっと調べればサンプルコードは沢山あるので、データストア独特の仕組みを学習するハメになることを考えれば、最初から低レベルAPIで良いんじゃないかと。
  • 一度WebアプリをGoogle App Engineに載せると、(昔ながらのHTMLベースのアプリなら)パソコンが無くても古い携帯電話から利用できるわけで、これは便利だと思った。今、BOT用のテキストデータは、自分の古い携帯電話から自作の管理ページを介して登録している。こういうのは、今までアイデアはあっても簡単に出来る(なおかつ続けられる)ことじゃなかったので、非常に便利だと感じている。

Google App EngineにTwitter BOTを載せる

3時間に1回、ランダムなテキストをツイートする単純なBOTを作ってみた(@raulnylmsという名前で公開、2015年時点で削除済み)。
Twitterへのアクセスが必要な部分は、Twitter4Jのおかげで簡単に作れた。これはすごい便利だった。
「1時間に1回ツイートする」スケジューリングは、Google App Engineが提供するcronを使って、こちらも簡単に実現できた。設定ファイルに"every 1 hours"とか書けば済んだ。
問題はGoogle App Engineのデータストア(Bigtable)で、ファイルの読み書きとも従来のデータベースアクセスとも勝手が違うので、かなり戸惑った。あと、Java版だと、データを一度に大量アップロードする機能は付いてない...。まあ、今回はGoogle App EngineのFAQページに載ってたサンプルコードを参考に、アップロード機能を自作して済ませた。

2011-01-04

CASL IIシミュレータ作成時に使おうとして諦めたJava APIいろいろ

java.nio.ByteBuffer。アセンブラが出力するオブジェクトファイルの読み書きに使おうとしたのだけれど、単純な1入力1出力の処理だったので、昔ながらのjava.io.DataInputStream/DataOutputStreamで事足りてしまった。Enumに並んで完璧主義が光るクラスではある。
java.io.Console。あるいはjava.lang.System.console()。名前通りコマンドライン入出力に便利な機能が揃っているのだが、今回は単純なテキスト出力処理がほとんどだったので、使う機会がなかった。
java.util.Scanner。DeveloperWorksの記事で紹介されているように、数値と文字が記述されたテキストの読み込みは、これで大体まかなえるはずなのだが...。CASL IIの仕様を読んでみると、数値やコメントの扱いに独特の解釈があって、結局、構文解析処理は全部自作した。

CASL II アセンブラとシミュレータを公開

CASL IIは、情報処理技術者試験のアセンブラ言語です。
今回、CASL IIのアセンブラとシミュレータを作って公開しました。
配布ファイルは、アセンブラとシミュレータに加えて、逆アセンブラとデバッガが付いています。
また、ソースファイルとオブジェクトファイルフォーマット仕様書も付いているので、これから CASL II のアセンブラやシミュレータを作ろうという方の参考になると幸いです。
配布ページ(2015-12-12: 3年以上更新が無いため、配布停止しました)
https://sites.google.com/site/syjiroji/home/jxvx