とりあえず雑記帳(跡地)内検索 / 「その1の目標」で検索した結果
-
Slim3/とりあえずSlim3アプリケーションを作ろう
...コンテンツ その1 その1の目標 何はともあれ、プロジェクト作成 Modelを作る Daoが現れたよ Controllerで画面作成 発展編 -
Slim3/とりあえずSlim3アプリケーションを作ろう/その1の目標
まずは、単純な一覧表示と更新から… 本(Book)の新規登録/修正/削除と、登録した本の一覧表示を行います(いわゆるマスタメンテナンス)。 一覧画面では、登録した本を一覧表示します。 一覧画面から、新規登録を選択すると、新規モードで詳細画面を呼び出すことができます。詳細画面で、登録する本の情報を入力して更新を実行すると、本が登録され、一覧画面に戻ります。 一覧画面で本を照会選択すると、選択した本の照会モードで詳細画面を呼び出すことができます。詳細画面では、選択した本の情報が照会できます。 一覧画面で本を修正選択すると、選択した本の修正モードで詳細画面を呼び出すことができます。詳細画面で、選択した本の情報を修正して更新を実行すると、本の情報が修正され、一覧画面に戻ります。 一覧画面で本を削除選択すると、選択した本の削除モードで詳細画面を呼び出すことができます。詳細画面で、選択した本の情報を確... -
Facebook/Facebookアプリを作成する
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… ここでは、「Facebook.com上のアプリ(Apps on Facebook)」を取り扱います。 要するに、mixiアプリのFacebook版です。 参考サイト 公式サイト プロジェクトマネジメント10.0:ITmedia オルタナティブ・ブログ Facebookアプリのページ構成の解説 自前のサーバにアプリを配備 結局、Apps on Facebookは、外部サーバに配備したアプリをFacebook上に埋め込む感じ? ということで、まずは、動かしたいアプリを作って、自前で用意したサーバに配備しましょう。 こんなとき、GAEが便利 とりあえず、GA... -
Google App Engine/キャッシュの計画
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 概要 Datastoreの主要なQuotaである「Datastore Read Operations」と「Datastore Small Operations」を節約するために、どのようにMemcacheを活用すればよいか、についての考察です。 月並みな話から まずは、キャッシュの計画については「これが正解だ」というのはありません それがあれば、既にフレームワークとして提供されています… ということで、対象となるWebアプリケーションの特性に応じた、「最適解」としてのキャッシュの計画を考える必要があります。 アクセスされるデータの偏り方 データの更新... -
とりあえずインターフェース入門/じゃあオブジェクト指向ならどうする?
目標 ということで、今回の目標として先に挙げた問題点の逆 プログラムの必要最低限の知識で 既に動いている部分には手を加えずに 機能を拡張することを、インターフェースを活用して実現してみましょう。 拡張したい対象をインターフェースとして定義 今回、拡張したい対象は「演算」です。ということで、今回のプログラムが「演算」に求める機能を インターフェースとして定義します。 package jp.fujiyan.binaryoperation3; /** * 二項演算です。 * * @author Fujiyan */ public interface IBinaryOperator { /** * 選択時の表示に用いる文字列を返します。 * * @return 文字列 */ Str... -
とりあえずインターフェース入門
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 目標 オブジェクト指向的技法を用いないプログラムから、用いたプログラムへのリファクタリングを通して、 インターフェース(interface)の活用法とフレームワーク(framework)の概念をお伝えします。 対象 インターフェースの使い道がピンとこない方 インターフェースと抽象クラス(abstract class)の使い分けがピンとこない方 オブジェクト指向の何がウレシイのかピンとこない方 コンテンツ オブジェクト指向プログラミング心得 サンプル~二項演算 古典だって重要 じゃあ何が問題? じゃあオブジェクト指向ならどうする? では試してみましょう ようやくクラ... -
Google App Engine
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト 公式サイト(Java) Slim3 Slim3へ appcfg My Applicationsに作成した、GAEアプリケーションの管理を行うコマンドラインツールです。 Google Plugin for Eclipseの場合、SDKがplugins/com.google.appengine.eclipse.sdkbundle_x.x.x.../appengine-java-sdk-x.x.xに存在するので、そのbinフォルダ内にappcfg.cmdがあります。 通常は、環境変数GAE_HOMEに上記のplugins/com.google.a... -
JavaScript/Functionオブジェクトあれこれ
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… JavaScriptでは関数もオブジェクト(Functionオブジェクト) functionステートメント 通常、JavaScriptで関数を定義する場合に用いる。 あまり、Functionオブジェクトとかは意識してないかと思います。意識しなくても良い関数の定義方法。 // 定義 function foo() { alert("test"); } // 呼び出し foo(); function演算子とfunction式 function演... -
Slim3/文字列の部分一致検索とページング
Slim3で部分一致検索(Like検索)を頑張ってみる (2012/06/19追記) 検索結果のキャッシュのことを考えたら、本ページのような小細工をせずに、おとなしく結果全件をListで取得したほうが良い気がしてきました…。 検索結果の件数が大きい場合を想定して、Listで取得するのを控えていたのですが、そもそも、そんな検索を許さないようにしたほうが健全ですしね…。 Datastoreでの文字列検索 GAEのDatastoreでは、Entityの検索方法として、プロパティの文字列の前方一致をネイティブでサポートしている。 よって、Slim3でも基本は文字列の前方一致となる。 package jp.fujiyan.gae.datastoretest; import java.text.DecimalFormat; import java.util.List; ... -
Struts 2
とりあえず、Struts 2.3.8現在の内容です。 環境構築 まずは最小構成を目指すjarファイル Actionクラスパッケージ クラス メソッドと戻り値 JSPファイル web.xmlファイル struts.xmlファイル まとめ Root namespaceとDefault namespace Dynamic Method Invocationの罠 Config Browser Plugin Actionクラスのメソッド毎にActionを割り当てたい 環境構築 ダウンロードはここから Apache Struts Releases "best available"と付記しているリンク先のファイルをダウンロードします。 パッケージングの種類によって、いくつかのファイルがあります。 "Full Distribution"... -
Slim3/とりあえずSlim3アプリケーションを作ろう/Daoが現れたよ
Daoの出現 [gen-model-with-dao]targetでModelを作成すると、[Root Package]直下に"dao"というサブパッケージが作成され、その中に[作成したModel名]Daoというクラスが自動生成されます。BookDaoの場合 package jp.fujiyan.booklist.dao; import org.slim3.datastore.DaoBase; import jp.fujiyan.booklist.model.Book; public class BookDao extends DaoBase Book { } 一見すると、何にもなさそうですが、スーパークラスであるDaoBaseに、Datastoreでの操作に必要なメソッドが一通... -
Slim3/Slim3でGWT
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… Eclipse環境設定 Slim3に記載している内容と同じ プロジェクト作成 基本的に、公式サイトのGetting Started with GWTの通りに行う。だいたい以下の通り。 ダウンロードしたzipを解凍する。 解凍して作成されたフォルダ"slim3-blank"を、Eclipseのワークスペースにインポートする。 インポートしたプロジェクトの名前を、Refactorで変更する。 プロジェクトのコンテキストメニュー→[Properties]→[Resource]の[Text file encoding]をUTF-8にして、デフォルトのファイル... -
プラグイン/ニュース
ニュース @wikiのwikiモードでは #news(興味のある単語) と入力することで、あるキーワードに関連するニュース一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_174_ja.html たとえば、#news(wiki)と入力すると以下のように表示されます。 【グランサガ】リセマラ当たりランキング - グランサガ攻略wiki - Gamerch(ゲーマチ) 【まおりゅう】八星之紋章交換のおすすめ交換キャラ - AppMedia(アップメディア) Among Us攻略Wiki【アマングアス・アモングアス】 - Gamerch(ゲーマチ) マニュアル作成に便利な「画像編集」機能を提供開始! - ナレッジ共有・社内wikiツール「NotePM」:時事ドットコム - 時事通信 マニ... -
Slim3/とりあえずSlim3アプリケーションを作ろう/Modelを作る
Modelとはなんそや Slim3における「Model」とは、Datastoreに永続化する対象となるクラスです。今回のアプリでは、(さしあたり)BookクラスとAuthorクラスに当たります。 或いは、DatastoreのEntityをタイプセーフにしたものです。 Model作成 プロジェクトのルートにある、build.xmlをダブルクリックしてエディタに表示します。 エディタ本体はまぁ無視して、Outlineビューに注目。表示していなければ、メニューの[Window]-[Show View]-[Outline]で表示しましょう。 Outlineビューから[gen-model-with-dao]targetを選択して右クリック。コンテキストメニューの[Run As]-[Ant Build]を選択します。「with-dao」とあるように、このtargetはModelと一緒に、そのMo... -
とりあえずインターフェース入門/オブジェクト指向プログラミング心得
まず初めに、僕が日頃から感じていることをツラツラと書いてみます…。 なお、あえて極論を並べているので、いろいろとツッコミどころはあると思いますが(汗 一つ、オブジェクト指向以前のプログラミング手法も重要だ オブジェクト指向プログラミングのスタイルと、それ以前のプログラミングスタイルを別物と考えてしまう方も時々いますが、 クラス内部でのメソッド分割やメソッド内の処理記述については、構造化手法等で培われた知見を十分に生かす必要があります。 その上で、クラス間での責務の配分等について、オブジェクト指向独自のノウハウが追加される雰囲気です。 つまり、プログラミング自体の経験が浅い方は、先達の意見に耳を傾け、また過去のプログラミング言語の経験が豊富で、 これからオブジェクト指向言語を学ぼうとする方は、過去の経験は全然無駄にならないので自信をもってください。 一つ、オブジ... -
Slim3/とりあえずSlim3アプリケーションを作ろう/蔵書一覧アプリケーション
サンプルアプリの概要 今回は、自身の蔵書一覧を作成し、それを一般公開するという、イマイチ利用目的のわからないアプリをサンプルにします。 アプリのイメージ 管理画面が存在し、そこで蔵書に関する情報の改廃(登録/変更/削除)を行います。管理画面が使えるのは、自分自身のみで、一般の人は利用できません。 一覧画面が存在し、蔵書の一覧が表示されます。一覧画面には、自分自身以外の、一般の人も利用できます。 モデリング ドメインクラスとして、本(Book)と著者(Author)を定義します。 本(Book) 本にはタイトル(title)が付けられます。 著者(Author) 著者には人名(name)があります。 本の冊数は、本アプリの対象外とします。同じ本が複数あっても知りません…。 関連 1冊の本には、複数の著者が存在する場合があります。 1人の著者は、複数の本を執筆する場合があります。 ... -
WebコミックLibraryについて
大体、本Wikiで紹介している内容で作成しています。 むしろ、作りながらわかったことをwikiに反映したりしてます… データの更新は、毎日定時に、cronでクローラーを起動させています。 正確には、各サイト毎に作成したクローラーをTask Queueに突っ込む処理を、cronで起動させています。実際のクローリングは、それぞれのTaskで実施されます。さらに言えば、サイト内の作品単位でクローリングを分割しています。 とあるサイト/作品のクローリングで例外発生しても、その他のサイト/作品のクローリングは影響なく実行完了できるようにするためです。 あと、作品毎にクローリングを分割して、Task Queueの設定でTaskの処理間隔をある程度間をあけることで、クローリング先のサイトの負荷を分散させます(させてるつもり…)。 Memcacheとか使ってないし、プログラムの最適化とかも考え... -
Slim3
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト 公式サイト 公式サイト(Google Code) ダウンロードはコチラから ひがやすをblog 開発者ひがやすをさんのブログ 環境構築とプロジェクト作成 Slim3でGWT とりあえずSlim3アプリケーションを作ろう Controller作成 基本的に、リクエストを受け取るアクション1つに対して1つのControllerを割り当てるControllerは、slim3.rootPackageの直下にcontrollerという名前のパッケージを作成し、その下にXxxxControllerという名前で作成する。build.xmlにあるgen-con... -
OpenSocial
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト 公式サイト OSDE公式サイト 環境構築 OSDEをEclipseにインストールする Installation Guideを参照 基本的にインストール後、デフォルトの状態で良いはず サンプルデータベースの作成 OpenSocialアプリケーション実行にはPeopleが必要なので、とりあえずサンプルデータベースを作ることで、自分で作る手間を省く。 Create people to Shindig database as sample dataを参照 作る前にShindigを起動しておくこと。 OpenSocialでGWT 参考 Buildin... -
Slim3/とりあえずSlim3アプリケーションを作ろう/Controllerで画面作成
Controllerとはなんぞや Controllerは、「Slim3としては」URLに関連付けられたアクションであり、ブラウザ等からそのURLでリクエストが送られた際に実行されます。通常は、Controllerで処理が実行された後、その結果をjspで出力します。 ということで、Controllerを作成する際には、通常はControllerクラスとjspのセットで作成します。 「Slim3としては」という但し書きをしましたが、一般論としてのControllerの役割も勿論あります(そのうち説明の予定)。 URLのパス階層と、Controllerのサブパッケージ階層が対応するように作成します。クラス名は、URLのパス階層の末尾(先頭は大文字)+Controllerとします。 URLのパス階層の末尾がスラッシュで終わる場合は、IndexControllerとします。 [Root Packag... -
JavaScript/JavaScriptでクラスもどき
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… Functionオブジェクトあれこれの内容を総動員して、クラスっぽいことが実現できます。 クラスもどき 下記のようなJavaベースの擬似コードで表現されたクラスを仮定します。 class Foo { var propertyA; Foo(str) { this.propertyA = str; } void methodA(mark) { alert(mark + this.propertyA + m... -
Android
(作成中) WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト 公式サイト Androidで動く携帯Javaアプリ作成入門 Tech Booster 逆引きAndroid入門 ActivityとView 参考 Android Developers 世界を目指せ!Androidアプリ開発入門 Activityは、画面を表す。 ViewはUIを構成する部品。ActivityにViewを設定することで、画面を構築する。 Viewの構成方法は2つ(静的)レイアウトXMLを記述してコンパイルしたものを設定。お手軽。通常はこっち (動的)Viewオブジェクトを適宜生成して設定。前もって作成する... -
Subversion
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… バージョン1.6.17(Windows版) 前提 リポジトリparentとなるフォルダを決め、その下に複数のリポジトリを格納します 全リポジトリに対する認証を、同一パスワードファイルで管理します ダウンロード Apache Subversionからダウンロード左のメニューの[Getting Subversion]-[Binary Packages]を選択、[Windows]以下のいずれかからダウンロード 正式バイナリはCollabNet版だが、アカウント登録が必要。 筆者はWin32Svnを利用しています。 インストール(Win32Svn) ダウンロードしたSet... -
GWT
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 参考サイト GWTの本家 Google Web Toolkit - Google Code 日本語ページは更新が遅いので、英語ページが良い GWTについては、とりあえずここを見てみよう Google Web Toolkit (GWT) 入門 構成要素 Module Organizing Projects - Google Web Toolkit - Google Code GWTアプリケーションの構成単位。GWTアプリケーション=1つ以上のModuleの集まり。1アプリケーションを1つのModuleで表すのも可能だけど、それだとModule定義が肥大化す... -
とりあえずインターフェース入門/では試してみましょう
演算を追加してみるパート2 それでは同様に、新しい演算「累乗」を追加してみましょう。 累乗 package jp.fujiyan.binaryoperation3.operator; import jp.fujiyan.binaryoperation3.IBinaryOperator; /** * 累乗です。 * * @author Fujiyan */ public class Power implements IBinaryOperator { private String expression; private String result; public String getChoiseString() { return "累乗"; } ... -
Slim3/環境構築とプロジェクト作成
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… Eclipse 4.2(Juno) + JDK 7 + JDK 6 + Slim3 1.0.16 (2012/07/21) 流石に、今時はJDK 7を用いることも多いかと思いますが、GAE/JはJDK 6でビルドする必要があります。 Eclipse 4.2もリリースされ、Slim3も久々に更新されましたし、JDK 7をEclipseのランタイムとしつつ、GAE/Jのビルド用にJDK 6を用いる設定をご紹介。 ※たまに、実行時に、指定したプロジェクトとは異なるプロジェクトが実行されることもありますが、Eclipseを再起動すれば大丈夫なようです。 手順 ... -
とりあえずインターフェース入門/古典だって重要
オブジェクト指向的技法を用いないプログラム まずは、オブジェクト指向的技法を用いないスタイルで組まれた、二項演算プログラムです。 自分で定義したメンバが全てstaticなところが、オブジェクト指向的要素の無い、ある意味「古典的な」スタイルとなっています。 /* * オブジェクト指向でない版 */ package jp.fujiyan.binaryoperation1; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStreamReader; /** * 二項演算です。 * * @author fujiyan */ public class BinaryOperation... -
とりあえずインターフェース入門/じゃあ何が問題?
演算を追加してみる 先に作成したプログラムに、新しい演算「累乗」を追加してみましょう。 /* * オブジェクト指向でない版 * 累乗を追加 */ package jp.fujiyan.binaryoperation2; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStreamReader; /** * 二項演算です。 * * @author fujiyan */ public class BinaryOperation { // 入力値の最小 private static final int MIN_VALUE = -99999; // 入力値の最大 pri... -
とりあえずインターフェース入門/そしてフレームワークへ
1箇所たりとも修正したくない 先のBinaryOperationは、少ないとはいえ、やはり修正している事実に変わりはありません。 「修正せずに拡張する」の精神にのっとり、さらに工夫をしてみましょう。 演算の追加を、BinaryOperation自身で行わずに、外部から演算オブジェクトを 追加するように変更することで、BinaryOperationの本質的な部分は一切変更せずに拡張できるようにします。 package jp.fujiyan.binaryoperation5; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arr... - @wiki全体から「その1の目標」で調べる