絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
Ruby-CGI-uploder 作り
Ruby on Railsっていうのあるけど
物凄く使い方がわからない
いつになってもわからない、(利点はわかるけど)
そんで、さらにRuby on Railsを使わないCGIのサンプル乗せてるサイトが
全然ないので、RoR頼らず作りたい人も他にいるかなって思って
ちょっとアップローダーの作り方でも乗せてみます
この記事でかいてるrubyはRuby1.9.3p0です
まず、Ruby-CGIを動かす環境作りですね
http://www.ruby-lang.org/ja/old-man/html/WEBrick_HTTPServer.html
こことかをみて、まぁこんなサーバーをかいてみます
物凄く使い方がわからない
いつになってもわからない、(利点はわかるけど)
そんで、さらにRuby on Railsを使わないCGIのサンプル乗せてるサイトが
全然ないので、RoR頼らず作りたい人も他にいるかなって思って
ちょっとアップローダーの作り方でも乗せてみます
この記事でかいてるrubyはRuby1.9.3p0です
まず、Ruby-CGIを動かす環境作りですね
http://www.ruby-lang.org/ja/old-man/html/WEBrick_HTTPServer.html
こことかをみて、まぁこんなサーバーをかいてみます
require 'webrick'
require "socket"
$localip = IPSocket::getaddress(Socket::gethostname)
http = {
:ServerName => "test_server_", # WEBrick::Utils.getservername
# :BindAddress => $localip, # "0.0.0.0" or "::" or nil
:BindAddress => "127.0.0.1", # "0.0.0.0" or "::" or nil
:Port => 80,
:MaxClients => 100, # maximum number of the concurrent connections
:ServerType => nil, # default: WEBrick::SimpleServer
:Logger => nil, # default: WEBrick::Log.new
:ServerSoftware => "WEBrick/#{WEBrick::VERSION} " +
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp',
:DoNotListen => false,
:StartCallback => nil,
:StopCallback => nil,
:AcceptCallback => nil,
:DoNotReverseLookup => nil,
:RequestTimeout => 30,
# :HTTPVersion => HTTPVersion.new("1.1"),
:AccessLog => nil,
:MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes,
:DirectoryIndex => ["index.html","index.htm","index.cgi","index.rhtml"],
:DocumentRoot => "./",
:DocumentRootOptions => { :FancyIndexing => true },
:RequestCallback => nil,
:ServerAlias => nil,
:CGIInterpreter => 'C:\ruby\bin\ruby.exe',
:CGIPathEnv => nil,
# workaround: if Request-URIs contain 8bit chars,
# they should be escaped before calling of URI.parse().
:Escape8bitURI => false
}
srv = WEBrick::HTTPServer.new( http )
srv.start
# koko made
> :CGIInterpreter => 'C:\ruby\bin\ruby.exe',
ユーザーごとに変更する点は、ここだけかな
rubyのPATHあわせてください
それで
http://127.0.0.1/
にアクセスできればok
外にも公開するサーバーにする場合は
># :BindAddress => $localip, # "0.0.0.0" or "::" or nil
ここのコメントアウトをとって
http://自分のIP/
でアクセス可能
そしたら、とりあえず適当にアップローダーかいてみる
http://www.ruby-lang.org/ja/old-man/html/cgi.html#a.a5.d5.a5.a9.a1.bc.a5.e0.a5.d5.a5.a3.a1.bc.a5.eb.a5.c9.a4.ce.c3.cd.a4.f2.c6.c0.a4.eb
↑情報ふるいけどこのあたりを参考に出来るかな
下のソースの、それを
test_up.cgi
とか名前をつけて、サーバーと同じディレクトリに保存
あと、cgi_upってフォルダも作っておきましょう
んで
http://127.0.0.1/test_up.cgi
にアクセスして
"file to nil"
ってメッセージが見れたら、RubyCGI動いてます
#!/usr/local/bin/ruby
require 'cgi'
print "Content-type: text/html\n\n";
print <<-TEXT
<html><head><title> test_uploder </title></head>
<body>
<form method="POST" enctype="multipart/form-data">
file <input type="FILE" name="file">
<input type="submit" value="upload">
</form>
</body></html>
TEXT
#------------------------------------------------------------
cgi = CGI.new
value = cgi.params["file"].first
if value.nil?
print "file to nil"
else
mkfile = Dir.getwd + "/cgi_up/" + value.original_filename
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
end
print '<hr color="#88ccaa" size="5" width="350" align="left">'
Dir["cgi_up/*.{jpg,png}"].each do | m |
m = File.basename m
print "<a href=cgi_up/#{m}>#{m}</a><br>\n"
end
自分でhtmlタグ書くときに気をつける事は multipart/form-data かな
マルチパートフィールドっていうらしいんだけど、これをFORMタグのところに指定しないと
バイナリデータの通信が出来ないらしい
適当に参照で何かアップできたら成功です
jpg と png しか一覧には表示しないようにしているので
ローマ字のみのファイル名の画像等をアップロードしてみましょう
Rubyの使えるフリーのHPスペースには
http://atpages.jp/
とか、あります
あーもう危惧していた事件が
2012年1月26日
ウイルスを不正に作成 初摘発
http://www3.nhk.or.jp/news/html/20120126/t10015554911000.html
ぼくが言ってたのはこれですよこれ
http://yureconpanna.blog.2nt.com/blog-entry-170.html
だから、怖いって言ってんの!!
事実確認が、ちゃんとできたからよかったものの
所詮たかが電子データで捏造も抹消も「情報」さえ知っていれば簡単に出来て
正確にログを調べて、ウィルスに感染しているかどうかの判断はいったい誰かする?
どの程度の技術を持った人が、pcがウィルスに感染していたかどうかのチェックを出来る?
そんなエキスパートがいるとは思えないし
逆にいえば、そのエキスパートがいたとして、その人であれば完全に証拠を残さない事が出来るんじゃないでしょうか
最強の盾と矛だよ
法律が穴だらけすぎる
ハッカーとかの話
ちょっと、こんなタイトルで初心者の気を引こうとか最近自分必死っす
まず、私は他人のPCをハッキングした事もないし
ましてやハッキングツールといわれるものの使い方も知らない
けど、ハッカーというものが、どういう場所にあるか
それくらいはわかるので少し話す
まぁ、ハッキングしたくてプログラミング勉強する学生や子供多いと思うので、
無駄に遠回りしないように、してもらうための文章です
まず、ハッキングする為にC++なんて使わない
では、何の言語を使うか?
しいていうなら、Ruby、Pythonのどちらかですね
古参は未だにperlって人もいると思いますが、perlは初心者が今から覚えに行く言語ではない
何故、ハッキングにはC++ではなくRubyかPythonのどちらかが使われている
理由を言うと、まずこれらの言語には「dllライブラリ」というのを読み込む機能が備わっていまして
Rubyでかくとこんなかんじ
require"win32api"
n = Win32API.new( "filename.dll", "test_function", %w(i), 'i')
n.call 4
その「dll」ファイルというのは、どうやって作るかというと
C言語や、C++や、C#.NETといった言語から作ります
bcc32の場合は確か、こんな感じだったかなぁ
bcc32 -c filename.c
bcc32 -tWD filename.obj
implib filename.lib filename.dll
filename.c
#include
int _export test_function(int x ){
printf("test_%d" , x );
return 0;
}
まぁrubyには.soファイルもあったりするけど、正直手間がかかりすぎる
こんな感じに、スクリプト言語とC言語の連携は簡単に出来るので
C言語でライブラリを作り、dll化して
それをrubyやpythonから使う
というのが開発効率のでるハッキングでしょうね
だから自分でCでライブラリを作ってrubyで使えばハッカーなんですね!
いや、そうではない
自分で作るまでもなくフリーでその手のライブラリは公開されている傾向にある
代表的なのでmechanize
インストール方法は
>gem install mechanize
これはWebにログインフォームがあったら、ブルートフォースとか、
簡単にかけてしまうんです
ここに、そういうのは載せませんが、
Googleでruby_mechanizeから検索するソースを載せてみます
これが出来る時点で「ソレ」も出来るという事は、察しのいい人ならわかってもらえると思います
require "mechanize"
require "pp"
require 'kconv'
agent = Mechanize.new
uri = URI.parse( "http://www.google.co.jp/" )
agent.get(uri)
agent.page.form_with(:name => "f") { |f|
f.field_with(:name => "q").value = "歳納京子ちゃんぺろぺろ"
}.click_button
puts agent.page.uri
puts agent.page.body
まずgoogleにアクセスし、"歳納京子ちゃんぺろぺろ"と検索フォームを埋めて、検索した結果とURLを
puts agent.page.uri
puts agent.page.body
で表示しています
これをもし
require "mechanize"
require "pp"
require 'kconv'
("0".."9").to_a.repeated_permutation(4) do | pass |
agent = Mechanize.new
uri = URI.parse( "http://www.google.co.jp/" )
agent.get(uri)
agent.page.form_with(:name => "f") { |f|
f.field_with(:name => "q").value = pass.join # "歳納京子ちゃんぺろぺろ"
}.click_button
puts agent.page.uri
p pass.join
exit
# puts agent.page.body
end
こうしてしまえばブルートフォースなのです
googleの検索フォームでブルートフォースしても何の意味もないけどね
そういうわけで、
Webにログインフォームが用意されているような場所のハッキングなんて
すくなくともC++など使わないことはわかったかと思います
また、ftpへのアップロードやダウンロードというのも
ライブラリが用意されているので、rubyでは簡単にかける
require 'net/ftp'
file = "./test.html"
ftp = Net::FTP.new
ftp.connect('ftp.geocities.jp')
ftp.login('YahooID', 'Pass')
ftp.binary = true
puts ftp.dir
puts ftp.get( "index.html" , "test_get_file.txt")
ftp.chdir("./")
ftp.put( file , "aaaasss.html")
ftp.quit
想像のいい人には、このプログラムが作れる時点で、
ハッキングツールは作れることはわかるだろう
つまり、Webログインフォームへのハッキングに続き、FTP鯖へのハッキングツールもrubyで簡単に作れるのだ
私はrubyしかメインで触っていないのでサンプルは乗せられないが、pythonでもperlでも
ほぼ同じように、この程度の行数で書けるだろう
ちなみにrubyにはメールサーバーへの接続、つまりメールの送受信をする為のライブラリも備わっている
つまり、それを利用すると「 スパムがかける 」
C++など、使わない。
C#も使わない。
既に、( おそらくCで )ライブラリがruby用で備わっている為に、
自分でC++のソースコード( OSのAPI等 )を触る意味がないんだ
開発効率は、以下の図が覆ることは決してない
C , C++ << C# << Ruby , Python
実行速度は、この間逆となっているが
C , C++ で作られたdllの中のfunctionについては、
rubyの速度ではなく、C,C++の速度で動くので
速度の問題など決して起こらない
そもそも問題になるのは回線速度のほうだからrubyの速度でも十分なのです
このような観点からみて、現在ハッキングをする為に使われている言語はC++などではなく
現時点では開発効率の高いrubyまたはpythonであると言える
スクリプトキディっていう言葉があるけど、
実際にハッキングが出来るのはそのスクリプトキディです
なのでハッカーとかそういうのを目指している人はスクリプト言語を覚えるとよい
でも本格的にやるとすれば、それ以外にも色々な知識が必要になる
WinAPIやアセンブラ、とかそういうのじゃなくて
もっと抽象的な情報収集能力だと、思われる
---ハッキングについてはここまで
EOF
WinAPIについて、ちょっとかくと
WinAPIっていうのは、結局ところWindowsに最初から備わっている関数ライブラリのようなもので
アセンブラやCあたりで記述されているものです
関数の数がめちゃくちゃ多いので、こういうAPIが知りたい~っていっても
すぐに調べられるものではなくて、長い期間こっちの世界にいないと
めぐり合えない関数が多いから困ったものだと思います
でもクラック関連の書籍ではWinAPIの何々って関数を~
みたいな事書いてる本は多いので(試してない)
一応WinAPIは基礎だけ抑えておくと、そういった本も、読みやすくなると思います
WinAPIの基礎って何っていうと・・・
Window表示と
画像表示と、
メッセージプロシージャ辺りでしょうね
この辺りは、はっきりいってとんでもなくロクでもない実装なので覚える価値なんて皆無なんですけど
ハッカーと呼ばれるくらいになりたいならば、無駄でも覚えるしかないんでしょうね
WinAPI扱えないハッカーとか、ありえないと思いますし
でもWinAPIばっかり扱ってる人は、きっと.NETというものを知らない
ハッカーを通り越して一巡して、それはただの初心者ですから、そうならないようには気をつけるべきです
rubyのすすめ
てきとーにせつめいしますよ
まともな入門は、まともな入門ページをさがしてください
初級~中級+くらいまで一気にかきます
http://rubyinstaller.org/downloads/
初心者には、ここがいいでしょうね
ここの最新バージョンと思わしきものをDL
けどwindowsとか使ってる人には優しくないので
ダウンロードしたフォルダやディレクトリにローマ字じゃなくて日本語混じってると
インストーラー失敗しますので
失敗する場合は
C:\rubytmp\
とかディレクトリ作ってそこでインストーラー起動
そんで何事もなくインストールできたら、
cmd起動して( ロゴ+R→「cmd」と入力とかでいい )
>notepad test.rb
でrbファイル作る
print "test"
とかく
保存
>test.rb
とかく
#=>test
実行される
で、ruby1.9は色々とアレで文字コードがUTF-8しか対応してない
notepadで普通に保存すると、sjisみたいな感じになる
残念なことにnotepadではUTF-8で保存出来ない
UTF-8で保存しないとどうなるかっていうと、マルチバイトが使えない(使いにくい)
invalid multibyte char (US-ASCII)
こんなエラーがでる
これを回避するには、まぁ文字コードって何?って人には
ソースコードの1行目に
#!ruby -Ks
を入れるとか
実行時に
ruby -Ks [filename.rb]
とするとか、やってればとりあえず動く
でも、rubyをいろんな場所で使っていくにはUTF-8じゃないと不味い事のほうが多いので
UTF-8で保存できるエディタを探して、それを使おう
なので当面はterapadでソースコードをかいて、
保存するときに
文字コードの指定保存っていうのをやってUTF-8にするといい
そうするとマルチバイト文字混ざってても、エラーはでない
マジックコメントについては説明してる人沢山いるから別のブログとかでやり方みてください
この -Ks っていうのは
-K キーコード
-s SHIFT-Jis
という意味
なので
-Ku
にすれば、
-K キーコード
-u UTF
という意味
-Ke
というのもあって
これは
-e EUC
です
それじゃ、とりあえずrubyを簡単にexeにしてみよう
>gem install ocra
でocraというものをインストールします
そしたら
>ocra test.rb
とやる
成功すると
test.exeが出来ているので
>test.exe
でok
ocraは結構高性能なコンパイラなので、
windowsアプリやサーバープログラムもexeに出来るし
>ocra --icon [filename.icon] test.rb
でアイコンもつけれます
あと、rubyとgemで知っておくべきものは
このくらい
gem install rails
gem search --r ruby
gem list
あとクラスですね、クラスと、コンストラクタはこうかきます
デストラクタはないです
デストラクタないの!? って思うかもしれないけど、
ruby使ってるとほんとにデストラクタっていらないなーって思うようになりますね
その他
map_with_indexとかinject_with_indexなんていうEnumerableは宣言しなくていいから
Ruby1.9からはこう使ってください
これものすごい便利なんだけど使いこなせてる人が少ない
rubyにもforってあるけど、
なれてくると単純ループはtimes
その他はだいたい全部イテレータになると思うので
イテレータへの理解がrubyの理解です
まともな入門は、まともな入門ページをさがしてください
初級~中級+くらいまで一気にかきます
http://rubyinstaller.org/downloads/
初心者には、ここがいいでしょうね
ここの最新バージョンと思わしきものをDL
けどwindowsとか使ってる人には優しくないので
ダウンロードしたフォルダやディレクトリにローマ字じゃなくて日本語混じってると
インストーラー失敗しますので
失敗する場合は
C:\rubytmp\
とかディレクトリ作ってそこでインストーラー起動
そんで何事もなくインストールできたら、
cmd起動して( ロゴ+R→「cmd」と入力とかでいい )
>notepad test.rb
でrbファイル作る
print "test"
とかく
保存
>test.rb
とかく
#=>test
実行される
で、ruby1.9は色々とアレで文字コードがUTF-8しか対応してない
notepadで普通に保存すると、sjisみたいな感じになる
残念なことにnotepadではUTF-8で保存出来ない
UTF-8で保存しないとどうなるかっていうと、マルチバイトが使えない(使いにくい)
invalid multibyte char (US-ASCII)
こんなエラーがでる
これを回避するには、まぁ文字コードって何?って人には
ソースコードの1行目に
#!ruby -Ks
を入れるとか
実行時に
ruby -Ks [filename.rb]
とするとか、やってればとりあえず動く
でも、rubyをいろんな場所で使っていくにはUTF-8じゃないと不味い事のほうが多いので
UTF-8で保存できるエディタを探して、それを使おう
なので当面はterapadでソースコードをかいて、
保存するときに
文字コードの指定保存っていうのをやってUTF-8にするといい
そうするとマルチバイト文字混ざってても、エラーはでない
マジックコメントについては説明してる人沢山いるから別のブログとかでやり方みてください
この -Ks っていうのは
-K キーコード
-s SHIFT-Jis
という意味
なので
-Ku
にすれば、
-K キーコード
-u UTF
という意味
-Ke
というのもあって
これは
-e EUC
です
それじゃ、とりあえずrubyを簡単にexeにしてみよう
>gem install ocra
でocraというものをインストールします
そしたら
>ocra test.rb
とやる
成功すると
test.exeが出来ているので
>test.exe
でok
ocraは結構高性能なコンパイラなので、
windowsアプリやサーバープログラムもexeに出来るし
>ocra --icon [filename.icon] test.rb
でアイコンもつけれます
あと、rubyとgemで知っておくべきものは
このくらい
gem install rails
gem search --r ruby
gem list
あとクラスですね、クラスと、コンストラクタはこうかきます
デストラクタはないです
class A
attr :x
attr_accessor :y
def initialize x , y
@x = x
@y = y
end
end
a = A.new 5,6
p a.x
p a.y
デストラクタないの!? って思うかもしれないけど、
ruby使ってるとほんとにデストラクタっていらないなーって思うようになりますね
その他
map_with_indexとかinject_with_indexなんていうEnumerableは宣言しなくていいから
Ruby1.9からはこう使ってください
n=[1,2,3].each_with_index.map do | m |
m
end
p n
n=[1,2,3].each_with_index.inject 0 do | a , ( m , i ) |
a + m + i
end
p n
これものすごい便利なんだけど使いこなせてる人が少ない
rubyにもforってあるけど、
なれてくると単純ループはtimes
その他はだいたい全部イテレータになると思うので
イテレータへの理解がrubyの理解です
it プログラミング言語 go
今日はプログラミング言語Goについて
ようつべのGoについての公演動画
プログラミング言語 Go:Google DevFest 2010 Japan
http://www.youtube.com/watch?v=QKA_EIXVc9s
Google Developer Day 2010 Japan : プログラミング言語 Go
http://www.youtube.com/watch?v=8Em8Z9FOk4w
本家
http://golang.org/
http://golang.org/doc/effective_go.html
日本語翻訳とか色々
http://go.shibu.jp/
http://golang.jp/
とりあえず、この記事を書くためにこのあたりを見て、そっこーで知識つけてきた
そういうわけで今、ぼくはこのくらいGo言語をかけます
GoはRubyとは違って高速ネイティブを吐くコンパイラ言語としての立ち位置を目指しているはずで
C,C++の位置にこの言語がこれる事が好ましい
いい加減、C++はもうイヤだって人多いと思うから
まず、Goによくみられる
x := 4
みたいな記述は、変数宣言と、代入を表している
それの省略記法ですね
省略しないでかくと
var x = 4
に、なる
こんなことしなくても
x = 4
で変数宣言&代入でいいじゃん!
って誰でも思うけど、そこは・・・やっぱりコンパイラ言語なので、最適化とかしたいから、
スクリプト言語程には柔軟に作る事が出来ない
柔軟にしちゃえよって思うけどね
普通にかいた場所では最適化しまくって高速な機械語はいて
スクリプト言語染みた記述をした場所では、ちょっと最適化なしで機械語はけば良いだけなんだけど
思うような言語を誰も作ってくれない
上の動画二つを早送りでも適当にみてチュートリアルのサイト読めば、Go言語はおおよそ理解できると思う
あとこの言語は、並列処理についてもよく考えていく言語なのかな
ゴルーチンとかいう怪しいものがある
文の末尾の;がなくなっただけでも、C++よりも、D言語よりも、マシでしょうね
ただ、末尾の;なくすくらいなら括弧も外して
print x で出来るようにしたらいいのにって、思っちゃうけど
難しいか
でも多分、このままこの言語の開発が順調に行けば
多少はC,C++の代わりに使われていくようになる可能性はある
たった2,3年でここまで来たのは他のプログラム言語の開発速度から見たらとても凄い事です
さすがにGoogleがやってるだけはある
でも、使われない可能性もあって
理由としては、パソコンのスペックが年々どんどん上がって
並列処理への関心も高まっていること
もし、家庭pcでもコア数が10個とか20個になって
並列処理の技術も完成しちゃったら、
多分、高速な機械語を吐くプログラミング言語なんて多分いらなくなって
言語とか何でもよくなる
勿論ハードウェア周辺では、高速な言語で書くことになると思うけど
高速な言語を使わなければならない箇所っていうのは、pcスペックの上昇とともに
どんどん小さくなっていく
けど、どちらにしろ未だにC言語で書かなくちゃいけないとか
ありえなすぎると思うので
Go、この言語が形になれば、
ポツポツとCの代わりに採用していく企業が出てくるんじゃないかなって思っています
あと5年は、かかると思うけどね
実はちょっと今日Goの仕様を調べてがっかりしてるんだ
文章のテンションみてわかるかな
ちょっと見た感じでは、もしかしたらスクリプト言語並の開発効率を
Go言語でも出せるかなーって期待していたんだけど、全然そんなことなかった
C++よりはマシっていうくらいですね、今のところ
やっぱり自分はスクリプト言語つかってで楽に生きてたほうがよさそうだ
ちなみに今のところGoを実行する方法は4つくらい
1、GCCGO
Linuxだったら入れやすい?windows版はあるか知らない
2、6g 8g とかいう謎コンパイラ
http://code.google.com/p/go-windows/downloads/list
3、ideone
Webから使える
4、http://golang.org/
Webから使える
ようつべのGoについての公演動画
プログラミング言語 Go:Google DevFest 2010 Japan
http://www.youtube.com/watch?v=QKA_EIXVc9s
Google Developer Day 2010 Japan : プログラミング言語 Go
http://www.youtube.com/watch?v=8Em8Z9FOk4w
本家
http://golang.org/
http://golang.org/doc/effective_go.html
日本語翻訳とか色々
http://go.shibu.jp/
http://golang.jp/
とりあえず、この記事を書くためにこのあたりを見て、そっこーで知識つけてきた
package main
import "fmt"
func fib() func() int {
b := 2
return func() int {
b = b*b
return b
}
}
func main() {
f := fib()
println(f(), f(), f(), f(),)
for i := 1; i < 10; i++ {
for k := 1; k < 10; k++ {
if k*i < 10 { fmt.Print(" ") }
fmt.Print( k*i , " ")
}
fmt.Println( )
}
x := []int{1,2,3}
y := []int{4,5,6}
x = append(x[:3] , y...)
fmt.Println(x)
type A struct {
x int
}
b := new(A)
b.x = 91
println(b)
hello()
}
var a string
func f() {
print(a)
}
func hello() {
a = "hello, world";
go f();;;
print("test");
}
>
4 16 256 65536
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
[1 2 3 4 5 6]
0xf840000208
test
そういうわけで今、ぼくはこのくらいGo言語をかけます
GoはRubyとは違って高速ネイティブを吐くコンパイラ言語としての立ち位置を目指しているはずで
C,C++の位置にこの言語がこれる事が好ましい
いい加減、C++はもうイヤだって人多いと思うから
まず、Goによくみられる
x := 4
みたいな記述は、変数宣言と、代入を表している
それの省略記法ですね
省略しないでかくと
var x = 4
に、なる
こんなことしなくても
x = 4
で変数宣言&代入でいいじゃん!
って誰でも思うけど、そこは・・・やっぱりコンパイラ言語なので、最適化とかしたいから、
スクリプト言語程には柔軟に作る事が出来ない
柔軟にしちゃえよって思うけどね
普通にかいた場所では最適化しまくって高速な機械語はいて
スクリプト言語染みた記述をした場所では、ちょっと最適化なしで機械語はけば良いだけなんだけど
思うような言語を誰も作ってくれない
上の動画二つを早送りでも適当にみてチュートリアルのサイト読めば、Go言語はおおよそ理解できると思う
あとこの言語は、並列処理についてもよく考えていく言語なのかな
ゴルーチンとかいう怪しいものがある
文の末尾の;がなくなっただけでも、C++よりも、D言語よりも、マシでしょうね
ただ、末尾の;なくすくらいなら括弧も外して
print x で出来るようにしたらいいのにって、思っちゃうけど
難しいか
でも多分、このままこの言語の開発が順調に行けば
多少はC,C++の代わりに使われていくようになる可能性はある
たった2,3年でここまで来たのは他のプログラム言語の開発速度から見たらとても凄い事です
さすがにGoogleがやってるだけはある
でも、使われない可能性もあって
理由としては、パソコンのスペックが年々どんどん上がって
並列処理への関心も高まっていること
もし、家庭pcでもコア数が10個とか20個になって
並列処理の技術も完成しちゃったら、
多分、高速な機械語を吐くプログラミング言語なんて多分いらなくなって
言語とか何でもよくなる
勿論ハードウェア周辺では、高速な言語で書くことになると思うけど
高速な言語を使わなければならない箇所っていうのは、pcスペックの上昇とともに
どんどん小さくなっていく
けど、どちらにしろ未だにC言語で書かなくちゃいけないとか
ありえなすぎると思うので
Go、この言語が形になれば、
ポツポツとCの代わりに採用していく企業が出てくるんじゃないかなって思っています
あと5年は、かかると思うけどね
実はちょっと今日Goの仕様を調べてがっかりしてるんだ
文章のテンションみてわかるかな
ちょっと見た感じでは、もしかしたらスクリプト言語並の開発効率を
Go言語でも出せるかなーって期待していたんだけど、全然そんなことなかった
C++よりはマシっていうくらいですね、今のところ
やっぱり自分はスクリプト言語つかってで楽に生きてたほうがよさそうだ
ちなみに今のところGoを実行する方法は4つくらい
1、GCCGO
Linuxだったら入れやすい?windows版はあるか知らない
2、6g 8g とかいう謎コンパイラ
http://code.google.com/p/go-windows/downloads/list
3、ideone
Webから使える
4、http://golang.org/
Webから使える
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
より引用
これはperlだけをずっと使ってなければ使いこなせない類のものだと思います
あと、この省略記法のせいでソースコードが記号だらけになる・・w
だからちょっと記号につよい人?以外は、この言語で効率だすのは無理じゃないかと思ってる
でも今、世の中に広がってる言語の中ではperlは悪くはない、ぜんぜん素晴らしいほうです
省略記法のアイディアだけは、最高
次にphpですが
この言語には「良い点」が何もないはずなんですが、(見た目上は)
内部実装が、ちょっと他の言語と比べたら良いんでしょうね
あとフレームワークが豊富だったり、
だから、仕事でPHP使ってる人はとても多いはず
求人の募集もPHPは多いです
多いですけど、!! 何故、こんな何の変哲もないperl以下の言語が広まってしまったのか理解できない
まぁ、思ったよりも、人がperlを使えなくて
自由度の低いphpじゃないとソースコードがかけないって人が、きっと多かったんだと思います
perl→phpは、はっきりいって プログラミング技術が退化 しています
http://www.scollabo.com/banban/php/php_08.html
より引用
こんな感じのひどすぎるソースしか、PHPにはかけません
しいていうなら、
C言語を動的言語にして、変数に$をつけて < > で囲ったのがPHPです
私には、「動的C言語」としか、phpを見ることは出来ません
どれほど開発効率が悪いのか・・・
ここへきてやっと私からのオススメ言語のrubyですが
forループはこんな感じ
で、先に話したイテレータは
こんな感じになりますね
このendっていうのに、なれることが出来ないと、rubyは使えないのかもしれませんが
慣れる事が出来れば、きっと強力な道具になってくれると思います
これはブロック構造といって
普通のプログラミング言語は
こういうインデント構造ですがrubyは
極端にいえば、こういう風になる言語ですね
あまり右側へ右側へネストするようにはならない書き方っていうのが
いろんなメソッドやイテレータや言語の機能によって用意されている言語なので
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っていうプログラミング言語についても
かきたいんだけど、今日は時間が来てしまったので後日かく
色々かきたいことが溜まっているんだけど
全部を書き綴る時間はないかもしれないけど、かけるところまで今日かいていく
そろそろこのブログ主の本性が・・・
まず、かきたいことは
どうやって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っていうプログラミング言語についても
かきたいんだけど、今日は時間が来てしまったので後日かく
2ch鯖おち 2011-01-21~~22
ずっと原因が不明っていわれてたけど
運営スレはなんかハードの故障ということでまとまってる
まぁもし誰でも鯖を落とせるようなバグだった場合
公表しちゃ不味いしね
寿命での故障じゃなくて
外部要因による故障だったらおもしろかったけど
真偽はどうでしょう
2ch運営は大変ですね