絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
it
ちょっと最近は絵ではなく技術関係のことばかり


色々かきたいことが溜まっているんだけど

全部を書き綴る時間はないかもしれないけど、かけるところまで今日かいていく

そろそろこのブログ主の本性が・・・


まず、かきたいことは

どうやってJAVAをはじめとした「効率の悪い言語」を駆逐するか
自分が使わないってだけじゃ物足りなくて
なんか世界中でそれが使われているっていうのが気分悪いのですね


はっきりいって効率が悪い
自分も言語の全てを知っているわけじゃないけど
さらっとほとんどの言語の入門程度は、Webや書籍でみてきているので
おおよそはほとんどの言語を使えるはず

その上で、今2012年。1月、今現在最もすぐれているのは
Rubyであると、断言できる

イテレータ って知ってるかな?

C言語でいうなら、連結リストのループ文ですね
C++のSTLでかくと
http://www.geocities.jp/ky_webid/cpp/library/012.html
より。引用
iter_swap( it1, it2 ); // 2つのイテレータが参照する値を交換する
for( it1 = nums.begin(); it1 != nums.end(); ++it1 )
{
cout << *it1 << endl;
}

こういうやつ

Rubyではそのイテレータというものにまず力が入っていて
[1,2,3].each do
end
これでイテレータなんですよね

これはあんまりない。

C#.NETも、オブジェクト指向だから
o.function().function2().function3(); って形で色々と処理出来るようになってるけど
function(関数)とイテレータは、違うんです

プログラミングは、きわめていくとっていうか、
リファクタリングの限りを尽くしていけば、
for文ではなく、イテレータ文を書くことになるって事は
CやC++ずっとやってきた人で、ある程度、手の込んだことやってたならわかると思う

で、そのイテレータをかく為に、長い長い連結リストの宣言を書いたり、
STLの使い方を一々調べたりするわけですね

rubyは動的言語なので、型とか気にせずに一気に「それ」が出来る

JAVAやC#.NETにあるイテレータとは決定的に違うので
ここで一気に効率の差が出てきます


rubyで現在足りていないのはJAVAに勝つための実行速度ですが、
それについては並列化して、「JAVAの速度程ではなくてもRubyの速度でも十分OKがでるレベルの」速度がほしいんです

動的言語と、静的言語(java)では、どうやってもjavaのほうが速くなるから、ここは無理

Rubyと同じフィールドにいる言語としてperl , php , Pythonといった言語がある

自分がプログラム覚えはじめの数年前は確かにrubyよりperlのほうが情報ヒットしやすかったから、
perlのほういってる人はいると思うんだけど、

perlって
http://perlgeek.de/en/article/5-to-6
(2012年現在の最新ver perl6 )
こんなんですよ
英語は読めなくてもよいので、灰色のソースコードだけを見てくれればいい

まずクラス宣言が冗長していて、perlはperl6になっても、オブジェクト指向は出来くて
手続き型プログラミングにしか向かないでしょうね
一応、perlには省略記法っていう、かなり最高なものがあったり
http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod
より引用

while (<>) {
chomp;
if (s/\\$//) {
$_ .= <>;
redo unless eof();
}
# now process $_
}

こういう事が出来たりはして、ある意味では凄いんですが


for 0..5 {
print $_;
}
print "test" for 0..3;



これはperlだけをずっと使ってなければ使いこなせない類のものだと思います
あと、この省略記法のせいでソースコードが記号だらけになる・・w
だからちょっと記号につよい人?以外は、この言語で効率だすのは無理じゃないかと思ってる
でも今、世の中に広がってる言語の中ではperlは悪くはない、ぜんぜん素晴らしいほうです
省略記法のアイディアだけは、最高


次にphpですが
この言語には「良い点」が何もないはずなんですが、(見た目上は)
内部実装が、ちょっと他の言語と比べたら良いんでしょうね
あとフレームワークが豊富だったり、
だから、仕事でPHP使ってる人はとても多いはず
求人の募集もPHPは多いです

多いですけど、!! 何故、こんな何の変哲もないperl以下の言語が広まってしまったのか理解できない
まぁ、思ったよりも、人がperlを使えなくて
自由度の低いphpじゃないとソースコードがかけないって人が、きっと多かったんだと思います
perl→phpは、はっきりいって プログラミング技術が退化  しています


http://www.scollabo.com/banban/php/php_08.html
より引用

for($a = 0; $a < 4; $a++) {
$lectur = array("HTML","XHTML","XML","JavaScript","PHP");
print($lectur[$a]). " \n";
}
?>



こんな感じのひどすぎるソースしか、PHPにはかけません

しいていうなら、
C言語を動的言語にして、変数に$をつけて < > で囲ったのがPHPです
私には、「動的C言語」としか、phpを見ることは出来ません
どれほど開発効率が悪いのか・・・


ここへきてやっと私からのオススメ言語のrubyですが
forループはこんな感じ

for i in 0..4
print i
end


で、先に話したイテレータは

n=[2,3,4,5]
n.each do |x|
print x
end


こんな感じになりますね

このendっていうのに、なれることが出来ないと、rubyは使えないのかもしれませんが
慣れる事が出来れば、きっと強力な道具になってくれると思います

これはブロック構造といって
普通のプログラミング言語は

a {
b {
c {
}
}
}

こういうインデント構造ですがrubyは

極端にいえば、こういう風になる言語ですね

a.b do
c { }
end


あまり右側へ右側へネストするようにはならない書き方っていうのが
いろんなメソッドやイテレータや言語の機能によって用意されている言語なので
    end
   end
  end
 end
end
といったようなソースになってしまう頃は
まだrubyをきっと使いこなせていない段階ですね

rubyの何が優れているかって言われたときに、それが一つではなくて複数個あって
なかなか本当に説明しづらいんです

まず、
1つめとして、イテレータ
2つめとして、クラスが使える(perlでもphpでも使えるけど、もっと高機能なクラス)
3つめとして、特殊な関数が多い

特殊な関数
例えば、ここでは詳しく説明しませんが
method_missing
.ljust
.reverse
include
extend
Class.new
Module.new

このあたりが、とても優れている
あと配列の宣言やハッシュ宣言っていうのが
[]

{}
だけなんですよね
これでaは配列です
a = []

a = [2,3,4,5]


これでハッシュ
a = {:x => 66 , :y =>99 }

このあたりも、PHPやperlと比べてどれだけすっきりしているかがわかると思う




rubyの欠点は、速度といわれますが、
それはRuby1.8までが遅すぎたせいで
そのせいで、Rubyは遅いというイメージが付きまとってしまった

Ruby1.9は、Webアプリケーションを作るには十分速いです
perlとphpと同じ程度には、速度でてます


現在rubyを使っている人のほとんどは、
日ごろの作業の自動化や、ちょっとしたツールを作るときや、Webアプリケーションだと思います

けれど、WebアプリケーションのほうではまだPHPがほんとによく使われているみたいなんですよね
Ruby技術者が不足しているか、
あるいはPerlほどではないにしろ、PHPよりは難解な言語だと思うので
習得している人が足りないとか、そんなところだと思う
でもRuby覚えちゃえば、二度とPHPのソースコードかこうとはしないと思います


現在Rubyはjavaに置き換えられないかと、そういう段階にきていると思う
随分前にJAVAからRubyへという、ちょっと「え?はやすぎでしょ」って思う書籍が売られてたけど

そろそろ、そのあたりまで来てるはずです
あと必要なのは、GUIアプリケーションを作る為のRuby開発環境ですね

最後Rubyの話ばかりになってしまいましたが、
ようは2012年の現時点では開発効率が最高だと思う言語のRubyを奨めて
開発効率の悪い言語には、退場してもらいたいのです

色々サンプルとか乗せてってもいいけど、自分がソースコードかいてもけっこう中途半端になること多いので( 他人に読ませるような教科書コードがかけない)
それはやめておこうかなと思ってます


あとGoogleの開発しているGoっていうプログラミング言語についても
かきたいんだけど、今日は時間が来てしまったので後日かく



    0..
犯罪予告とかの書き込みについての事
ネット上に犯罪予告をかいて逮捕される人が近年増加してる

けどこれは本当に、本人が書き込んだものなのかね


2chにプログラムから書き込ませる方法はいくつかあるんだけど、
一番簡単なのがMechanizeってライブラリを使う事
Ruby,Perl,Python,PHPあたりには存在してると思う

これはデーモン化されたブラウザみたいなもので
例えば2chへの書き込みとかは
ほんの少しのソースコードで書き込める

ただ2chはクッキーとかの書き込み仕様が半年おきくらいに変わっちゃうから

このソースコードも実はもう意味がないけど、前は動いてたやつを乗せてみる


require 'mechanize'
require 'kconv'
require 'pp'

agent = Mechanize.new
uri = URI.parse("http://hayabusa.2ch.net/test/read.cgi/news4vip/1326177269/l50")
uri2 = URI.parse("http://hayabusa.2ch.net/news4vip/")

agent.get(uri)

str = "PON=softbank127000000001.bbtec.net"
Mechanize::Cookie.parse(uri2, str){|c| agent.cookie_jar.add(uri, c)}
#str = "HAP=FOXdayo~~~~っていうクッキーを入れる"
Mechanize::Cookie.parse(uri2, str){|c| agent.cookie_jar.add(uri, c)}

agent.page.form_with(:name => nil) { |f|
f.field_with(:name => "FROM").value = "!ninja"
f.field_with(:name => "MESSAGE").value = "test_test"
f.field_with(:name => "mail").value = "sage"
}.click_button
puts agent.page.body
sleep 1
agent.page.form_with(:name => nil).click_button
p :submit

puts agent.page.body
pp agent


あっ、ちなみにぼくはルイキチではないです
適当なスレのURL欲しかった

クッキーの情報については、ぼくのpc個人情報からクッキーとか作られてると面倒なので念のためにのせませぬ(どうせ動かないソースコードだしね)

まぁこんな感じでこの程度の行数のソースコードで実装できる

2ch以外でクッキーの特殊な設定や画像認証もないような投稿フォームだったら
もっと簡単に自動投稿のスクリプトかけます

したらばbbsだったら、クッキーの設定いらないと思うから
2chよりは楽かな


そういう感じに、ウィルス等に感染して、
第三者によって勝手にWebフォームから適当な文字列入れられて送信したり
2chへ何か勝手にスレッドたてたりレスをしてしまう、等を遠隔的に行う事は
Mechanizeっていうフリーのライブラリで結構簡単に出来ますよってこと

このあたりについて、犯罪予告等で検挙してる警察さんはどういう考えで動いているのか、気になるよね。
PC押収したときに、ウィルス感染チェックを100%しきれるわけもないし

それに
2008年に起こった予告inのクロスサイトスクリプティングの事件で
ニュー速vipに大量に犯罪予告が書き込まれて、
一晩だけ凄いことになってた
だいたいあれは、2000~3000くらいの犯罪予告が
XSSによって書かれたと思う
流石にどうみても自動で書き込まれてる犯罪予告は警察もスルーしたと思うけど
悪意のある誰かがああいうことやろうとすれば、やれちゃうって事の証明だった

ウィルスによって書き込みがされ、誰かに罪を擦り付けられてるかも知れない可能性については
「自分や殆どの人はそんなプログラムを作れない」とか、国や警察は思って、
プログラムをかける人たちを甘く見ていて、
その可能性について、考えないようにしているような気がするので
ちょっとだけ指摘をかいてみた



プログラミングの敷居はこれからも情報の充実とともにどんどん下がっていくから
Windowsの自動操作系のプログラムを、
中学生や高校生くらいでも作れる子が多くなってくると、
そのくらいの子じゃネットの法律とかわかってないだろうし
どんどん悪戯が増えると思うよ

だから、いずれこの法律は変えなくちゃいけないんじゃないのって思ってる
まだ、この手のプログラムやウィルスで本気で悪戯を行う人が出てきてないってだけで
技術持ってる人がほんの1人、このやっちゃいけない暗黙の了解を突破したら
確実に法律を変えるしかない

自分が中学生の頃に、rubyとmechanizeを知っていたら
何かやってたかもしれない、pcに興味もっちゃう子供ってそんなもんだよ
できることは何でもやるよ

てかネットで悪さやって特定されて逮捕される人たちは、
自分のIPアドレスのままやってるから特定されて逮捕されるだけで
もし海外プロキシーを、ほんの1個でも経由して悪さした場合って、警察は海外のそのPCを押収して調べるの・・・?
日本と仲のいい国だったらいいけど、仮に2chに書き込まれた犯罪予告が、
北朝鮮のプロキシーサーバー経由とかだったらどうするの・・・?
PC押収とか不可能でしょ・・・・・・・・・
小さな事例でやるには難しいよ

時間が経過すればプロキシーサーバーのアクセスログだって残っているか怪しい
そもそも個人で串たててる人がいっぱい居るから、アクセスログなんていちいち保存しないよねぇ・・・

そんな粗だらけのネット法律が、ちょっと気にくわないのでした





    0..
kakikomi