Home> programming Archives

Recently in programming Category

久々にBookmarklet書いたら、すげぇ楽になってた

同僚のSkypeステータスに「某サイトからデータスクレイピングするの大変」的な話が出ていたので、話を聞いてみると、「それJavaScriptで処理できるんじゃない?」という感じがしたので申し出てみた。
ということでまぁ本業では範疇外だけど、昼とか定時後に片手間ながら久々にBookmarklet書いてみたわけです。

で、処理元のHTML文書は、2000年代前半を彷彿とさせる大文字コーディングスタイルでスラッシュなしBRタグやHRタグ、全く構造化されていない。
(ここで昔のYahoo!オークションサイトをスクレイピングしようとした時のことを思い出して陰鬱な気分になった)

しかし時代は2011年。高速なJSエンジンを積んだブラウザも転がっているし、当時よりも多少JavaScriptにも慣れている。
何より手元にはjQueryもある...あれ? BookmarkletでjQuery使えたよね...?

...あったあった。
jQueryでブックマークレットを書く 3 | ethertank diary

コメントを除き237byte。
https://blog.ethertank.jp/2011/04/18-18:12:36

jQuerifyという選択肢もあるけど、今回は人に渡すものだし、なるべく1クリックで動くやつを作りたいのでパス。
いくつかある亜流の中から、上記サイトのものを採用して感謝しつつコーディング開始。

幸いにもBRタグや記号を使用して几帳面なレイアウトがなされていたので、方針としては、

  1. 腐ったタグを正規表現で置換、構造化文書に書き換える
  2. jQueryで文書内のデータからid、classを生成(ここまでが下準備)
  3. 必要なデータだけ抽出してテーブルやテキストエリアにコピペ用データ書き出し

という感じ。

置換は、こんな感じで。

var d = document;
d.body.innerHTML = d.body.innerHTML.replace(/置換する文字列/g, '置換後の文字列');

あとは、適当にセレクタでデータ選択して処理。無名関数とか昔使えなかったなぁ、とか思いながら。

$('セレクタ').each(function(){
何か処理
});

まぁ、実例出せないのであまり書いても意味ないんだけど、思い出すきっかけくらいにはなるだろう、ってことで記事書いておく。

ところで、今回は富豪的プログラミングだったわけだけど、デバグにOperaとFirefox使ってて「どこまで書いても文字数制限で怒られないな-。何でだろ」と思ってたら、いつの間にか文字数制限がえらい緩くなってたらしい。

各ブラウザのブックマークレット限界文字数 最新版 - MediaLab Love

各ブラウザのブックマークレット限界文字数 最新版 - MediaLab Love
https://d.hatena.ne.jp/Koumei_S/20090525/1243260713

10000字とか誰が使うんだよ!...と思いながら超えてんじゃねぇかなーと思いながら書いてたけど数えてみたら、3000文字くらいだった。

一応引き渡しの時に「Opera使ってね」と布教しておいたり。

PSoCの型宣言

社内開発用に必要になった冶具があって、その辺に転がってた古い試験冶具からモーターやら金具やら取り外して制御部分を追加したりしつつ1台でっち上げる、ってのをここ暫くやってた。
(一応似たような冶具を設計ドキュメント書いて以前工場に作らせてたので、品証に冶具作成のお鉢が回ってきたという)

機構部分の改造と制御回路自体は、設計から組み立てまで3日くらいで終わったんだけど、PSoCで制御ファームウェアを書くのに、色々と作法を忘れてるせいで、結局コーディングに半月くらい掛かった。
まぁ0.5人月だとすると...経費が30万くらい。いつも頼んでた国内の冶具屋さんだと50万から100万くらいの見積もり返ってくるだろうから、若干安く済んだかなぁ。
(ホントは1週間くらいで片付けるつもりだったのは内緒)

冶具の使途は具体的には書けないんだが、
  • ギアードDCモータの回転制御
  • 試験回数の上限値設定(停止させる)
  • 設定値の保存と呼び出し(外付けEEPROM)
  • LCDへの表示(回転速度とトータル回転数)
ってあたりを実装する必要があった。

回転速度は±5%くらいの誤差が許容されるので、速度表示はPSoC1の内部オシレータで32kHz吐いてみたら案外いい精度(60±1Sec以内)、どうせ室内でしか使用しないしそのまま使ってる。

回転検知はフォトトラで回転を16分割したフィンを作って動きを読み取らせた。

この辺りまでは全然サクサク書いてたんだけど、EEPROMへの設定値保存のやり方を忘れてたのと、10進データを16進データに変換して保存する辺りのアルゴリズムを再発明したりしてたら結構手間取ってしまった。
飛び込みの仕事をちょくちょくやりながらも、忙しい時期だったら1ヶ月くらい掛かってたかも。

以下、ドキュメント探すのに手間取ったので、取りあえずメモ。
あくまでも8bitなPSoC1シリーズの話。

char:1Byte
文字列の格納に用いる。シングルバイト。
a unsigned 0...255
signed -128...127

int または short(short int):2Byte
整数の格納に用いる。
unsigned 0...65535
signed -32768...32767

long:4Byte
short(int)の格納できる整数範囲を広くしたもの。
unsigned 0...4294967295
signed -2147483648...2147483647

float または double:4Byte
単精度実数と倍精度実数...のはずだけど、PSoC1においてはデータサイズが同じ4バイトしか選べないらしい。
1.175e-38...3.40e+38

enum:1Byte または 2Byte
※256未満の値を記述する場合には1バイト。256以上の値を記述する場合は2バイト。
エイリアスリストの記述に用いる。
0...65535

そろそろ手を入れる部分が無くなって、自分の手を離れる寸前。
やっぱりPSoCが一番手に馴染んでるし、こういうプロトタイピング的な用途には向いてると思う。

最近は、簡単に多重割り込み的な挙動を実装する方法について通勤中に考えたりしてる。
あとは、そろそろ自宅の電子工作用電源もパワーアップさせたいので、作り直そうかなぁ、とか。

VineLinux/Apache/PHP4.4でFreshReaderクローラを動かしていてPHP5へ移行したら

  • December 3, 2007 1:27 AM
  • programming

フレッシュリーダ(Fresh Reader)のクローラをCronで設定してあるのに動かなくなった、というお話。



2007Dec01
ゴムチューブで身体を虐めてみたり。
RSSを読んでるtwitter.comからの配信が急に来なくなってびびる。
→んー、RSS配信が調子悪いのかな? けど誰も文句云ってないっぽいなぁ。

2007Dec02
念のため、Twitterのフィード購読先を更新してみた。けど新着来ない。
しかも他のフィードも新着が来てない。でもウェブインタフェースから手動更新は出来るみたいだ。
→あれ? これもしかしてクローラ動いてないんじゃない?

Cronログを見るのが面倒だったので、取り敢えずデーモンからのメールを読んでみる。
Cronは動いてるっぽい、けどメールの本文に謎のメッセージが。
<html><head><META HTTP-EQUIV="refresh" CONTENT="0;URL=ioncube.php"></head>click<body><a href="ioncube.php">here</a></body></html>

...何だこのメッセージ。今まで見たこと無いぞ。

取り敢えずSSHでサーバに入って直接clawler.phpを叩いてみる。
$ sudo -u (Apacheのユーザ) /usr/bin/php -f /(path_to_freshreader)/crawler.php
<html><head><META HTTP-EQUIV="refresh" CONTENT="0;URL=ioncube.php"></head>click<body><a href="ioncube.php">here</a></body></html>

同じメッセージ出たー!
ioncube.phpってスクリプトのソースをゴニョゴニョする処理を担当してる奴だよね...ということでgoogle検索して下記サイトの情報を発見。

わんこ日記(2006-12)

[Debian] FreshReaderのクローラーが止まる。
https://on-o.com/page/diary/?date=200612

PHP5を動かしていると拙いのか?
そういや金曜の夜にapt-get install php5してみたような...
ということでPHPのバージョンを確認してみる。
$ /usr/bin/php -v
PHP 5.*.* (cli) (built: Nov 23 2007 12:18:59)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

一方FreshReaderのシステム環境を見ると確かにPHPのバージョンが4.4系のまま。
あー...なるほど。

リンク先のやり方と同様に拡張機能をロードしてやる。
ただしDebianじゃなくてVineを使っているためphp.iniの場所が少し違う。
vi /etc/php5/php.ini してから、↓みたいなのを追記。
;Ad-hoc loading of an extension to enable clawler.php for freshreader
zend_extension = /(path_to_freshreader)/ioncube/ioncube_loader_lin_5.2.so

(※ioncube_loader_lin_5.2.soはFreshReaderのバージョンによって違うかも知れないので適宜読み替えて下さい)


$ /usr/bin/php -v
PHP 5.*.* (cli) (built: Nov 23 2007 12:18:59)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with the ionCube PHP Loader v3.1.29, Copyright (c) 2002-2007, by ionCube Ltd.

お、PHPを復号できるようになってますね。


2007Dec03
何て事をしてるうちに日付が変わって、ターミナルからclawler.phpを叩くと正常にクロールしてくれた。
ついでに解決策をもうひとつ思い付いた。
PHP5で動作してるサーバのコンソールでwhich php4してみてPHP4も同居しているのが確認できたなら、そのパスをメモ。
FreshReaderの「ホーム >> システム設定 >> クローラーの設定」で教えて貰えるCronジョブの実行に使うPHPのパスを、上記で見つけたPHP4のものへ変更してやればいい。
↓こんな感じ。
sudo -u (Apacheのユーザ) /usr/bin/php4 -f /(path_to_freshreader)/crawler.php

こっちのほうが簡単ですな。どっちの方法もスマートだと思えないし、気持ち悪いけど動いてるのでOK...
(暇ならPHP5だけで動かしてるFreshReaderのサーバにPHP4を入れたらどうなるか、とか試してみるのも一興か)

レンタルサーバとかで「突然動かなくなったよ!」なんて人が居たら、管理会社のメンテか何かでPHPのバージョンが上がってしまったのかも知れませんのでお試しを。


もうひとつ思い付いた方法で、FreshReaderのインストールパスへ下記のような内容の.htaccessファイルを置いてみるってのは駄目だった。
php_value zend_extension /(path_to_freshreader)/ioncube/ioncube_loader_lin_5.2.so

まぁCronはシェルから実行してる訳だから、そりゃ動かないよね。
おわり。

----
[近況]
今週は何だか調子が悪くて(というかココに何か書く時は大抵調子悪いだの何だの云ってる気がする)、寝ても寝ても体力が回復しませんでした...これが運動不足の30代の肉体というものか...

週末は自炊で鶏肉ばかり食べてた気がします。
あとバンドメンバーが既存曲の音源を録音する、というのでドラムオケを貰ってベース弾いたりしてました。

そのうちネットで音源公開できるんでしょうかね。

ブックマーク考

  • November 18, 2007 7:52 PM
  • programming

↓のサイトをQuattroさんのmBlog経由で知ったのですけど、こういうクリッピング+共有的なサイトやTumblrでReBlogする文化とも違って、ひっそりとクリップしておきたい欲求に対する需要もありそうだなーと思いました。

実際私もウェブで見つけた面白い画像なんかをローカルに細々と保存したりしていますし。

social bookmarking for images on vi.sualize.us

Bookmark your favorite pictures around the web
Tag and categorize them your way
Share with your friends
https://vi.sualize.us/


個人用ブックマークとして企画しているUnimarkrというアプリでも方向性が一致するので、以前にも書いている気がするけどもう一度書き出しておきます。

* 個人使用が前提
- 別に公開したい訳ではないし...
- ただ、全ての情報を非公開にするつもりもない
- 意図的に非公開にしたもの以外は、「何をブックマークしたか」くらいの情報を認証無しでも閲覧出来るようになっていてもいいんじゃないかな、と

* クリッピング機能
- ウェブページはブックマークしただけでは不安
-- サイトオーナが消したら魚拓系サービスで残ってないと後で読めないもの
-- それは困るので、ログインユーザのみキャッシュを閲覧出来るように
--- 流石に誰でも観れるのは拙いだろ、ということで(ソーシャルサービスじゃないし)
- 基本的にMHTで保存
-- 色々試しているけど、まだ技術的に解決できてないので実装に至らず
-- 動画は?保存するかどうか選択?
- Tumblr/Tumblrクローンサイトは参考になりそう
- 芦塚さんの言うような検索機能は追々...

* タギング
- タグクラウドは未だ使いよいUIに出逢えてない
-- インクリメンタル検索なjsと組み合わせて入力補完、というのが良さそう
-- 重くならないように注意が必要

まだ周辺技術調査と検証ばっかで本体のコードは全く書いていないけど、まずは冬休みあたりにコンパクトなバージョンを作成したい処。
(何より現状はブックマークする度に思考が阻害されてしまうモッサリ具合。基本的にScuttleは好きですが、更に少ない手間でその時自分が感じたものを残せるようにしたいのです)

因みにMHTに替わるキャッシュ保存のアイデアが出そうにないので、もう少しMHT周りで足掻かないと駄目っぽい。
またアイデアを思い付いたらココに追加していこうかな。

引き続きブックマーク(Scuttle)ネタ

中国の国慶節に合わせて10月頭は休むはずだったんですけど、何だか取り損ねて調子悪目です。
寝ても寝ても眠い...その割に夜眠れないんですけども何この悪循環。


さておき無闇にブックマークスクリプトScuttleを推しているウチですが(推してるのか?)、ココでも文句を言っている通り、タグにアルファベットを使用すると勝手に小文字へ変換されてしまいます。

まぁ別にどうでもいいと云えばいいのですが、...いや好くない。
...しかしまぁスクリプトには手を付ける気にならず幾年月、しかして時は満ちたり。

SourceForge.net: Unimarkr

Unimark is a web-based bookmark tool, and its goal is a open bookmark system for personal use. The scripts are mainly coded by modifying "Scuttle" & "Sabros.us". Please refer these projects in sourceforge.net if you want a social bookmarking system.
https://sourceforge.net/projects/unimarkr/

あーあ、もう引けないぞー。

まぁ所詮は自分用のモノなので、わざわざプロジェクトにする必要は無い気がしますが、勉強を兼ねてScuttleのコンパクトバージョンを作成することを当面の目的にしています。
まだレポジトリ・プロジェクトサイトには何も置いてありません。

バージョン0.1~0.5くらいまではScuttleの解析と機能拡張の実験、そこから本格的にスクリプトの公開を進めてゆこうと思います。

ということでまだ暫くは特にネタがない訳ですけども...えーと、閑話休題。

そういう訳でこのところ昼休みなんかにコードを読んだりして、ついでに設置済みのScuttleをカスタマイズしたりしています。
取り敢えず、タグの文字変換してる箇所を発見。

大文字を使えるようにするには、tagservice.phpの46行目あたりを下記のようにコメントアウト、記入すればOKです。

#$tags[$i] = trim(strtolower($tags[$i]));
$tags[$i] = trim($tags[$i]);

この変更によって、
・データベースに無いタグを入力した場合は大文字小文字が判別されるようになります。
→"Tag"と入力したら"Tag"と保存される
・大文字小文字を無視して同じ綴りのタグ("Tag","tag","tAg"...など)を入力した場合は、既存のタグに吸い寄せられます。
→"Tag"がDBに存在する状態で"tag"と入力したら"Tag"として保存される
という挙動になります。

個人的に「よし、希望してた通りの挙動ー」ちう感じですが。


あと、検索をAjaxで行えるようにしました。

ウチのScuttleへ、試しにサーチボックスを追加してます。


元ネタは暴想: ココログプロとかTypepadとかMTとかブログ人とかその他のブログサービスとかでもAjaxでバックナンバーを検索するJavaScriptで、このウェブログでも使用させて貰っていますが今のところ出力処理を弄っただけなので、こちらも一旦解析してから書き直し予定です。
(少なくともサーチ結果のハイライトに手直しが必要)


まぁそんな感じでボチボチやってゆきますので宜しくお願いします。
(そろそろ酔ってきたので寝ます)

----[2009Jul03追記]
大文字小文字を使えるようにする方法、インポートするときのこと考慮してなかったので追記。

上で指摘してるservice/tagservice.php以外にも、import.phpでstrtolower()してるので、こちらも書き換えておきましょう。
(ユーザ名の処理とかでstrtolower()してる箇所もあるので、一括置換はオススメしません)

SemanticScuttle系とかDBの構造がオリジナルのScuttleから変わってるけど、これは出入力の部分で処理しているだけなので、同様にすれば大丈夫。

以前にも紹介したような気がするけど

  • September 8, 2007 10:45 PM
  • programming

とうとう出てきたのかー。

涼宮ハルヒの約束

 ※画面は現在開発中の「S.O.S.」をHP閲覧用に処理を施したサンプルです。
 ※「モーションポートレート」は、モーションポートレート株式会社の技術です。
https://b.bngi-channel.jp/psp-haruhi/sos_pop01.html

人物を認識させたサンプルの時にも思ったけど、顔面の輪郭だけは自動検出してはいけないのじゃないかなぁ。
顔面認識は3Dモデルの作成補助に留めて、あくまでも最後は人間の補正が必要かと。
(半自動化するにしても数パターンの選択肢くらいは設けないと気持ち悪いままだと思う。...というか輪郭の追従具合が気持ち悪く見えるの私だけ?)

まぁこういうのってライブラリが充実すれば或る程度は何とかなるんろうけどもね。

それにしてもこのエンジン作ってる人楽しいだろうなー

ディレクトリ差分パス取得スクリプト

  • September 5, 2007 10:08 PM
  • programming

自分用のスクリプトで使う予定の部品が出来上がったので公開しておく。

<?php
##############################
# ディレクトリ差分パス取得スクリプト
# PHP script drawn by skim (https://w3neu.net/)
# 注意:ディレクトリ名の大文字小文字は特に区別していない
# 2007Sep05:1.0.0 既知のインジェクションバグがまだ残ってるが、実用上問題無いので放置
# 動作無保証。他はX11ライセンスに準じます。
##############################
if (isset($_GET[a])&&isUrl($_GET[a])) {
$altHost = $_GET[a];
} else {//ネームベースホスト名を強制する場合、サーバのあるディレクトリのファイルパスを適当に記述すればOK
$altHost = "";//基本的にはnullで
# $alttHost = "https://localhost/";//必要に応じて変更可
}
redefineScriptPaths($altHost);//パス周りのグローバル変数を拡張(必須)
$baseUrl = $_SERVER[simpleHost] . $_SERVER[simplePath];//拡張したグローバル変数からスクリプト自身のパス取得
if (isset($_GET[t])&&isUrl($_GET[t])) {
$targetUrl = $_GET[t];
} else {
$targetUrl = $baseUrl;//指定が無ければスクリプト自身の存在するディレクトリをターゲットに設定
# $targetUrl = "https://localhost/";//特にデフォルト指定先が設定したければ変更可
}
$relPath = relPathFromUrl($baseUrl, $targetUrl);//相対パス取得
// ファイル一覧を表示するサンプルここから
if (is_dir("$relPath")){
$dir = opendir("$relPath");
while($file = readdir($dir)) {
if(is_file("$relPath$file")||is_dir("$relPath$file")) {
#echo "<img src=\"$targetUrl$file\"><br />\n";
echo suppleSlash($targetUrl)."$file<br />\n";
}
}
closedir($dir);
}
//サンプルここまで
function isUrl($str) {//urlかどうか判別(日本語URLには非対応)
if (preg_match('/^(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $str) && $str!="") {
return 1;
} else {
return 0;
}
}
function suppleSlash($url) {
if (isUrl($url)) {
if (eregi("/$", $url)){
} else {
$url = $url . "/";
}
return $url;
}else {
echo "$url という \nURLではない文字列が入力されているみたいなので処理を中断しました。";
return exit();
}
}
function explodeUrl2Path($url){//URLを使いやすいように分解
if (isUrl($url)) {
if (eregi("/$", $url)){
$url = substr($url, 0, -1);
}
$parsedUrl = parse_url($url);
$pathArray = explode("/", $parsedUrl[path]);
$pathArray[0] = $parsedUrl[host];//先頭には何も入ってないのでホストを突っ込んでおく
return $pathArray;
} else {
echo "$url という \nURLではない文字列が入力されているみたいなので処理を中断しました。";
return exit();
}
}
function relPathFromUrl($selfUrl, $targetUrl){//絶対URLパス同士を比較して相対パスを返す
$selfUrlArray = explodeUrl2Path($selfUrl);
$targetUrlArray = explodeUrl2Path($targetUrl);
if ($selfUrlArray[0]!=$targetUrlArray[0]){
echo "ホストが異なるようなので処理を中断しました。";
return exit();
}
$selfPathCount = count($selfUrlArray) - 1;
for ($i = 1;$i<=$selfPathCount;$i++) {
if ($selfUrlArray[$i]!=$targetUrlArray[$i]) {
break;
}
}
$commonPathCount = $i - 1;
$defPathCount = $selfPathCount - $commonPathCount;
if ($defPathCount==0) {
$relPath = "./";
} else {
$relPath = "" ;
for ($j = 1;$j<=$defPathCount;$j++){
$relPath .= "../";
}
$targetPathCount = count($targetUrlArray) - 1;
for ($k = $i;$k<=$targetPathCount;$k++){
$relPath .= $targetUrlArray[$k] . "/";
}
}
return $relPath;
}
function redefineScriptPaths($altHost) {//自分自身の絶対URLパスを再定義
$altHostArray = parse_url($altHost);//強制的にIPベース=>ネームベースのホスト名にしたい時に上書き
if ($altHostArray[scheme]=="http" && $altHostArray[host]!="") {
$_SERVER[simpleHost] = "https://" . $altHostArray[host] . "/";
} else {
$_SERVER[simpleHost] = "https://" . $_SERVER[SERVER_NAME] . "/";
}
$pathArray = explode("/", $_SERVER[PHP_SELF]);
$fileId = count($pathArray) - 1;
$_SERVER[simpleFile] = $pathArray[$fileId];
$_SERVER[simplePath] = substr(ereg_replace($_SERVER[simpleFile], "", $_SERVER[PHP_SELF]), 1);
$_SERVER[simpleUrl] = $_SERVER[simpleHost] . $_SERVER[simplePath] . $_SERVER[simpleFile];
return $_SERVER;
}

10月の連休で今年こそ完成させる!

Opera::thumbnailr(妄想)

  • May 26, 2007 9:49 AM
  • programming

あぁ今週もヘビーだった...山越えが見えない...


さて先日ちょっとユーザJavaScriptをメンテしようとOperaのインストールディレクトリをウロチョロしていたら、/profile/thumbnailsとかいう見慣れない名前を発見。

自宅ではスピードダイアル全然使ってないんだけど、いやしかしコレは...

以前からOperaのタブに出てくるサムネイルを利用できないか考えてたんだけど、どうもメモリ上に展開してる臭いので厳しそう。
しかしこうやってファイルとして生成されてるなら使い易いじょのいこ!!
(何故えなり)

と、思って色々試してみたけど、やっぱりちょっと乗り越えられなかったので取り敢えずメモだけ残しておきます。

以下妄想。

====
スピードダイアルでOperaにサムネイルを生成させる

複数のファイル名が生成されているが、タイムスタンプを元に最新生成ファイルをコピーしてリネーム

ncftpとかのコマンドラインから叩けるFTPクライアントでアップロード
====

ユーザが使うぶんには上記のような感じで右クリックメニュー拡張して、良い感じに投稿用サイトサムネイルを得られる気がするんだけど、実は何がしたいかというと
Operaスクリーンショットなサービスが作れないかなー
とか思ってた訳ですよ。

だって巷にはIE系とMozilla系しか無いんだものー

まぁ個人的には自前でサイトサムネイルサーバ動かしてるので不要だったりしますが...
Operaのサムネイル関連API公開してくれないかなー、とか考えてます。
(サイズと出力方法指定くらいが設定できると嬉しい)

極私的ブックマークレット...

  • May 22, 2007 1:10 AM
  • programming

仕事に息詰まって、気が付くと5分ほどテキストエディタで遊んでしまった。

謎のBookmarklet

javascript:var d=document;var x = window.open(decodeURIComponent(document.getElementById('blogthiscode').value.split('filepath=')[1].split('&cover=1')[0]),"sub","width=100,height=100,resizable=1")

それにしても仕事がはからどらない時はコーヒーを飲んだり、身体を軽く動かしたり、音楽を聴いたり、プログラミングしてみたりするに限りますね。

...最後のは息抜きなのか?

息抜き。

----
何かゴミ混じってたし、更に5分弄った。これで完了

FuzzBuzz!!

  • May 13, 2007 4:09 AM
  • programming

久々にワインなぞダクダク呑んでみたら、中々寝付けず。
やっと眠れたと思いきや数時間で目が覚めてしまったので、眠気覚ましに下の問題をやってみた。

どうしてプログラマに・・・プログラムが書けないのか?

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
https://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

掛かった時間を計ると4分強。
PCを組み直したときに買ったコンパクトキーボードにまだ戸惑っている(言い訳だな)のと、アルゴリズムと関数名は沸いてくるけど使い方を思い出せない(言語ヘルプ無しでやる習慣は失われました)、という悲しい事実により予想通り1~2分というラインはクリアできず...
(Cで書いてたら何回無駄にコンパイルせにゃならんかったのだろうかね)

<?php
echoFuzzBuzz();
function echoFuzzBuzz() {
echo "<pre>";
for ($i=1;$i<=100;$i++){
$id3 = "$i";
$id5 = "$i";
while ($id5 >= 5){
$id5 = $id5 - 5;
}
while ($id3 >= 3){
$id3 = $id3 - 3;
}
if ($id3 == 0 && $id5 == 0 ){
echo "fuzz buzz!!";
} else if ($id3 == 0) {
echo "fuzz!";
} else if ($id5 == 0) {
echo "buzz!";
} else {
echo $i;
}
echo "\n";
}
echo "</pre>";
}

?>を省くのは最近気をつけているコーディング規約に則って。

全く以てスマートに書く気はございません。
自分の書いたコードすら忘れる休日プログラマにとってはコメント不要にできれば一番、とか云ってみる。
それにしてもこの手のが書けないって、どんなプログラマだ...
(入門書の最初の50ページも読んだことあれば書けるだろうに)

寝ぼけてたのでFizzじゃなくてFuzzだと思いこんでた辺りはご勘弁。
あーでっかいアンプでジージー(FuzzBuzz!!)ってギター掻き鳴らしたいなー。

----
[20070513追記]
コードをコピーする時、PHP開始タグに?が抜けてた。阿呆だ。

PHP開発環境再構築

  • May 1, 2007 11:35 PM
  • programming

PC環境の移行、やっぱり手間取ってます。
(音楽動画開発楽描とか統合し過ぎてたから...)

今日はPHP開発環境の再構築。

OEdit→PHPEditor→PeggyPad→Eclipseと渡り歩いて来たPHP用エディタ。
前回インストールしたときからEclipse周りの状況が結構変わっているみたいなのでちょっと悩んだりしつつ。
(PDTなんてのが出てたりKoebiが落ちしてたりして吃驚した)

全く何も入れてなかったので今会社で使ってるの小物作成環境(テキストエディタで自サーバ直書き)のほうがマシという酷い有様です。
まぁGWのコーディングのために入れていこうというアレです。
(予定より休みが少なくて、スクリプトの構想は出来てるけど完了できるか不安)

取り敢えずもう面倒なのでXAMPP入れてEclipse入れて終わり。

重いのだけちょっと困りものだけど、EclipseじゃなけりゃPeggyPadで十分だし...


...あ、JavaScriptのデバッグ環境をどうするか考えてなかった...

<予定>
水曜仕事(夜に呑み?)→木曜カレンダー通りの休日(コーディング)→金曜諸々状況確認のため出勤→土曜半日コーディング(夜は某動画の編集)→日曜は休みとデバグ
</予定>

何で気付かなかったんだろう

  • April 4, 2007 2:35 PM
  • programming

無い暇をこじ開けてちょこちょこと手を入れているSP4MTの後継PHIE(仮)ですが...
会社で使っているOperaで設計用の基準をブラウジングしていてふと思いました

Operaのパネルで使えるようにするべきではないか!

...何で今まで思いつかなかったかなー

Apollo出たんだよね

  • March 19, 2007 10:57 PM
  • programming
Adobe Labs - Apollo

This alpha version of the Apollo runtime provides developers with the opportunity to begin building applications for Apollo. Future releases will provide more stability, more desktop integration, and enhanced support for Ajax developers.
Download and Discuss
Get the Apollo Runtime
Get the Apollo SDK and Developer Downloads
Discuss Apollo in the Labs Forums

The Apollo Developer SDK, sample applications, and Apollo documentation provide everything a developer needs to start building applications. There are also technical articles, developer videos, and sample applications located throughout the Labs site.
https://labs.adobe.com/technologies/apollo/

個人的にはやっと出た!って感じだけど、これから盛り上がって行くのかな。
ウェブアプリがデスクトップで動くことの便利さは、想像以上だと思う。

けど触れないんだよなぁ...

まぁ正式版は今年の後半って云ってるし、いいか...

Adobe Labs - Apollo

Adobe intends to provide the final release of Apollo and additional developer resources when the prerelease cycle is complete later this year.
https://labs.adobe.com/technologies/apollo/

取り敢えずゴールデンウィーク辺りには情報出揃ってそうだから、その頃に改めて本気で触ることにしよう。
とか云いつつ最近Rubyな本読んだりしてますけど。

とにかくLL(今は何でもPHP)とECMAScript(まぁLLだけど別枠)を両輪にしてしまいたい。
仕事場はアセンブラなんだけども。

欲望と否定が繰り返される脳内。
要するに時間が無い訳だ。

今日のところはSDKダウンロードして寝ることとする。
PHPしばらくお休みして早く触りたいなぁ。

アンカーシステムさんがとうとう出してきた

  • March 2, 2007 1:46 AM
  • programming

PHPの開発環境をEclipseに移して久しいのだけれど、相変わらずワンライナー的なモノとかちょっとした動作確認はPeggyPadでやってます。
TeraPad、OeditからPHP開発環境を探してた時に出会ったPeggyPadにテキストエディタ移行して、はや3年ちょい。

Core2Duoな新PCへの環境移行に際して、ブラウザ、アーカイバときて次がテキストエディタ。
で最新版をダウンロードしに行ったら、まぁそんなことはどうでも良いくらいのニュースが。

Peggy Pro for PHP概要

PHPプログラムのデバッグや各種データベースに接続できる高機能テキストエディタ
※Peggy Pro for PHP は「Peggy Pro」のすべての機能に加え、PHPデバッグ、データベース接続ができます。

PHPプログラムのデバッグ機能

Peggy Pro for PHP では、PHP プログラムのデバッグ機能を搭載しました。以下のデバッグ機能により、Webサーバー上で実行される PHP プログラムの不具合点を簡単に見つけることができます。
ステップ実行(ステップイン、ステップオーバー、ステップアウト)
カーソル位置まで実行
ブレークポイントの設定と一時無効化
コールスタック表示と切り替え
変数(ローカル変数・グローバル変数)表示と変数値の変更
変数値のチップ表示
各種漢字コードを考慮した日本語対応
データベース接続機能

オラクルでのSQL文作成やテストを行う場合、ほとんどの方がSQL*PLUSを使用されている のではないでしょうか。 メモ帳を併用し、カット&ペースト、あっちへ行ったりこっちへいったりと言う作業を行っていませんか。 Peggy Pro for Oracleでは、ボタン1つで、オラクルデータベースサーバーでSQLを実行し、結果が返ってきます。
ODBC・OO4Oを使用しない、Oracle Call Interface(OCI)コールによるパフォーマンス向上。 検索結果をセパレータを付けてファイルへ落とす事も可能です。
※ODBC接続ももちろんあります。Oracle以外のDBでも接続できます。(Microsoft SQL Server、Access、Excel、など)
Oracleデータベースの基本アプリケーションSQL・PL/SQLの開発環境です。
ODBC・OO4Oを使わない高速通信です。
SQL・PL/SQLの作成、編集、プロジェクト管理、バージョン管理、データ保守などの環境を提供します。
検索結果データのファイル化ができます。
プロジェクト管理で関連付けアプリケーショの起動もできます。
https://www.anchorsystems.co.jp/anchor/ashp/peggy/outlinephp.html

うぉー。
これは時間取って試用期間内に触ってみなければ!
良いタイミングだから、使い勝手良さ気ならレジストするかなー。
Eclipse重すぎるんだよね...

ていうかこれって殆んど気付かれてなくないですかアンカーシステムさん?

w3neu.netはテキストエディタPeggyシリーズを応援しています。

PHPのmagic_quote

  • January 8, 2007 1:01 PM
  • programming
PHP: get_magic_quotes_gpc - Manual

magic_quotes_gpc の現在の設定を返します。(オフの場合 0、オンの場合 1)
https://jp2.php.net/get_magic_quotes_gpc


あぁ、気付いてなかった。この標準関数...うん

  • Comments (Close): 0
  • TrackBack (Close): 0

Apollo

  • December 17, 2006 6:13 PM
  • programming

デスクトップとウェブアプリケーションの融合の為のプラットフォームらしい。
ひさびさに心躍るネタかも知れない。

Apollo - Adobe Labs

Apollo is a cross-OS runtime that allows developers to leverage their existing web development skills (Flash, Flex, HTML, Ajax) to build and deploy desktop RIA’s. Signup to be notified about the Apollo beta, including details regarding its availability.
https://labs.adobe.com/wiki/index.php/Apollo

混沌とした世界になるのは目に見えているけど、こんなのやられたら技術者として関与せざるを得ない。
(あれ? でもこれもしかして、いわゆるリアルな"ものづくり"をやってない反動なのかな? とも思った)

なんにせよ、少なくとも2007年の個人的な注目キーワードになると思う。

HighSlide使ってみた

  • November 26, 2006 11:44 PM
  • programming

スクリーンショットサービス構築して、管理画面を作る前にデモページを組んだんだけど(この記事の追記部分参照)、その時に以前から気になっていたHighSlideエフェクトを使ってみました。

画像数が多くなると結構重いんだけど、それなりに使えそうかなーという感じです。

導入自体は結構簡単で、サンプルに書いてあるコメント通りに出力部分を書いてゆけば、問題なく動き出します。
ただdivでコメント書いたりするのが若干面倒で、Lightboxほど手軽ではありません。

個人的にはウェブログの画像なんかをポップアップするならLightBox、ギャラリーを組むなら自由度でHighSlide、って感じで使い分けそうです。


さ、また月曜から仕事だ...

私的SiteScreenShotService

  • November 22, 2006 12:43 AM
  • programming

ここ半月くらい突発的に忙しくなってきております。
各方面ちょっとアレな感じですがご容赦下さい...

さておき、久々に朝ハックしております。
(大体毎朝1時間くらい)
便利に使わせて貰ってたサイトスクリーンショットサービスのsimpleAPIさんが、確か先週くらいにダウンされていた模様で、負荷大きいのにタダリソース食わせてもらうのもアレだなー...と前々から思ってたので自分用にSSSS立ち上げてみました。

仕組みとしてはhttpリクエストを.htaccessでPHPスクリプトへ飛ばし、URLパラメータをエンコしてsystem関数でスクリプトプログラム呼び出してキャプチャ結果をキャッシュしつつ取得中画像を表示。
2回目以降はキャッシュ先へリダイレクト。

思い立ってからの総作業時間は3時間くらいだったかな。
(キャッシュ検索でfile_existのつもりでissetを使って嵌ってたアホエピソードは内緒です)

キャッシュ更新とリファラ指定のアルゴリズム、管理スクリプトを作ったら、改めて公開しようと重います。

暫らく手入れできなさそうだけども...まぁ楽しかったので好し。


そしてSimpleAPIさん、いままで有難う!

----
[2006Nov25追記]
自ドメイン/登録ドメイン以外からのアクセスを弾く様に設定したので公開します。
こんな感じで使えてます。

.htaccessの書き方に慣れてないので、リクエスト部分をフォルダのように扱えなかったけど、なかなか満足...ていうかSimpleAPIさんまた落ちてるよ...大丈夫なのかなぁ
心配だ...

SimpleAPI使ってて自宅サーバ動かしてるような人は、なるべくSSSSを自前でやったほうが良さそうですね。
(対象者少なそうだな)

URL に使用可能な文字数は最大 2083 文字

  • October 31, 2006 12:40 AM
  • programming

https://support.microsoft.com/default.aspx?scid=kb;ja;208427より。

...GETメソッド使って大量のデータを流す時にちょっと気をつけておく。

簡単にAPIを提供するためにはGETで受け渡しをするのが楽なわけですが、SP4MTみたいに閉じたスクリプトだとPOSTしか使わないですね。

他のブラウザについては未調査。RFC2616では既定されていないみたいなので、実装次第だろうけど。

平メガネ党員らしい

  • October 4, 2006 4:43 PM
  • programming

らしい...というか薄色サングラス掛けなんですけど。
※だから夜は伊達メガネなのです

日本メガネ党

あなたはなかなかのメガネ好きです。メガネ党員としてのまあまあの素質を備えています。よって党員ランクCの「メガネ党一般党員」の証が贈られます。
https://www.meganestore.co.jp/meganetou/top.html

まぁメガネ好きですけどね。ここ何年か流行り過ぎたので速く廃れないかと思う。

Plagger触りたいが...

  • July 30, 2006 9:55 PM
  • programming

こんなの見てしまったら週末はPlagger触るぜー、とか叫びたいところではあったのですが、仕事が詰んでて全くもう無理なのです。
あぁ。

Elementary, ... Googleで「はらへった」と検索するとピザが届くようにするまで

Plagger の概略は、miyagawaさん自身による このYAPC::NAのPDF がわかりやすいです。要するに、 『ネットからフィードを集める → (ごにょごにょする) → 出力する』をするものです。
https://e8y.net/blog/2006/07/25/p126.html

漏れそうだ。

処でConsolasフォント、なかなか好いですな。
(要VisualStudio2005)

Download details: Consolas Font Pack

Optimized for Microsoft ClearType
The Microsoft Consolas Font Family is a set of highly legible fonts designed for ClearType. It is intended for use in programming environments and other circumstances where a monospaced font is specified. This installation package will set the default font for Visual Studio to Consolas.
https://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&displaylang=en


2週間空いてこの程度のエントリです。
えぇ、生存報告ですから。

OOP始めました

  • June 14, 2006 12:21 AM
  • programming

OOP(ObjectOrientedProgramming)始めました。
...と云ってもPHP4でやっているので微妙なこと限りないですが。

主な目的は公開用のスクリプトのメンテナンス性を向上させること。
あと最近よくやるJavaScriptプログラミングにも役立つかなー、という目論見も。

PCも持ってないのに買って読んだJava紹介本で(コンピューティングに興味はあったが、コンピュータを買ってまで手を出す情熱がなかった)
"Javaはすごい。何と言ってもオブジェクト指向だから(云々)"
といった行を読んでも
「そうか凄いのかぁ...で?」
C++を触っている頃には
「オブジェクト...なんだよそれ」
PHPを始めるときも
「Cと同じでいいんでしょ? ...OOP? 要らないと思う」
なんて。

でも興味そのものは尽きていなかったので、OOP関連の文書や本を色々読んでみたりしました。
一番判りやすかったのはFlashActionScriptの本だったかも。
(有名な黄色い本ですね)

やっぱり自分でコード書いて憶えるのが一番だな、と実感。
本読んでるだけじゃオブジェクト化の恩恵が判らなかったです。

ていうかホントはPerl/PHP5でOOPしたくもあったり。
(MT内部に手を入れたいだけとか何とか)

そんなわけで、まぁ面白いんだけど、まだメリットは見えないのだった。

PHP の 型変換

  • June 13, 2006 11:35 PM
  • programming

<?php
//型キャストの実験
$testStr1 = "next365days";
echo $testStr1;//next365days
//自動キャストしてくれるのか
$testStr1 += 365;
echo $testStr1;//365...0+365って扱いらしい
//もう一回
$testStr1 = "next365days";
$testStr1 = (int) $testStr1;//今度は明示的に型変換
echo $testStr1;//0...やっぱりか
//数字から始まる場合は?
$testStr2 = "1024yen";
echo $testStr2;//1024yen
//自動的に型変換してくれるのか
$testStr2 += 1024;
echo $testStr2;//2048...いけた
//もう一回
$testStr2 = "1024yen";
$testStr2 = (string) $testStr2 + 1024;//わざわざ文字列キャスト後の計算もしてみる
echo $testStr2;//2048...やっぱり整数値へキャストされた...
?>

先頭に文字が含まれていなければ、自動的にキャストしてくれるみたい。
(今まで気にしてなかったのか!)

キャストできる型は、boolean, intege, float, string, array, object, resource, null。
resourceとかobjectとか使う機会あるのか...?

ZendのPHPコーディング規約

  • May 15, 2006 5:28 AM
  • programming
Zend Framework::付録 A. Zend Framework PHP 標準コーディング規約

このドキュメントは、Zend Framework 上で開発を行う開発者 (開発チーム) のための指針となるものです。扱う範囲は以下のとおりです。

PHP ファイルの書式
命名規約
コーディングスタイル
インラインドキュメント
https://framework.zend.com/manual/ja/coding-standard.html

コーディング規約ってのは取り入れると色々と便利なのが判ってるんだけど、今まで気を配っていなかった。

上記Zendのものは、PEARのものに若干ルールを追加したような形になっている。
うーん、使うことにします。

しかしアンダーバーだらけの関数群は、なんというか負の遺産...
いちいち変換するのは面倒なので、新しいスクリプトから取り入れようと思う。

PhpMathPublisherで数式を出力

  • May 12, 2006 7:15 AM
  • programming

うーん、MathMLが要らなくなるかも知れない。

PhpMathPublisher

With PhpMathPublisher, you can publish mathematical documents on the web by using only a php script (no latex programs on the server, no mathml...).
https://www.xm1math.net/phpmathpublisher/

まぁウェブサイトで数式を使う予定は暫らく無いのだけれど。
(仕事で何個か書くだけならならMSWordで済ませるし、論文ならTexで書くし...)

Ajax framework from Adobe lab.

  • May 12, 2006 7:07 AM
  • programming
Adobe Labs - Spry framework for Ajax

The Spry framework for Ajax is a JavaScript library for web designers that provides functionality that allows designers to build pages that provide a richer experience for their users. It is designed to bring Ajax to the web design community who can benefit from Ajax, but are not well served by other frameworks.
https://labs.adobe.com/technologies/spry/

Adobeも公開してきましたね。
喜ばしい。

ちなみにBSDライセンスで公開されています。

それにしても今週はボロボロでした。
カゼ長引きすぎ。

何? リッチクライアントって美味しいの?

  • May 2, 2006 7:56 AM
  • programming

Ajaxの解説も溢れてきたかな? いやいやまだまだ...

Ajaxを使ったファイルマネージャをPHPで作ろう - @IT

今回はJavaScriptからPHPへのアクセス方法、Ajaxを用いたファイルマネージャの実装を行う。
https://www.atmarkit.co.jp/fwcr/rensai/ajax_php02/01.html

そろそろ作り始めないと、ネット検索で出てきた実装だけでMashUp(単なる人の褌)スクリプトを作ってしまうほうが楽になってしまうなぁ。

さて、ゴールデンウィーク何しよう?
(家で仕事...とか? やだなぁ)

VS2005Expressが無償提供継続

  • April 22, 2006 3:42 PM
  • programming

いやぁ、ちょっと予想はしてたけど本当にやるんだね。
ちょっと焦りが見えるが見直したMSさん。

Visual Studio 2005 Express Edition

Express Edition 最新情報
Visual Studio 2005 Express の無償ダウンロードを継続的に提供することになりました。

https://www.microsoft.com/japan/msdn/vstudio/express/

学生時分に買ったVC++2003は、研究プログラム用コンパイラとして使ったのみ。
無償VS2005Ex.で、簡単なプログラムどころかWin32Nativeな本気のプログラムも作れるわけだから、近頃の学生さんはいい環境を持ったなぁと思う。

まぁEclipseの台頭なんかもあっての流れなんだろうな。
(もはやEclipseを手放せるかというと無理だったりするけども...)
あとVSの展開上、こけた(と私は思っている)VS2002/2003のせいで未だにその地位を保っているVS 6系をMS自ら駆逐する道具、という役目もあるだろうね。

プログラムと言うと最近はスクリプト処理系でやっつけてしまう癖が付いてしまったが、こうなってくると業務系アプリケーションは事実上Win環境で動けばいいわけで、またネイティブアプリを作るようになるかも知れない。

全く手を出していなかったVBに触ってみようかな、という気にもなってきた。

方向性の違うもの

  • April 19, 2006 12:28 AM
  • programming

ふと帰宅後にウチのアクセス解析を見ていて、こんなのを発見。

人力検索はてな - Web上でノート感覚で情報を書き貯めるようなCGIってどんなのがあるのでしょうか?

●MTでのお絵描きプラグイン
ありました。
https://www.eosw.net/scripts/sp4mt/07b1
正確にはスクリプトですが。
https://q.hatena.ne.jp/1145157186

うーん、やっぱりこういう需要もあるのかなー。

というか実は個人的にそのうち会社の仕事で使えるように改造したりする計画があるんですが(自分で作れば商用利用がどうのこうのとか考えなくていいから)、コアモジュールへの分割が出来てなくて進んでません。
あーぁ。

大体仕事で使うようなコラボレーションツールが文字ベースだけ、ってのは実は不便なんだよね。
実際、IMクライアントもファイル転送機能のないものだったらこれほど使わないだろうし、視覚情報を意味内容だけに置き換えてやりとりするのは勿体無いと思う訳です。
あれだけ盛んだったイントラのIPメッセンジャも、ことごとく各種近代IMに座を譲りつつあるご時世。
(でも何故かアンインストールには踏み切れない...)

いや取引先とIMで喋るようなスピードでやり取りしたいかというと、またそれは別なんだけども...

実際、今頭の中にあるアイデアもコーディングに入れれば1週間くらいで実装出来るだろう、なんて思いながら妄想を膨らませるのが楽しくもあって、なかなか手がキーボードに向かわないのです。

長期休暇取って丸々コーディングってのもアレだしね。
けどそれはそれで贅沢な時間の使い方(どっちだよ)。

TumbnailSelector()

  • April 13, 2006 10:41 PM
  • programming

ついに見つけた! これこれ!!

SiliSoftware | PHP scripts | ThumbnailSelector()

ThumbnailSelector uses Javascript and CSS to allow the user to dynamically select a region of an image, for example for later cropping with another program. Originally written as a front-end to pass cropping parameters to phpThumb().
https://www.silisoftware.com/scripts/index.php?scriptname=ThumbnailSelector

JavaScriptで動的枠選択を可能にするライブラリとして、非常に有難い。
(というか作る手間が省けた)

これでGW中の更新も真実味を帯びてきたような...。

また見つけてしまった

  • April 10, 2006 5:59 AM
  • programming

ウェブログ再開したらSP4MTでカスタマイズすべき点を発見してしまって困った。

貼り付け用のタグはほぼ決め打ちで生成しているので、aタグの内側でidやクラスを仕込めないのだった。
これは不便だ。

まぁバージョン上げるほどの内容ではないのだけど、内部的に結構な手入れが必要なので長期休暇にまとめてやらないとつまらないバグを吐きそう。


やるとしたら多分ゴールデンウィーク辺りに手入れすると思うので、それまでの間このエントリのコメント欄で要望受け付けます。

以上

勉強する気が失われるMashUpの誘惑

  • April 6, 2006 12:42 AM
  • programming

ひとつ前の記事を書いているときに思ったのだけれど、ぬるハックなる単語、適当に吐いた言葉の割には個人的にも結構好いかも知れない。

この言葉の持つ響きから想像される姿勢、立ち位置ってのは自分的になかなか良さそうな具合。

ここ最近はPHPを軸に、JavaScriptとCSSの復習をやったりしているのだけれども(時々MT内部を弄る為にPerlも恐る恐る触る)、特にJavaScript関連では気が付くと便利そうなライブラリがあちこちで公開されるようになり、スクリプトのMashUpだけでそこそこ見栄えのするWebアプリケーションが出来てしまう。

これら市中のライブラリは、Perlに於けるCPANやPHPにとってのPEARのように統合されてメンテナンスされているのではないので、それらを横断的に定期チェックしておく労力は比較的大きいわけだけれども、ここ最近のAjax流行りに乗ってか情報を集約しているウェブログなども増えてきている。
そうなるとあとは購読するだけで情報が寄って来るようになるので、口をあんぐり開けてニッチなスクリプトを書いていれば充分楽しめる。


ただスクリプトを書く人間の性として、車輪を再発明する過程が楽しいってものもあるわけで、実はそんなに気を削がれている訳でもなかったりするのだった。

ちなみにSP4MTはJavaAppletが動かないような環境では意味の無い代物であるし、そのようなクライアント環境では(昔ながらの好き嫌いも分かれる処ではあろうけど)JavaScriptをもう少しゴリゴリ取り入れてもそれ程文句は言われまい、なんて考えている。

実際あともう少しだけ基本機能を足しこんでしまえば、コードの最適化なんて止めて、見栄えのするアプリケーションに変えてしまってもいいかな、なんて。

複数の関数を実行する

  • March 27, 2006 11:31 PM
  • programming

ひとつのアクションに対して複数の関数を割り当てたい場合は、セミコロン ; で区切る。

当たり前の事だろうけども、こんなことも判らないのです。

あぁJavaScript、慣れない。
OOP、慣れない。


さてそんなアホなりの下らないtipsを発見。

上記のように記述すればFirefox/Opera/MSIEでクロスブラウザな動作をするのですが、カンマ , で区切るとOperaでしか動作しませんでした。
(但し9系でしか試してない)

実装の差が出たバッドノウハウですね。

SP4MT--V0.7

  • February 14, 2006 6:42 AM
  • programming

何だか勢いで始めた週末の数時間コーディング、何とか0.7系の初リリースに入った。
(毎度のことながらリリースバージョンは適当)

今回は作ったままで放置していたログインモジュールの取り込みと、サムネイル生成処理がメインだった訳だけど、GDまわりの実装が結構面倒で、こんなものとっとと関数化もしくはクラス化してしまいたい、と思った。
(あと細かなバグも発見したので修正したり)


以下自分用のメモ。

*サムネイル関数の必要パラメータ
-引数
--スクリプトファイルパス
---ドメイン込みのフルパス、もしくはスラッシュ
--画像ファイルパス
---ドメイン込みのフルパス、もしくは相対パス
--サムネイルフラグ(閾値種別)
---縦横幅、画素数、ファイル容量での縮小
--サムネイルスレッショルド(閾値)
--サフィックス(サムネイルファイルの接尾辞)
---指定が無い場合は"-thumb"を付加し、*が入力された場合はサムネイルを上書き保存

こんな感じだろうか。
現状の関数は行けていないので、もうちょっと絞り込んで使い易くしておきたいところではある。


開発スタイルが定まってきたので、当面はモジュールをグリグリ作るくらいだろうかね。

pc2m(携帯端末向けページ変換)

  • December 6, 2005 8:30 AM
  • programming

PCサイトの携帯向け変換には、串刺した状態のものをUA(ユーザエージェント)から判別して渡す、ということをしていたりしたんですが。

こういうものを作られると非常に気になります。
と言うことで要ウォッチ。

PCサイト->携帯変換スクリプト
https://www.rcdtokyo.com/pc2m/note/

忘れていたけどそう云えば、あまりリンクは張らない主義だった。

OpenRico

  • December 5, 2005 5:54 AM
  • programming

ここんとこ注目してるJavaScriptのライブラリです。

Rico

動的なコンテンツを作成する際に使える…かも知れません。


2ヶ月くらいタブに常駐させてることに気付いて、エントリにするべきだったかと今更。

あとここもメモっておきましょう。
俄かに騒がれてますが、確かにこのインタフェースは気になるなぁ。
fluxiom

スクリプトは開示されないでしょうけど、参考にしたいところ。
けど残念ながらウェブアプリケーション熱に火は付きません…ウェブアプリの仕様肥大化の前にブラウザの標準実装を!早く!!

JavaScriptとAタグでSubmitする

  • November 28, 2005 12:09 AM
  • programming

使い古されたネタであって、ajaxなネタとはとても云えないが3回以上ネットで検索した記憶があるため、ここに纏めておくことにする。

まず、そもそも何故Aタグを用いてform内容を送信することになったかというと、

  • formのsubmitボタンは普通に配置すると勝手に改行される
  • でCSSで<br clear="all" />とかやってformのsubmitを横に並べると、今度は何故かMozilla系ブラウザで少しずつ段ずれを起こす
  • submitボタンではCSSで見た目を変えるにも限界がある
  • どうせJavaScriptは使うのだから、noscriptな環境は無視して良い

これだけ条件が揃えばもういいでしょう。
ということで早速本題へ。

まずはベタな方法。

aタグhref要素にJavaScriptを仕込む
formのactionに移動先のファイル名、nameにIDを仕込んでおく。methodやenctypeは好みで(POSTだろうけど)。
で、aタグのhref要素にjavascript:ID.submit()を仕込む。


別の方法。

aタグonClick要素にJavaScriptを仕込む
formのactionに移動先のファイル名、nameにIDを仕込んでおく。例によってmethodやenctypeは好みで。
で、aタグのhref要素に#を、onClick要素にID.submit()を仕込む。
#onClickにはjavascript:ID.submit()を仕込んでも良い。


実はここでhref要素を飛ばしても良い。
リンクテキストとして処理されなくなるが、CSSで見た目のアクションを付ければよいので問題ない。

上記いずれの方法でも、aのhref要素での指定に関わらずformのaction要素で指定したリンク先に移動する。
つまりaction要素にURL埋め込みを行えば、GET送信とPOST送信を同時に行える。
(例えばGETで画面遷移指定して、POSTでデータ受け渡しするなど)

汎用的に使用するなら、action要素に#を入れるという手もあるが、リンク先のURL末尾に#が付加されるせいで若干不便だと思う。


因みに画像をsbumitボタン代わりに使用したい場合は、aタグでimgタグを挟み込んであげればよい。
(onClickをimgタグに仕込む手もあります)

Eclipse3とphpEclipseとXAMPPで

  • November 19, 2005 1:32 PM
  • programming

ずっとPeggyPadでウロウロ開発してたSP4MT、メンテナンスもせずにバージョン0.6をプレリリース版のまま放っておいたら、どうもエラーが出てるらしくて手を入れないといけなくなりました。

最初ソースを入れたHDDを何処に置いたか忘れててドキドキしましたが、PCケースに組み込んだままATA接続してなかったのだった。
一瞬今のHDDに上書きしてたのか、とビビりましたよ…。
(SP4MTよりも、ちまちま作ってた単機能モジュール群が無くなると痛い)


さて、今回から云わずと知れたオープンソースIDEのEclipseを使用することにしました。
phpEditorも好いんですけどねぇ、以前は非常に面倒くさかったEclipseのインストールも簡単になってて、情報も広く手に入るようになったということで。

PHP用のプラグインはTruStudioと迷ったけど、開発が進行中のphpEclipseを選びました。
あと、半角全角スペースと改行を表示するjstyle(JapaneseのJかな?)ってのとJavaScript用のJSEclipse、あと余白を半角スペースに変換できるAnyEditってやつも入れたり。
AllInOneと謳うだけあって、殆んど何も気にせず環境が構築できましたよ。
そうそう、プラグインをインストールして動かなかった場合、
eclipse.exe -clean
のおまじないで動くことが多いみたい。

そしてローカル環境もXAMPPで一発構築です。
あぁ簡単過ぎる…


それにしてもここんとこプログラム熱だけはあるんだよね。
あとは時間の確保と熱意の継続だわ。

それにしてもOOP始めるのはいつになるのやら…。

#以下追記[Nov 27, 2005]
デバグで便利そうだったのでPHPUnitも入れてみることにしたり

#以下追記[Dec 05, 2005]
Ecsplorer:ローカルフォルダを参照できるプラグインだそうな
https://ecsplorer.si-technologies.de/

IPMessengerプラグイン:Eclipse上で動作するIPM互換メッセンジャ。何だか志向性が変でとても良いと思います。
https://sourceforge.jp/projects/ipmsg4e/

EclipseWiki:プラグインが無い時、まずここで探してからGoogle先生に聞こう
https://www.eclipsewiki.net/eclipse/?%A4%B3%A4%F3%A4%CA%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%CD%DF%A4%B7%A4%A4%A4%BE

PHPの日本語マニュアル

  • November 4, 2005 9:59 PM
  • programming

全然気付いて無かったけど、さっき開発環境の再構築をしていたらPHPマニュアル日本語版(WinHelp形式)の最新分がアップデートされてました。

This file was generated: Sun Oct 16 01:09:12 2005
と書いてあるので、これまでの日本語リソースから随分新しくなったみたいですね。
(何せ今まで2003年ビルドでしたから…)

若干リンクミスがあったり英語が残ったりしてますが、実用上問題有りませんので、PHPを利用している人はアップデートしてみては。

あとPHP DesignerというIDEを発見しました。
日本語さえ通ればかなり便利そうなんだけど、日本語リソース開発志望してみようかどうか悩ましいです。

今はその辺の色分けできるエディタで十分だしなぁ。

猫も杓子も私も

  • October 17, 2005 10:56 PM
  • programming

プログラミングは本職でなくって飽くまでも趣味な訳で、しかもかなりのヘボです。

懐かしのFORTRANから入って(パンチカード制限72字縛りとか懐かしい)、大学では組み込みC→VisualC++(実際の敷居より妙に高く考えてたっけ)、LLではPerlに行かずにPHPへ流れた組(あるよね…)。
ここんとこLinux触ってるせいでまたPerlも使うようになりましたが。

えーと、HTMLとかはジェスチャみたいなものなので含めません。

で、最近興味を惹かれて仕方が無いのがNetscapeとSunの生んだJavaScript。
**.htmlみたいなファイルが静の静だとすると、PHPやperlで出力するページは動の静。
で動の動をやるにはJavaScriptの出番って訳です。

なんというか、こんな風にAjaxの波が押し寄せて来てから気付くのもアレだけどさ、何でもっと真剣にやっておかなかったんだろう。
WWWを彷徨き始めた頃に始めていればコード読むのも楽だったろうなぁ。
…なんて云ってられないので、基本からやり直してます。

それにしてもネット上にTipsだけが沢山落ちてるせいか、この言語って体系的な学習に向いてない気がするのは気のせい?

叩き上げでないと使いこなせなさそうなのはイメージ先行なのか。
でも動作上無駄な記述の少ないソースが多くて、内部の動作を読むのもひと苦労。
(他の言語でも他人の書いたものはなかなか難読性高かったりするけど…)

なんにせよ、構想中なPHPスクリプトの使い勝手がどうなるかは私のJavaScript能力(?)次第です。

ライブラリが標準化/充実すればもっと一般の人たちも実が囓れるのにな。
(…囓れる実も増えてるけど、まだ苦い)

当面はweb1.5な感じを目指して勉強勉強ー。
(睡眠時間どーすんだよ)

Index of all entries

Home> programming Archives

Categories
Archives
Syndication

Return to page top