unlimited text works, the 3rd.
my portal, hub, information assemble site (beta version)

Asaph メモ

2010/03/15 tags: , ,

なかなか面白いWebアプリではある。

一覧

ファーストインプレッション

タグが持てれば… 号(┳Д┳)泣 *01 

via MOONGIFT: » Tumblrライクにクリッピングするクリッピングマイクロブログ「Asaph」:オープンソースを毎日紹介

イメージ・引用・リンクのみの投稿と非常にシンプルだが、JavaScriptを上手く利用しており、必要最小限の機能しか提供していない事に、物凄く好感が持てる。
例えば、テーブルが2個しかない。嘘みたいだが。
投稿を保存するasaph_postsとユーザ情報を格納するasaph_usersのみ。 *02 
なので、別途タグ用のテーブルを追加すれば、もしかしたらもしかするんじゃないかと思う…結構当たりがデカいけど…
幸か不幸か、本家のリリースも1年以上止まっているので、Forkさせて…と言うか、今後アップデートしない、という方針で、タグを追加するのもアリかなと思えてきた。

投稿の方法も最初一瞬は何をやれば良いのか面食らうが、慣れるとサクサク投稿できるし、管理画面もシンプル。一覧ページのみで投稿毎の個別ページが無いのでシンプル、故にCSSもシンプル。実にシンプル。これ以上無いという位にシンプル。シンプルマンセーと叫びたくなるし、投稿のブックマークレットは、こんな事できるんだと感心した。 *03 
但し、果たしてモラル的にコレが良いのかどうかは、また別問題だが。
例えば、Webに星の数以上に存在するイメージファイルを直接、ローカルの鯖にコピーできる機能って、実装自体はそれ程難しくは無いと思うけど、他のアプリだと機能として存在しなかったり遠慮がちな機能だったりするのだが、このツールにおいては、これを利用しないと投稿できず…逆にローカルPCからのアップロードできないと言う凄まじさ。

別途Scuttleを使って思ったのだが、これからのオープンソースのWebアプリにも、クライアントサイドで動くツール、多分それはJavaScriptと本体スクリプトを連動させる仕組みのブックマークレットになると思うが、そういうのが存在しないといけないんだなぁと思った。
また、処理内容が直線的で必要最低限のお便利機能しか実装していないので、コード解析のターゲットには良いのではないかと思う。そういう面では、個人的ニーズの高いタグの実装というのもアリかなぁと思っている。

2010/02/11

でまぁ。

すくしょ01

現状非公開だが。
デフォルトの状態から、この程度にまでは数十分でカスタマイズできた。 *04 
修正点は、$ASAPH/lib/asaph_config.class.php の

public static $images = array
  'imagePath' => 'data/images/',
  'thumbPath' => 'data/thumbs/',
  'thumbWidth' =>  128, // 256,
  'thumbHeight' => 128, // 192,
  'jpegQuality' => 100, //  80,
);

周辺で、必要ならばイメージサイズを変更し *05 、実際のCSSである $ASAPH/templates/whiteout/whiteout.css あたり。CSSが100行程度なので、非常に見通しが楽だった。

気になるのは、イメージでは分かりにくいが、引用の投稿(左一番上)において、引用文が長いと切れる点、および、引用元のリンク先が表示されない点か。
最初の引用文が切れるのは、例えば、deviantARTの文章投稿だとカーソルを合わせるとスクロールする、みたいなユーザインタフェースだが、そういうのも可能かもしれないが実装方法不明。
次のリンク元が表示されないのは、テンプレートを弄れば何とかなるんじゃないかと思うがさてどうか。
ちなみに、イメージのキャプションは、Aタグのtitle属性に持たせているため、ツールチップになっている。
各投稿の下にある文字列は、ドメイン名と言うか何と言うか。

すくしょ02

上記はイメージを拡大した時の状態。
イメージの枠を消したつもりなのだが、CSSを見る限りでは問題無さそうな気がするが、何故かイメージの下の枠が消えていない。 *06 
$ASAPH/templates/whiteout/whitebox.jsにまで潜ってみないと原因は分からないかも。

すくしょ0301

すくしょ0302

投稿時のアクション。
まずブックマークレットを起動して…この段階でイメージには水色は線の枠が付加される。スゲー
次に対象となるイメージをクリックすると、各種情報を設定するためのダイアログに変わる。 *07 
引用・リンクも似た様なカンジ。引用の場合だと他のWebサービス(ex. Tumblr)同様、引用したい部分を選択した上でブックマークレットを起動する。

この辺は、本家のビデオ見れば分かるけど。

Asaph Microblogging from Dominic Szablewski on Vimeo.

うーん、オープンソースをプロモートするためには、こういったビデオも必要なんだなーと。確かに訴求力はあるしねぇ。

すくしょ0401

上記は管理画面。

すくしょ0401

すくしょ0403

上がイメージ、下が引用(リンクも同様) *08 

こうやって画面遷移を拾っていくと、「タグを追加する」という作業のアタリのデカさを痛感する…
まずは内部構造に慣れるために、例えば、検索ボックスを追加するとか(JavaScriptではなく)、もう少し簡単な作業の方がよろしいのではないかと思えてきた。

2010/02/12

デフォルトのテーマ

$ASAPH/lib/asaph_config.class.php を書き換える事でテーマを切り替える。
切り替えるための画面? 無くても構わないと思うけどどうか?

class Asaph_Config {
  :
  // Templates
  public static $templates = array(
    'posts' => 'templates/whiteout/posts.html.php',
    'about' => 'templates/whiteout/about.html.php',
    'feed' => 'templates/rss.xml.php'
  );
  :

つまり、$ASAPH/whiteout/・$ASAPH/stickney/ が該当する。
あまりpostsとaboutを分ける必然性を感じないが…多分独自に何か画面を追加する場合の参考にはなるかと思う。
例えば、以下は $ASAPH/index.php より。

  :
// about page
if( !empty($params[0]) && $params[0] == 'about' ) {
  include( ASAPH_PATH.Asaph_Config::$templates['about'] );
}
// feed
else if( !empty($params[0]) && $params[0] == 'feed' ) {
  $asaph = new Asaph( Asaph_Config::$postsPerPage );
  $posts = $asaph->getPosts( 0 );
  include( ASAPH_PATH.Asaph_Config::$templates['feed'] );
}
// blog
else {
  $page = !empty($params[1]) ? $params[1]-1 : 0;
  $asaph = new Asaph( Asaph_Config::$postsPerPage );
  $posts = $asaph->getPosts( $page );
  $pages = $asaph->getPages();
  include( ASAPH_PATH.Asaph_Config::$templates['posts'] );
}

何となく分かった気になりませんかね?
実際、URLは、
http://hoge.com/asaph/about
http://hoge.com/asaph/feed
みたいな。
多分、タグクラウドを追加するとしたら、こんなカンジで追加するとか?

  :
else if( !empty($params[0]) && $params[0] == 'tagcloud' ) {
  $asaph = new Asaph( Asaph_Config::$postsPerPage );
  $posts = $asaph->getTagCloud( 0 );
  include( ASAPH_PATH.Asaph_Config::$templates['tagcloud'] );
}
  :

で、$ASAPH/stickney/about.html.php をコピーして、tagcloud.html.php をゴリゴリ書いていく、みたいな。 getTagCloudメソッドに関しては、まぁ、どうにかなるんじゃないか?

$ASAPH/whiteout/
すくしょ0502

$ASAPH/stickney/
すくしょ0501

これ、何となくだが、イメージを主体とする場合はwhiteout、文字を主体とする場合はstickneyがよろしいんだろうね。
特に、whiteoutの場合、文字列長によっては切れるので。

2010/02/28

Tumblrにみる引数の概要

何だろ、何か良く分からんけど、潜ってタグの機能を追加している。
取り敢えず、insert/update/delete の機能は追加した。ここまで実質1日程度か。
このうち、updateに関しては、一律 delete/insert なので、将来に遺恨を残しそうな気がしなくも無いが… *09 

define('ASAPH_TABLE_POSTS', Asaph_Config::$db['prefix'].'posts');
define('ASAPH_TABLE_TAGS', Asaph_Config::$db['prefix'].'tags');
'CREATE TABLE `'.ASAPH_TABLE_TAGS.'` (
  `id` int(11) NOT NULL auto_increment,
  `postsId` int(11) NOT NULL,
  `name` varchar(128) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM CHARSET=utf8',

…を追加。当然、$ASAPH/admin/install.php に追加。
で。
既存の ASAPH_TABLE_POSTS との絡みであるが…

'CREATE TABLE `'.ASAPH_TABLE_POSTS.'` (
  `id` int(11) NOT NULL auto_increment,
  `userId` int(11) NOT NULL,
  `hash` char(32) NOT NULL,
  `created` datetime NOT NULL,
  `source` varchar(255) NOT NULL,
  `thumb` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL,
  `title` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM CHARSET=utf8',

うーん、これだけの情報から、タグ名によるリクエストがあった場合、どうやってSQLを投げたら良いのだろうかと…
と言うのも、投稿可能ユーザが複数人なので、上記タグ名テーブルで引っかかったpostIdをサブクエリ/インラインビューとして、投稿テーブルをselectする、みたいになるのか…

この先、通常の画面から、及び、管理者画面からタグによるリクエストを受け付ける様にできる改修を行なうのだが、引数の持たせ方を整理したいと思い、例えばTumblr *10 の場合を見てみたいと思う。マトリックスにできれば格好良いのだろうけど…

基本形。
http://kerberos-tm.tumblr.com/
基本形(モバイル)。
http://kerberos-tm.tumblr.com/mobile
基本形(フィード)。
http://kerberos-tm.tumblr.com/rss
基本形(アーカイブ(月別一覧))。
http://kerberos-tm.tumblr.com/archive
基本形(ランダム)。
http://kerberos-tm.tumblr.com/random
…は、何処かに飛ぶと思う。
尚、”Mobile“・”Rss等、不可。
基本形(タグ)。
http://kerberos-tm.tumblr.com/tagged/deviantART
大文字小文字の区別は行なっていないんじゃ無いかと。
http://kerberos-tm.tumblr.com/tagged/deviantart
但し、モバイル・フィード同様、”Tagged/deviantart“はダメ。
因みに、”mobile“というタグ名は持てないが、”Mobile“は持てる。
基本形(モバイル+タグ)。
http://kerberos-tm.tumblr.com/tagged/deviantART/mobile
基本形(モバイル+フィード)。
http://kerberos-tm.tumblr.com/tagged/deviantART/rss

ページが絡んできた場合。
http://kerberos-tm.tumblr.com/page/2
http://kerberos-tm.tumblr.com/mobile/page/2
http://kerberos-tm.tumblr.com/page/2/rss
http://kerberos-tm.tumblr.com/tagged/deviantART/page/2
http://kerberos-tm.tumblr.com/tagged/deviantART/page/2/mobile
http://kerberos-tm.tumblr.com/tagged/deviantART/page/2/rss
モバイル+タグの場合、/mobile/tagged/deviantART/page/2 というガイドが表示されるがこれはアウト。

…何のハナシだったっけ? ああそうか、Asaphで無理矢理タグを持たせるハナシだった。
現状、Asaphでのページの持たせ方は、
http://hoge.com/asaph/page/2
…となっているので、Tumblrと同様に処理を行なえば良いのだろうかと。
例えば、
http://hoge.com/asaph/tagged/FOO
http://hoge.com/asaph/tagged/FOO/page/2
みたいに。なんだが、taggedとpageを逆にした
http://hoge.com/asaph/page/2/tagged/FOO
までは、実装するかどうか不明。実装も何も、大した事は無いのだが。
また、フィードに関しては、
http://hoge.com/asaph/feed
であるが、
http://hoge.com/asaph/page/2/feed
に関しては実装されていない。(単に2ページ目が表示される。)

で、今回潜ってソースを弄ったりしての感想を。

  1. モダンな開発環境が必要だぉ。
    相変わらず昔ながらのテキストエディタでゴリゴリとコーディングしているのだが、クラスが絡んでくるので、どのファイルにどのクラスがあるのか把握するのに時間がかかった。
    とは言え、PDTをインストールして…と言うのも個人的にはメンドウだなーと思っている…
  2. 構造把握に時間がかかったぉ。
    いや別にAsaphだからという訳では無いと思うが。
    特に自分はJavaScriptが壊滅的に分からないので…
    上記との絡みもあるが、「ここで一旦止まってくれれば…」と思う事もしばしば。
    そういう面から見て、PHPフレームワークと言うのもアリかなーとも思わなくも。
    なんだけど、今後、Ruby or Pythonあたりを考えていなくも無いが…
  3. 実は使い方を考えていないぉ。
    WordPress経由で、とは考えているが *11 、どの様な情報を投稿するかは固まっていない。
    おそらくは、廃墟・風景等をTumblrから引越し、「夜想」的なモノとかの追加かなと。deviant系の移行は現状では労力に合わない気がする…
    表示方に関しては、トップページのフィード表示の一員とする予定。
    また、jCarousel Examples: Using jCarousel as Textscrollerに換えようかと画策中。
  4. 作者の苦労が偲ばれるぉ。
    コメントに「OK, this sucks hard.」みたいな…
    イメージデータの格納ディレクトリが、$ASAPH/data/images/登録年/登録月 なので、登録年月を変更した場合、結構泥臭いコーディングをしなければならないので…
  5. バインド変数だぉ?
    例えば、
    $c = $this->db->query('SELECT id FROM '.ASAPH_TABLE_POSTS.' WHERE hash = :1', $imageHash);
    みたいな。
    MySQLでの機能だと思っていたけど、ソース見る限りでは、query関数内でselect文を構築していた…
  6. トランザクションが無いぉ。
    ソースにも無い。よくよく考えてみたら、オリジナルバージョンはトランザクションを切る必要が無いテーブル構成だよなぁと。
    今回タグ用テーブルを追加した事で必要になるのだが、実はまだ組み込んでいない…
    何か面倒で…ピンで使ってるんだし…
  7. 作者にフィードバックしたいぉ。
    野望として。

何だろ、実際どう使うかは全然未定だけど、このまま飽きるまでやってみようかと思う。

2010/02/20

今更インストール方法

オーソドックスな作りをしている。
ドメイン・MySQL設定のコンフィグを書き換え、ユーザを登録するinstallスクリプトを実行、データディレクトリを0777にchmod、になる。

まず、本家からZIPをダウンロード。

ZIPを解凍して、$ASAPH/lib/asaph_config.class.php を修正。
本気でお試しモードの場合、下記のドメイン・MySQL設定に関する部分の修正のみ。
この辺は他のオープンソースのWebツールでも良くあるパターン。

// Domain name and path where Asaph is installed in
public static $domain = 'subdomain.yourdomain.com';
public static $absolutePath = '/asaph/';

// Settings for your mysql database
public static $db = array(
  'host' => 'localhost',
  'database' => 'asaph',
  'user' => 'root',
  'password' => '****',
  'prefix' => 'asaph_'
);

これらの定数は、プログラム・テンプレートからは Asaph_Config::$domain・Asaph_Config::$absolutePath みたいな使い方をしている。
例えば、テンプレートを見てみると…

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

…と、気持ち悪い使い方をしていたので

public static $htmlLang = 'ja';

を追加して、テンプレートは下記の様に修正。

<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="<?php echo Asaph_Config::$htmlLang; ?>"
  lang="<?php echo Asaph_Config::$htmlLang; ?>">

ハナシを戻して、次に、導入したいサーバにアップロード、各所から捕捉(略奪?)するイメージファイルを格納するディレクトリを「基本的には」0777 にしておく。
このディレクトリは、$ASAPH/data/ になる。
多分、以下の箇所を良いのでは無いかと。自分は面倒なのとデフォルトで構わないので対応していないが。

$ASAPH/lib/asaph_config.class.php

public static $images = array
  'imagePath' => 'data/images/',
  'thumbPath' => 'data/thumbs/',
  'thumbWidth' =>  256,
  'thumbHeight' => 192,
  'jpegQuality' => 80,
);

$ASAPH/admin/install.php

'File Access' => array(
  'Data directory is writeable' => array(
    'message' => 'Make sure PHP has the necessary priviliges (chmod) ↓
                     to write to the <code>data/</code> directory.',
    'value' => @is_writeable( ASAPH_PATH.'data' )
  ),
),

しなっと書いたけど、is_writeable の前のアットマークはエラー制御演算子と言うらしい。うわっ知らなんだ。何かこれ、使えそうな気がする…

ところで「基本的には」と括弧書きしたのは、サーバ環境によって異なるので。 *12 
だからだと思うが、

public static $defaultChmod = 0777;

みたいな設定をして、$ASAPH/lib/asaph_admin.class.php には、

   :
class Asaph_Admin extends Asaph {
   :
  protected function mkdirr( $pathname ) {
    if( empty($pathname) || is_dir($pathname) ) {
   :
      $success = @mkdir( $pathname, Asaph_Config::$defaultChmod );
   :

…と、mkdirrしている。
ところで何故にディレクトリを作成するのかと悩んだのだが、Asaphでイメージをpostした場合、投稿年月(マシン日付)でデータを格納しているので。
なので、下記の様なディレクトリ構成になる。 *13 

+- $ASAPH/
   +- data/
      +- images/
      |  +- 2010/
      |     +- 03/
      |        +- hoge01.jpg
      |        +- hoge02.jpg
      +- thumbs/
      |  +- 2010/
      |     +- 03/
      |        +- hoge01.jpg
      |        +- hoge02.jpg

ハナシを再び戻して、インストールスクリプトである http://hoge.com/asaph/admin/install.php を叩くと、導入可能かどうか確認できる。

すくしょ0601

…この段階で「OK」以外が出ていた場合、どうなんだろうね。幸いにも自分の環境下では出なかったので良く分からんです。
なので、ちょっと遊んでみる。
自分の環境下で、わざと 0777 以外に設定した場合、下記の様なメッセージが出る。実際には、$ASAPH/admin/install/php の半分上がロジック部分、下がHTML表示部分になっているみたいだった。

すくしょ0602

ハナシを続けると、前述した install.php でユーザ名・パスワードx2を入力して上手く行けば完了。
http://hoge.com/asaph/admin/ にアクセスして、ブックマークレットをブックマークに登録して後は色々と。

以上がインストール方法プラスαになる。
おそらくは使ってみて「タグが使えねぇ、検索機能がねぇ、ビデオが投稿できねぇ」とかになると思いますが… ^^;

しかし。
自分の場合、特にタグが使えない事に不満を抱いて実装してしまった訳で、当初は勢いだけで作ったのであまり中身を追っかけてなかったが、こうやって追いかけると色々と発見がある。
コーディング中は自分とオリジナルの作者とのコーディングスタイルの差が気になったけど、普段はあまり意識しないインストール時の挙動を確かめられたし、「うわー切れた(イケてる?)コーディングしてんなー」と色々と発見する事もできた。
なので、人の書いたソースコードは面白いね。

2010/03/12

データインポート

まずはScuttleの中の人に感謝を。
と言うのも、全面的にScuttleを参考にしたので。

処理の流れは大体イメージが付いていた。
インポート画面を出力、インポート対象になるXMLファイルを選択してサーバにアップロード、1件ずつ読んでXMLタグを変数に格納、既存のデータ登録の関数…と言うかメソッドを実行、みたいな。

require_once( ASAPH_PATH.'lib/asaph_admin.class.php' );

class Asaph_Post extends Asaph_Admin {
  :
  public function postUrl( $url, $title, $tags, $created = null ) {
    if( !$this->userId ) {
      return 'not-logged-in';
    }
    :
  public function postImage( $url, $referer, $title, $tags, $created = null ) {
    :

要は上記 postUrl・postImage メソッドを
$status = $asaphPost->postImage( $url, $referer, $title, $tags, $created );
みたいに呼び出せばええんちゃうん、まではイメージできた。
しかしながら問題が色々と。

  1. 新規画面の追加方法
  2. ローカルのXMLファイルをFTPアップロードする方法
  3. XMLファイルをバラして変数に格納する方法
  4. ゼロからAsaphのメソッドを呼び出す方法

まず、「新規画面の追加方法」については、それっぽい事を前述した通りに。
よくよく考えたら、これっていわゆるフツーのMVCPHP フレームワークを使わずに、チョー簡易に実装してるんだなーと思った。
$ASAPH/lib の各クラスがモデル、$ASAPH/templates・$ASAPH/admin/templates がビュー、$ASAPH/index.php・$ASAPH/admin/index.php がコントローラ…になるんじゃないのかと。

次の「ローカルのXMLファイルをFTPアップロードする方法」については、全面的にScuttleを参考にしつつもハテナマークが飛び交っていたので色々と調べた。
RedLine Magazine : PHP ファイルのアップロード 勉強メモあたりが分かり易いかと。

飛ばして、「ゼロからAsaphのメソッドを呼び出す方法」に関して。
ちょっと日が経ったので忘れたが $ASAPH/admin/post.php をコピーして使ったんじゃ無いかと…
お約束的な記述は下記参照。

<?php
  define( 'ASAPH_PATH', '../' );
  require_once( ASAPH_PATH.'lib/asaph_post.class.php' );

  header( 'Content-type: text/html; charset=utf-8' );

  $asaphPost = new Asaph_Post();
  if( isset($_POST['login']) ) {
    if( $asaphPost->login($_POST['name'], $_POST['pass']) ) {
      :

最後に「XMLファイルをバラして変数に格納する方法」に関しては、実は良く分かっていないモノを良く分かっていないまま使っている。
はしょって書くと…

<?xml version="1.0" encoding="UTF-8"?>
<posts user="hoge" update="2010-02-16T13:35:36Z" tag="" total="12">
<post
  image="http://blog-imgs-29-origin.fc2.com/c/h/i/chiquita/71026k01s.jpg"
  referer="http://chiquita.blog17.fc2.com/blog-entry-2808.html"
  title="HEAVEN 中国歴史上最美的十五位女人"
  tags="HEAVEN"
  created="2007/10/26 00:00:00 " />
 :
<!-- fe01.api.del.ac4.yahoo.net uncompressed/chunked Tue Feb 16 05:57:14 PST 2010 -->

という入力データに対して、

    :
  $xml_parser = xml_parser_create();
  xml_set_element_handler($xml_parser, "startElement", "endElement");

  if (!($fp = fopen($_FILES['userfile']['tmp_name'], "r")))
    die("Could not open XML input");

  while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("XML error: %s at line %d",
                     xml_error_string(xml_get_error_code($xml_parser)),
                     xml_get_current_line_number($xml_parser)));
    }
  }

  xml_parser_free($xml_parser);
    :

  function startElement($parser, $name, $attrs) {
    global $depth;

    $asaphPost = new Asaph_Post();

    if ($name == 'POST') {
      while(list($attrTitle, $attrVal) = each($attrs)) {
        switch ($attrTitle) {
        case 'IMAGE':
          $image = $attrVal;
          break;
        case 'REFERER':
          $referer = $attrVal;
          break;
            :
        }
      }

      if (!empty($image)) {
        $status = $asaphPost->postImage($image, $referer, $title, $tags, $created);
      }
      if (!empty($url)) {
        $status = $asaphPost->postUrl($url, $title, $tags, $created);
      }
    }
    $depth[$parser]++;
  }

  function endElement($parser, $name) {
    global $depth;
    $depth[$parser]--;
  }

一見して、startElement・endElement を呼び出してる形跡が無いのだが、xml_set_element_handler でそうやって記述してるから動いてる、という程度の認識。

尚、「お約束な記述」で示した方法だが、これは新たなオブジェクト|クラスを作成する場合の方法であり、今回のインポートに関しては、前述した xml_set_element_handler の影響からか、クラスを作成する実装には至っていない。
例えば、
xml_set_element_handler($xml_parser, “this->startElement”, “this->endElement”);
はできない。
今もこの記事を書くために検索かけてみて、クラスでの利用例をちらっと見たのでそれを参考にすれば良いのかと思うが、まぁ現状、最後にエラーが出る事以外、問題無く動いてるので、取り敢えずこのままの利用としようかと。

2010/03/12

小ネタ

タグ付きAsaphは公開しないのか?

する予定。
ソースが汚いし、個人的な実験的コーディングの部分もあり、未実装の機能(エクスポート、検索)もあるのでそれを実装した、ひぐらしのなく頃までには。

但し、登録データはトップページの右側RSSフィードでScuttleと共に公開中。
しかしながら、自分が作成・運用している Aasph・Scuttle には辿り付けない仕組みにしている。 *14 

テンプレ作成中

ちょっと寄り道。
ベースはfashionistaあたり。意外とサクサクと、というカンジ。

2010/03/15


  1. 本家のコメントを読んでいても、その辺のニーズはあるみたいだが… 
  2. 実装では、ユーザによる表示の切り替えをサポートしていないカンジだが。 
  3. 直接Webブラウザに表示されているイメージを選択する。この辺、本家のビデオを見れば納得かと。 
  4. 気のせいか妙に偏ってるカンジだが、それは気のせいです。あくまでもこれは「テストデータ」でございます。 
  5. 但し、既存のデータのリサイズは実装されてない。まぁ…これもいずれは実装する予定が無い事も無い。 
  6. スクリーンショットはFirefox。IEで見ると消えている…別のLightBoxに乗り換えるのも手かもしれんが。 
  7. なので、もしもここでタグを追加させようとした場合、基本マウスクリックだけで投稿できるのに余計な手間がかかるとは思う。 
  8. ソースを弄って色々と動かしていて気付いたが、テキストに関してはhtmlタグは持てず、エスケープシーケンス?される。 
  9. MS Windowsの機能で言えば、dirtyかそうで無いかを判断できれば良いのだが、おそらくは無理として、もう少しインテリジェンスに行なうとすれば、タグに変更があったか否かを判断して(更新直前にselectする)、更新が加えられていれば delete/insert を行なう、みたいにした方が良いかもしれない。…のだが、はっきり言ってメンドウ。但し、insert/update 時に、タグ名のソート・同一タグ名の排除を行なっているので、恐ろしくメンドウな実装では無いけど。けど、タグを変更していない時も更新するのは、精神的によろしく無いので後日対応する予定。 
  10. 2010/02時点。また、テーマの都合上(改修するのがメンドウなので)、タグ名が小文字になっている可能性大。 
  11. 何せオリジナルのイメージをそのままこちらのサーバにコピーするので、さすがにそりゃマズいだろーと思わなくも無いし… 
  12. 前に使っていたサーバはsuEXECだった。 
  13. 前述した通り、更新日付の変更を行った場合、更新年月のディレクトリが存在するか調べて、無ければ作成して、そちらにイメージをコピー…できれば良いけど、同名ファイルが存在した場合(未確認)…みたいな結構泥臭いコーディングを行なっているが、一瞬ドメイン名のディレクトリにすれば、カブる確立は多いのと、かなりのファイル数になりそうだけど結構軽くなるんじゃ無いかと思っていたりもする。 
  14. 画像リンク先を辿れば… 

関連するかもしれない投稿

インストール諸々は下記参照。 MOONGIFT: » 要チェック!オープンソース版FriendFeedと言えそうな「Sweetcron」:オープンソースを毎日紹介 londoner25.net – SweetCronをもう一度入れました caramel*vanilla ? ライフストリーミングツール「Sweetcron」をインストールしてみた 待望のライフストリーミングツール、「Sweetcron」ベータ公開:ニュース – CNET Japan さて、自分も使ってる…と言うか、動い
Previous Entry

クラウド関連。 で、「クラウドって何よ?」ではあるが。 クラウド のっけからAndroidとは直接に関係の無い話題だが、 みてわかるクラウドマガジンvol.1 (日経BPパソコンベストムック) …は割と面白かった。 2010/04/11 Gmail 連絡先 「Myコンタクト」グループとAndroidは同期する、というのを知ったのは、何でだったか忘れたが。 Android端末に乗り換えようとして一番悩んだのが、「住所録を雲の何処かに置
Next Entry

あわせて読みたい