絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は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..
kakikomi