絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Goのソースコードと、あとこれからの事をいくつか
なんか、あったので

http://code.google.com/p/go/source/browse/#hg

ああもう、

これはやっぱダメかな
C言語を、最後の最後に正しい形にしたかったっていう
気持ちは伝わってきたけど

この言語を出すなら、せめてC++でた直後かC++より前に出さないと

C++がもう既にかなり成長したからGoがC++よりも使われるようになる未来は、
来るかどうかわからない

Go言語のこれは、

x := 7
var x = 9
var x int

全ての静的言語で見習うべきだけど、Goの利点は今の所はこれと
行末の「;」ないって事だけ

ゆっくり見守るしかないけど
Goのソースは見た目が未だにCで出来ている

ちょっと、時代がもう違うと思う


関数( 引数 )
じゃなくて

変数オブジェクト.関数.関数

って形にしないと
オブジェクト指向は上手くいかない

関数( 引数 ) とか
関数( 関数( 引数 ) ) こういうのは、関数型言語の書き方だと思う
正直、Ruby以外の言語は関数型言語の書き方で、オブジェクト指向をやろうとしてると思う
一応

var.function().function().function()

ってソースはC#あたりでもあったりするけど、やっぱり括弧が冗長なんだよね

var.function.function.function じゃないと、だめぽい

あと、特に重要なのがイテレータ

イテレータを、「イテレータを作ってforで廻す」みたいな発想の言語ばっかりだと思う
forにbegin(),end()指定したり、 foreachとか ね

Rubyみたいに制御文を増やそうよ

each とか map とか reject とかさ

そうしないと
開発効率はあがらないよ
制御文っていうか、「ループ制御も出来るイテレータ型を返すメソッド」ですね
重要なのは、そこの設計

C#は、根幹から書き換えないと、もうそゆこと出来ないから
もうだめかな

rubyさえ伸びれば
他の言語なんて、それほど使われなくなると思うんだけどね
いかにして
rubyの速度でも十分だっていう事と、rubyが開発効率のでる言語だという事を知らしめるかだと思う
そうすればC#,JAVAなど敵ではない

今後もrubyよりもさらに上の言語が出てくるとは思うけど、
現時点ではかなり、他言語と比較して上をいってる言語だから
とりあえずはこの言語が広まるんだったら、しばらく文句は出ないと思う
ていうかPHPユーザーとかって、よくPHPのソースコードかいていられるな位には思う
なんで、かいていられるんだろう。ruby狂になってる自分じゃ精神的に無理
この自分の見識がズレているとは思わないから
少なくともWebアプリケーションは、RubyのほうがPHPより速度が遅いとしても
Rubyで書き換えられていくと思う
PHPにちょっと未来は見えないから

だから、Webアプリの世界はほうって置いてもPHP死んでくれると思って
あとはJAVAをどうやってどかすかだよね

JAVA程の速度はいらないアプリケーションも沢山ある
pcのスペックは年々上がるので
年々JAVAは使われなくなり、Rubyが使われるようになる
はずなんです
あとはGUIアプリ製作用のフレームワークと、rubyの速度でも十分ですよっていう印象付けかな

それと静的VM言語っていらないと思うよ
C#,JAVAのことですよ
静的型付けしてネイティブ吐くのか、
動的型付けでVMで動かすのかどっちかにしろと、中途半端な速度でどっちつかずの言語はいらないって
静的型付けネイティブで唯一まともに使えるのが、あのとんでもなく仕様の広いC++しかないから
C++扱える技術者不足でC#,JAVA使われているけど、
マジで静的VM言語は、使いどころなんて本来どこにもないはずだった
ああ、はやく駆逐してあげないとね><
    0..
Ruby-CGI-uploder 作り 2


前回のソースコードからやったことは3つ
ファイルサイズを、とりあえず100kByteに制限
例外を使って処理をまとめた
アップロードできる拡張子を、jpgとpngに制限



#!/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
#------------------------------------------------------------
folder = "cgi_up"

cgi = CGI.new
value = cgi.params["file"].first
begin
raise "file to nil" if value.nil?
raise "kakutyousi_err" unless File.extname( value.original_filename ) =~ /\.jpg$|\.png$/
raise "size over" if 100_000 < value.size

mkfile = Dir.getwd + "/#{folder}/" + value.original_filename.gsub(/[^\w!\#$%&()=^~|@`\[\]\{\};+,.-]/u, '_')
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
rescue => ev
print ev
end

print '<hr color="#88ccaa" size="5" width="350" align="left">'

Dir["#{folder}/*.{jpg,png}"].each.each_with_index do | m , i |
size = File.size m
m = File.basename m
print "<img src='#{folder}/#{m}' height='200'> "
# print "#{i} _ <a href=#{folder}/#{m}>#{m}</a> _ #{size} byte <br>\n"
end






ちょっと、いくつか勝手に画像使わせていただきました

conp_cgi1_r.jpg



あとは
ファイルの削除機能とリロード?を、つけてみる
delete_numのところに数字を入れてdeleteを押すと削除される



#!/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>
<form method="POST" enctype="multipart/form-data">
delete_num <input type="input" name="del_file">
<input type="submit" value="delete">
</form>
<a href="#{File.basename __FILE__}"> reload </a>

</body></html>
TEXT
#------------------------------------------------------------
folder = "cgi_up"

cgi = CGI.new
value = cgi.params["file"].first
begin
raise "file to nil" if value.nil?
raise "kakutyousi_err" unless File.extname( value.original_filename ) =~ /\.jpg$|\.png$/
raise "size over" if 300_000 < value.size

mkfile = Dir.getwd + "/#{folder}/" + value.original_filename.gsub(/[^\w!\#$%&()=^~|@`\[\]\{\};+,.-]/u, '_')
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
rescue => ev
print ev
end

print " _ "

value = cgi.params["del_file"].first
begin
raise "" if value.nil?
file = Dir["#{folder}/*.{jpg,png}"][ value.to_i ]
raise "delete_err" if file.nil?
File.unlink file
puts "delete is " , file
rescue => ev
print ev
end


print '<hr color="#88ccaa" size="5" width="350" align="left">'

Dir["#{folder}/*.{jpg,png}"].sort do | a , b |
File.mtime(b) <=> File.mtime(a)
end.each_with_index do | m , i |
size = File.size m
m = File.basename m
print "<img src='#{folder}/#{m}' height='200'> "
print "#{i} _ <a href=#{folder}/#{m}>#{m}</a> _ #{size} byte <br>\n"
end





また少々画像を使わせていただいています

conp_cgi2_r.jpg



他にやったことは、ファイルの更新日時順に並べたり、とかですね

このアプロダにあと足りない機能は、
ファイルが一定数を超えたら、古いものから削除していく機能だけど

そういうのは、ここにかくよりも、
別プロセスでスケジュールたてるとか
サーバー起動時に別スレッドを起動しておくとかで



n = Dir["#{folder}/*.{jpg,png}"].size - 50

if n > 0
Dir["#{folder}/*.{jpg,png}"].sort do | a , b |
File.mtime(b) <=> File.mtime(a)
end.reverse.take( n ).each do | m |
File.unlink m
end
end



定期的にこんな感じのスクリプトを実行してやったりする手もあります
べつにアップロードされすぎて容量いっぱいになったら
どうせHDDへ書き込みをしようとしたときに、エラーが出るはずなので
パソコンが壊れたりすることはありません



ruby uploader の作成でした  終
    0..
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

こことかをみて、まぁこんなサーバーをかいてみます



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



conp_cgi0_r.jpg


自分でhtmlタグ書くときに気をつける事は multipart/form-data かな
マルチパートフィールドっていうらしいんだけど、これをFORMタグのところに指定しないと
バイナリデータの通信が出来ないらしい

適当に参照で何かアップできたら成功です

jpg と png しか一覧には表示しないようにしているので
ローマ字のみのファイル名の画像等をアップロードしてみましょう


Rubyの使えるフリーのHPスペースには
http://atpages.jp/
とか、あります



    0..
あーもう危惧していた事件が

2012年1月26日
ウイルスを不正に作成 初摘発
http://www3.nhk.or.jp/news/html/20120126/t10015554911000.html




ぼくが言ってたのはこれですよこれ
http://yureconpanna.blog.2nt.com/blog-entry-170.html


だから、怖いって言ってんの!!

事実確認が、ちゃんとできたからよかったものの

所詮たかが電子データで捏造も抹消も「情報」さえ知っていれば簡単に出来て
正確にログを調べて、ウィルスに感染しているかどうかの判断はいったい誰かする?
どの程度の技術を持った人が、pcがウィルスに感染していたかどうかのチェックを出来る?

そんなエキスパートがいるとは思えないし
逆にいえば、そのエキスパートがいたとして、その人であれば完全に証拠を残さない事が出来るんじゃないでしょうか
最強の盾と矛だよ
法律が穴だらけすぎる
    0..
ハッカーとかの話

ちょっと、こんなタイトルで初心者の気を引こうとか最近自分必死っす


まず、私は他人の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というものを知らない
ハッカーを通り越して一巡して、それはただの初心者ですから、そうならないようには気をつけるべきです
    1..
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の理解です
    0..
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/


とりあえず、この記事を書くためにこのあたりを見て、そっこーで知識つけてきた


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から使える
    0..
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鯖おち  2011-01-21~~22

ずっと原因が不明っていわれてたけど
運営スレはなんかハードの故障ということでまとまってる

まぁもし誰でも鯖を落とせるようなバグだった場合
公表しちゃ不味いしね

寿命での故障じゃなくて
外部要因による故障だったらおもしろかったけど
真偽はどうでしょう
2ch運営は大変ですね
    0..
mikke_r.jpg

mike2_r.jpg

toriii_r500.jpg

yurrre_0r.jpg


絵描いてないわけじゃなかったんだけどアップ未満絵が多かった
にゃんにゃんにゃんにゃん
漫画描いてみようと思ったら1コマ目かいてから2週間くらいたった
どうしたらいいの
    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..
2012年1月1日 14時28分 ごろ 鳥島近海 7.0 最大深度4  震源370km
一応メモ

震源地が南のほうなのに、東北のほうがやたら揺れているのは
やっぱ3.11のでプレートがやわらかくなってるって事なのかなあ

それとも深い位置の地震だから
震源地とか実は大して関係なかったっていう可能性もある

でも、東北のほうのプレートがやわらかくなってるっていうなら、
いったい、元の硬さに戻るまで何年かかるんだろう・・・って思ってしまうね

だからゆるい揺れはこれから数年間~10年位は続くんでしょう
でも、ゆるい揺れが定期的に起こるんだったらM9.0クラスの力がそこに溜まる事はないと思うから

大きな地震は当分東北には来ないのかなぁ
くるくるいわれているのは東南海だね

何ヶ月か前に深夜にそこら辺に震度5くらいの地震おきて
気象庁から、特番で東南海地震との関連性はありませんとか
放送してたよね

でもよく関連性とかわかるよね
今回のも関連性ないとか言ってるけど
漏れ様の科学で言わせてもらうと、深い場所で地震おきたら
その上の地盤すべてに影響するから
直接の関連性はないとしても、すべてのステータス+1だよね
あけおめ
    0..
kakikomi