「GOto」を含む日記 RSS

はてなキーワード: GOtoとは

2019-04-05

anond:20190405101058

あなたもそうですがGOTOを知っていた上で微妙だと思っているわけです。

 ← いやいやw それは40年くらい前にBASIC言語プログラミングしてた頃の話w

その後、月刊ASCIIとかの雑誌構造プログラミングの事を知って、Pascalだのヴィルトだのダイクストラだのの名前を聞きかじって、大学Pascalを学んで、「やっとGOTO文無しでプログラミングできるぜ!」と喜んでたよ。

いざ「GOTOなんて知らない」という人たちが主流になったらビックリするのでは?

 もう既にそうなって来ているのでは? JavaですらGOTO文は無いし、最近言語も無いのが多い。

anond:20190405094559

でもGOTO不思議とみんな知ってますよね?

GOTOを実際に使う機会はなくとも知っておくに越したことはないと思うのですが。

あなたもそうですがGOTOを知っていた上で微妙だと思っているわけです。

いざ「GOTOなんて知らない」という人たちが主流になったらビックリするのでは?

anond:20190405062220

まず一番最初は「GOTO」を説明しましょう

 ← って、オイオイ、何が悲しゅうて今時BASICなんかの勉強せなあかんねんw

GOTO有害論」(Go To Statement Considered Harmful) から半世紀以上、出来るだけ GOTOを使わずに済ませる方向に頑張って来たと言うのに...

ダイクストラ大先生が聞いたら泣くでぇ

プログラミング入門はこんな感じでいいのでは?

最初BASIC

まずはプログラミングがどんなものBASIC体験してみましょう。

BASICの種類は「十進BASIC」でいいでしょう。

必要情報は大抵「ヘルプ」にあります

BASICではとりあえずは以下のこと(プログラミングの基本)を理解しましょう。

このくらいなら一週間もあれば完全に理解できるようになるはずです。

次にC++

BASIC完全に理解したら次はC++です。

C++ではとりあえず「ロベールC++入門講座」を購入して読むといいでしょう。

「ロベールC++入門講座」が無理そうなら「Cの絵本」→「C++絵本」→「アルゴリズム絵本」あたりにしておきましょう。

ここまでおおむね理解したら次は好きなルートに移行しましょう。

ルート分岐

やりたいことによって必要技術は変わってきます

(ルートは下記以外にも無数にあります)

WEBルート

ゲームルート

マイコンルート

本屋に行って適当な本を買えば分かるようになると思います。たぶん。

anond:20190404140637

全体的に「解説」というよりは「注意事項」を重視してるっぽいですね。

「この注意事項をみんなに伝えなければならない」という使命感を感じます

解説を重視するのなら説明する順番も考えるべきでしょう。

いきなり「関数」と言っても伝わらない可能性は十分あります

関数?なにそれ?数学嫌いなんだけど?」といった感じで。

関数さえ分からないような人間プログラミングには向いてない」

と切り捨ててもいいですが、先にGOSUBを説明しておけばより分かりやすいハズです。

まず一番最初は「GOTO」を説明しましょう。

GOTO指定した行(ラベル)にジャンプするだけのとてもシンプルな仕組みです。

GOTOが分からない人はさすがにほとんどいないでしょう。

次に「GOSUB」を説明します。

GOSUBはラベルジャンプして処理が終わったら元の場所に戻ってきます

GOSUBもほとんどの人が理解できるはずです。

GOSUB(サブルーチン)まで説明すれば「プログラムブロック毎に分ける」感覚が分かります

GOSUBまで説明した後に関数説明すれば

関数はGOSUBみたいなものか」

「でもGOSUBとはここが違うんだな(引数戻り値など)」

「だから関数には()がついているのか」

という風に理解できるはずです。

呪文」を使わず解説するなら現代でも最初BASIC無難かと思います

2019-01-21

anond:20190121020528

うわー参考になる

じゃあC#だけオブジェクト指向なのかな

c触ったことあるけど既存コードGOTO文まみれだった記憶しかないや

2018-02-07

はてなブックマークタグを一括置換するiMacrosのコード(無保証)

何で一括置換機能消えたん……

VERSION BUILD=1001 RECORDER=CR
SET !REPLAYSPEED MEDIUM
SET !ERRORIGNORE YES
URL GOTO=http://b.hatena.ne.jp/username/OKIKAE/
TAG POS=1 TYPE=A ATTR=CLASS:js-keyboard-entry-page-openable
TAG POS=1 TYPE=IMG ATTR=ALT:ブックマーク編集
TAG POS=2 TYPE=LI ATTR=TXT:OKIKAE
TAG POS=1 TYPE=LI ATTR=TXT:オキカエ
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:/my/bookmark ATTR=*
WAIT SECONDS=20

ユーザ名usernameで使用してる「OKIKAE」タグを「オキカエ」に一括置換する場合Chrome版で実行済み。最後20秒待ってるのは、置換後に一覧ページへ反映されるのが遅れる為。

ただ自分でやった時(当然ユーザ名・タグは別の名前)に、2013年11月頃の分で一向に置換されないままループしたりで安定しない。

2017-10-25

ただでさえ素人が作ったExcelVBAのメンテかいうやりたくない仕事

コードをみたらGOTO乱用のうえラベル名がKOKOとかASOKOとか

関数名も日本語

エラーハンドリングは一切なし

燃え尽きそう

2017-01-09

プログラミングの勘所

プログラミングの入門者には伝統的に変数やif文、for文などが教えられてきました。

昨今ではJavaやってGoogle Play Storeでアプリリリースするのが目標になるのかもしれません。

開発環境は年々高級になっており、以前より人の思考に近い感覚コーディングできるようになってきました。

はいえ、かつてWindowsGUIプログラミングがそうであったように、

スマホにはスマホ流儀があり、いくらアイコン右クリックしたいといってもスマホには右クリック概念が無いという、

今までの常識思考の在り方に対する挑戦も数多くあります

様々な流れに翻弄されつつもプロダクトを開発し世にリリースしていくことは、

プログラマ選択できる使命の一つとして今後も世界中で支持されていくと私は信じています

プログラミングとりまく状況はこの30年で大きく変化したと言えます

それでも基本的な部分は変わりがありません……などというのが通例ですが、

からといって基礎練を素直に続けることが正しいとも思いません。

今の新しい世代の人なら、まずはスマホアプリWebアプリWebサイトを目指すべきでしょう。

ハードウェアに興味があるなら、ラズベリーパイやArdinoを組み合わせても面白いですね。

すると、今とっかかりにすべき言語も絞られてきます

アプリならJavaSwift。(Unityを使うならC#ですね)

Web系ならphp。(ruby on railsもいいかと思います)

(15年前だったらC++でかっこいいwincdowsゲームを作りたい若者で溢れていました)

何かを作るにあたり、まずは1ボタン1機能から始めると良いと思います

ボタンを押したら、何かコマンドを実行する。

それはメール送信だったり、画面に文字を表示したり、ショップではがねのつるぎを購入したりと様々です。

技量が上がると、ボタンを増やしたくなります

ボタンを押すとボタンが増えたり減ったり、違う画面に移ったりしたくなります

途端に難しくなります

それらを整理するためにオブジェクト指向とやらを使わないといけなくなります

バグを出しにくくするための工夫が必要になってきます

何かを作る際に、機能が多くなると、それらを整理する手間が発生します。

グローバル変数はやめようとか、goto禁止というのはそういう活動の一環として生み出されてきたハウツーです。

そして自分の作りたいものは往々にして自分の実力を超えた所にあります

そこで挑戦と葛藤が始まります

幾多の困難を乗り越え、今の自分ならどの程度の規模のものを無理なく作れるかということがわかる場合があります。(わからない場合の方が多いんですけど)

するとあることに気づきます

自由に作りたいものを列挙するのは重要ですが、

最終的に何を作るか、何を作れるかというものを見据えながら、本当に必要機能を選別しないといけないのです。

欲しいものは全ては手に入りません。

全部じゃないと意味が無いなら、即座に全てをあきらめるか、考え方を変えなければ生き残れません。

プログラミングをする上で、夢を実現する技術を学ぶわけですが、

それには、何を実現したいと願うか、何を夢とするか、をコントロールする術も含まれます

そしてそれこそが、プログラミング、ひいては

生きていくために大切な希望を見つけるための技術であると気づかされます

2016-12-03

老害プログラマだが。最近若いもんが書いたコードを読んだ。

例外ってあるじゃろ。tryしてる間にthrowされたのをcatchするアレじゃ。あれは、たしか有用な仕組みじゃ。何かの関数に失敗したとき本来の値のかわりに特定の値を返すのもダサいし、参照型の引数成功たか否かを返すのもダサい場面、というのは確実にある。そもそもプログラマ怠惰で忘れっぽい生き物なので、例外という仕組みがなければ、関数で失敗したことにすら気づかないかもしれない。

だがな。例外魔物じゃぞ。昔は、gotoというものがあってだな。好きなところに処理を飛ばすことができる。あまりに、いろんなところに飛ばせるので、邪悪だと言い出した奴がおって、今ではあまり使われなくなった。なぜgoto邪悪と呼ばれたかgotoというのは、順接、分岐、反復という、プログラムを組む上で最低限必要制御構造から逸脱した、どっかからどっかに飛んでいく、という行為が容易にでき、それを多用したコードはまともな人間には読めなくなるからであった。そして、例外は、まさにその「どっかからどっかに飛んでいく」を容易にするための仕組みなのじゃ。

例外は、順接、分岐、反復による基本的制御構造があった上で、あくま対処を要するアブノーマルな状況に使われるべきものであり、例外というのは、制御機構として使ってはいけない。値を返す目的例外を使ってはいけない。一体どこから来て、どこへ行くのか分からない、そんな、流れ星のような例外の使い方をしてはいけないのじゃ。例外を使うなと言うつもりはまったくない。じゃが、例外制御構造を壊しうるものだと認識し、例外悪用していないか、それによってコードが追えなくなることはないか、と、考えてから、使ってほしいのじゃ。

イベント悪用も見た。イベントは非常に有用な仕組みだし、GUIなんかだと、もはや必須とも言える。なので、イベントを使うことは有用なことだ。けれど、イベントは、いつどこで発生するか予想が付きづらいものが多く、また、スレッドなどを使って非同期でイベントが処理される場合(今時は、多くがそうだろう)は、マルチスレッドと同じく、リソース排他制御を行う必要があるかもしれない。複数の処理が同時に動くというのは、恐ろしいことなのじゃ。いつの間にか、変わってないと思ってた変数が途中で変わるやもしれない。「まー、滅多に起こらないし、ええじゃろ」って判断の上、何も対策しない、という手もあるが、ええじゃろで済むのか済まないのか検討するくらいは必要じゃわな。C# なんかだと、言語レベルイベント実装されておる。じゃからイベント必要ないじゃろと言いたくなるような場面で、イベントが使われていたコードを見た。

便利な仕組みがどんどん出てきて、新しいものがどんどん古くなる今のコンピュータ業界。新しいものを追いかけるのもいいが、基本は基本として、しっかり押さえて欲しいのじゃ。今更、アセンブラゲームを作れるようになる必要なぞ、微塵もないが、自分コードがどのように動くのか、興味をもってほしいのじゃ。わしのような新しいもの不勉強老害は、最近若いもの基本的なことを不勉強からこそ、居場所があるのじゃ。じゃが、わしももう長くない。若いもんは、新しい仕組みの表面だけでなく深い部分に触れて、学んで、わしら老害を追い出せるくらいになってほしい。わしからは以上じゃ。

2016-01-12

30年くらい前はまだPCに夢があった

当時はマイコンって言われてたけどな。

店頭PC

10 PRINT "ウンコ"
20 GOTO 10
RUN

プログラム入力して、ウンコが止まらなくなるだけで、すごくワクワクしてた。

最近の若者は、Hello Worldじゃつまらんか。

2015-09-08

音楽を聴き続けてはや15年、自分ベストはこれ

最初に書くがビートルズは入ってない)

必要以上に音楽を聞くようになったのが10代後半、

そして現在までジャンルわずかなりの数を聴きまくった自分の良い曲だと思った10曲

Apple Musicも始まったことだし

ありすぎて何から聞けば良いか分からないやつとか参考にしてもらえれば

Golden Lady - Stevie Wonder

誰もが知っているスティーヴィーだけどこの曲はシングルでもなくたぶん推し曲でもない

そしておれは特にスティーヴィーのファンでもないMotownの初期のカタログを少し聞いていた程度

2年ほど前彼女にフラれて音楽とかクソ時間のムダだわと絶望してたおれは

”そういやいわゆる名盤には手を出してねーな救われねーかな"と思い

名盤」で検索して引っかかったスティーヴィーの"3部作"と呼ばれる傑作アルバムがある事を知った。

さっそくその中の「Innervisions」というアルバムを落とした

全身が震えて5本ほど連続タバコを吸った

飽きたくないから何回も聞きたくない...あーでも聞きてえみたいな

そこからたぶん相当数聞いてるが運良くまだ飽きない

聞くたびに「なんて良い曲なんだ」と口に出す

https://www.youtube.com/watch?v=qS2yMn3JbQk

https://itun.es/jp/ogt30

Mr. Dieingly Sad - The Critters

数年前ジャズミュージシャン菊地成孔氏が川勝正幸という評論家の人が死んだ時に自身ラジオ番組追憶放送BGMとして流した1曲

この人たちをよく知らなかったがたまたま追憶」というドラマティックな回が上がっていて

聞いてみるかーと思って視聴したら大当たりだった思い出がある

この回でかかった曲は人の死が背景にあった事も影響してるが全てが良かった

https://www.youtube.com/watch?v=u-6khXfUK3M

https://itun.es/jp/WFXRq

Dream On - Leslie Smith

5年ほど前にネット人妻を引っ掛けて人生初の40代の女と

ラブホテルに行った時に教えてもらった1曲

どういう流れで音楽の話になったか覚えてないがたぶん相手の青春の1曲だったのだろう

状況と背徳感もあってか異常なほど興奮しながらこの美しいメロディに耳を傾けていた事を思い出す

(その女は後にストーカーになった)

https://www.youtube.com/watch?v=qCoxPHTyXuo

● How Soon - ROLAND ALPHONSO

ゼロ年代初頭、わずかな期間だがスカブームが日本であった

当時ライブハウスでもフェスでもとにかくスカバンドが多くて"ルーディ"という言葉にカッコよさを感じてたおれは

「スカじゃねえよスキャって言えや」と本気で周囲に言ってるバカ

1枚20Kもするレコードを買って毎日牛丼しか食わないようなクソみたいな日々を送っていた

そんな生活は長続きするわけなくスカブームもすぐに冷え込み

連中のオシャレだと思っていた古着ファッションセンスもただ貧乏なだけだと気付いてから完全に冷めてしまった

そんな事を思うようなおれは大学中退ユニオンジャパレゲを売って生活してるクズ

女にも縁が無くただただ悶々とした日々がティッシュに埋もれていった

この曲は二度と戻りたくない時期の唯一の収穫で唯一売らなかったレコード

https://www.youtube.com/watch?v=HGyzq6S4Ssk

● bikinikill - Moscow Club

世紀末のコアブームは当時高校生だったおれを直撃している

同級生バンドを組みブラフマンAnswer Forで田舎のクソ狭いライブハウスで数えるほどしかいない客にダイブしていた

一方中学同級生生徒会長を務め優秀な高校へ進学した友達

ビジュアル系カバーバンドを結成したくさんの女の子リアルにキャーキャー言われていた

(後に彼をインターネット発見した時、髪の毛が一本もなくなっておりポルノグラインドを一人でやっていた)

皆その後は音楽ほとんど聞かなくなるが30前後結婚ラッシュバンド再結成を果たし

中性脂肪の塊の腹を引きずりながらギターを奏でる姿がなんともいえず感動を誘った

当時を懐かしがる連中は多く久しぶりに会うとそのような話にもなるが昔話は一日もたなかった

ラーメン屋開業に失敗して莫大な借金を背負った奴

抜け出せない現実限界がきてギターショップ万引きをして捕まった奴

精神病を患って引きこもった奴

車に轢かれて死んだ奴

ずっと働かずにスロットしてる奴

周りには自分も含めてクズだらけだがこの曲を聞くと10代の彼らの笑顔しか思い出さな

https://www.youtube.com/watch?v=FfsLKefAkyQ

https://itun.es/jp/BOQKN

● Song 1 - DJ Krush

10年以上前THA BLUE HERBにひたすらハマっている時期があった

一時期はカトマンズに住もうかと思うくらいだったがブタほどの行動力も無いヘタレのおれは

スペイン現実逃避旅行へ行くのが精一杯だった

当時片思いしていた女に無理やりボアダムスを聞かせて感想を言わせたり

その女が好きだった大人計画演劇に同行して「よかった〜あんなの始めて見たよ!」と言って

内心は「どこがおもしれーんだクソだわでもヤリたい」と腐った思いを握りつぶしていた

そんなモヤモヤしていた時期のおれがラップに入れ込むのは必然みたいなもの

ひたすら日本語ラップ世界に傾倒していったが数ヶ月で飽きた

そして5lackが登場するまではHIPHOPに対しても距離を置くことになる

このインストゥルメンタルはその時期に聞いた至高の1曲で宝物だ

https://www.youtube.com/watch?v=bj3y5vFS3Es

Feel It All Around – Washed Out

ある時期強烈にブラック仕事従事していたおれは疲れ果てていた。

上司パワハラ時間に追われて睡眠薬が無いと寝られなくなった、ブクブクに太って体が重い、

給料ストレスから全てデリヘルに消える、二度と帰りたくないクソみたいな日々、

日本に生まれるだけで宝くじに当たったようなものだ」と文句を唱えて必死感情を押し殺していた

背が低くて足が太いクソブスの女上司に「君って感情が無いみたい、ロボットなの?」と言われた時

「ああこれが衝動的に殺人をする瞬間か」と思った

2010年の夏は太陽が本当に眩しくて暑かったサマーオブラブは間違いなく2010年に来ていた

Go Berri Be Happy - Mark Barrott

去年の夏に同僚の人妻を好きになってしまい、頭の中が彼女の事で満たされてしまった俺は、

ある日から体調が異常に悪くなった、検査したら胃から出血していた、

15年ほど吸っていたタバコを辞めざるを得なくなった。

もう抱けるならどうなってもいいと毎日デパス飲んで働いていた(顔を合わすから

そんなある真夏の日、田舎現実逃避旅行へ出かけボーっとしながら緑がキレイな山沿いをチャリブラブラしてた俺は突然

あなたの事が好きになってしまった、一度食事してくれませんか?」とメールを打ち、

返信を待つ間の胃の痛みに必死に耐えた。一週間後、俺は彼女と一緒に食事をしていた、

夕方の街をブラついた後ネカフェへ行きペッティングした。とても簡単だった。

次の日から好きだった職場に行きにくくなった、背徳からなのか、すさまじい興奮を覚えて汗が止まらなかった(継続

この曲はメールを売った驚くほどキレイ自然の中でリピートしていたアルバムからの1曲

https://www.youtube.com/watch?v=2e8Py9ToC7M

https://itun.es/jp/q_cyX

● 君はそう決めた - 坂本慎太郎

坂本氏の良さを書こうなどたぶん野暮だし恐れ多い

思い出はまだ無いけど、全作品心を鷲掴みにされる

https://www.youtube.com/watch?v=t08i_cWdcbM

● ADEPRESSIVE CANNOT GOTO THECEREMONY – imoutoid

オタクがある日世間から注目される、突然友達の態度が変わり、

モテる要素が皆無だった自分に女が寄ってくる、ただ好きな事に熱中して作品を発表しただけで、

本質は変わってない自分への周りの変化に戸惑い苦しむ、世界絶望する第一歩を踏み出す。

もしこのような事だとしたら自分人間に改めて感動する。なんて脆くて危なっかしいんだろう。

普通生活を送っている人々の方がどうかしてるんじゃないか

彼に親しかった豆腐氏も若くして胃を悪くして苦しんでいた、

心と体のバランスの取り方は複雑で人それぞれだから何も言えないけど

良い音楽死ぬまで聞くし俺より何倍も生きてる価値がある(あった)

多くの人の3分間を確実に幸せにしている

また書く

2014-11-29

デジタル技術検定について

デジタル技術検定とは:

http://digital-kentei.com/

 

この「国際文化カレッジ」って、どんな組織なんですか。

 

第49回の試験が先週有った。年2回という事だから、25年ぐらいの歴史のある検定試験という事なのか。

2級制御を受けてみて、まぁ、それなりにこんなもんか、と思われる所もあるのだけれども、どうしても我慢ならない事を言わせてほしい。

 

(1) 同期回路設計に関する知識が、出題範囲に含まれない!

びっくりだね。過去問にも1つも出てこないし、今回も無し。私の場合、独学と会社講習会勉強した。確かに学校では習わなかったが、デジタル回路に関する学科で、現在も未だに同期回路設計の考え方を教えてない学校があるのかしらん?嘘でしょ?

考えてみると、末端の回路設計者に於いて非同期設計普通だった時代から、同期設計が主流に切り替わった時期というのが、だいたい25年ぐらい前なのな。20年前の時点で、少なくとも自分の周りでは「非同期設計禁止!」だった。それが驚いたね。未だに数年前の過去問でTフリップフロップとか出てくるし、2014年の試験問題でRSフリップフロップが出てきちゃったよ。あのな、15年前にはもう、Dフリップフロップ以外、使用禁止になってるからな。過去歴史勉強する上で、まずい設計の引き合いに出されるのならともかく、まるでそれが今も現役であるかのようにRSフリップフロップが出題されるって、これに金払ってる人に対する詐欺だと思うよ。どれぐらいイケてないかって、N88-BASICGOTO文が試験に出てくるぐらいのレベルでイケてない。例えが古すぎて若い人には意味わからんレベル。そんなのが未だに出題されてるんだぜ。

 

(2) GHz帯の高周波を取り扱う為に必要な基礎知識が出題範囲に含まれない!

日本デジタルICが総崩れで海外惨敗する結果になった敗因の1つがこれだと思うんだが、未だにその反省が無いのな。マクスウェルの電磁方程式完璧マスターしろとは言わないまでも、同軸ケーブルとかインピーダンスマッチングの意義とか、マイクロストリップライン基本的な考え方ぐらいは出題範囲に含まれてないと、今どき戦えないよ。

 

日本の失われた20年が、こんな所にも有ったよ。

2014-02-27

Apple's SSL/TLS bug (22 Feb 2014)の意訳

例のAppleSSL/TLSバグの件、日本語情報がなかったので意訳しました。

Adam Langleyさんによって書かれた原文はこちら。要所要所に親切なリンクがついているので、ぜひ原文も見てみてください。

Apple's SSL/TLS bug (22 Feb 2014)

https://www.imperialviolet.org/2014/02/22/applebug.html

(Hi Adam Langley, Than you for your blog! We really appreciate you.)

-----

昨日、AppleはばかばかしいiOS向けのセキュリティアップデートを発行した。
それは詳しく明かされていないが、SSL/TSLについてとんでもなく恐ろしい間違いを示すものだった。

その答えは既にハッカーニューストップにタレこまれている(https://news.ycombinator.com/item?id=7281378)し、アップルが隠したい秘密はもうバレてしまっていると思う。
そして現在、俺たちはその誤った情報を正すステージに来ているんだ。

ほらここに、Applebugがあるんだ。:
static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                 uint8_t *signature, UInt16 signatureLen)
{
 OSStatus        err;
 ...

 if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
  goto fail;
 if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
  goto fail;
  goto fail;
 if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
  goto fail;
 ...

fail:
 SSLFreeBuffer(&signedHashes);
 SSLFreeBuffer(&hashCtx);
 return err;
}(Quoted from Apple's published source code.)
(訳者注:(Quoted from Apple's published source code)→sslKeyExchange.c)

2行のgotoがあるだろ。
2行目のgotoは、見て分かる通り常に発動する。
変数[err]にはエラーを示す値が入らず、正常を示す値のままfailに飛ぶってことだ。
それって成功したのと同じなんだよね!

この署名検証処理は(訳者注:SSL/TLSハンドシェイクのやりとりのうちの一つである)ServerKeyExchangeメッセージ署名検証するものだ。
このServerKeyExchangeでは、"the ephemeral key"(通信のための一時的な鍵)を交換するためのDHE や ECDHE という暗号スイートが使われる。
そのサーバーは言うんだ。
「ここに"the ephemeral key"と署名があるよ、ほら、これが証明書だ。君はこれが僕からのものだってわかってくれるよね!」

今、もし"the ephemeral key"と証明書関係が破たんしているならば、すべては無意味なんだ。
これってつまり、正規の証明書チェーンをクライアントに送信したけど、ハンドシェイクへの署名には正しくない間違った(つまり適当にその辺で作った)鍵を使ったり、そもそもハンドシェイク署名しなかったりってことができるってことなんだよ!

そこには、今君が通信しているサーバーが、サーバー証明書に含まれる公開鍵秘密鍵を持っているってことの証明が、何もないんだ。

これはSecureTransport(というライブラリ)に入っていて、以下に影響する。
・iOS 7.0.6より前(俺は7.0.4で確認した)
・OS X 10.9.2より前(10.9.1で確認した)
(訳者注:つまりiOS 7.0.6、OS X 10.9.2で解決した)

これはSecureTransportを使っているすべてに影響するけど、ChromeFirefoxはそうじゃない。
ChromeFirefoxSSL/TLSのためにNSSを使っている。
でも、それはあんまり君のマシンがSecureTransportを使っていないってことを意味しないよ。(ソフトって更新されるしね)


超特急テストサイト作ってみたよ。https://www.imperialviolet.org:1266
ポート番号に気を付けてね。(テストサイトCVE番号になってるよ)
443は通常通りに動いているからね。

ポート1266のサーバーと443のサーバーは同じ証明書を送っているけど、完全に異なるキー署名しているんだ。
君がもしポート1266のHTTPSサイトアクセスできたんだったら、君のマシンはこのイケてるバグを抱えてるってことだね。:)


それってつまり証明書チェーンは正しいってことで、そしてハンドシェイク証明書チェーンの関係は壊れたってことで、もう俺はどんな証明書も信じないよ。

またこれは、DHE または ECDHE 暗号スイートを使っているサイトに影響を及ぼすだけじゃないんだ。
攻撃者は、この暗号スイートを使うサーバー自分で建てるようになるだろう。

また、これはTLS 1.2には影響しない。このバグを含まないTLS 1.2の別の関数があったから。
でも攻撃者は使うプロトコルをある程度選ぶことができるから安心できないよ。
(訳者注:サーバー側がTLS1.2を使えないことにしていたら、それ以外の例えばSSL3.0とかTLS1.0とか1.1で通信が始まっちゃうから。)
でもでも、クライアント側でTLS1.2だけを使えるようにしておけば、それは今回の問題の回避策になる。。
同じく、クライアント側でRSA暗号スイートだけを許可するということも、ServerKeyExchangeが発生しなくなるので今回の問題の回避策になる。
(2つのうち、1つ目のほうがだいぶ好ましい。)

俺のテストサイトでは、iOS 7.0.6 と OS X 10.9.2で問題は解決していた。
(更新:このバグOS X 10.9 のときに入ったように見えたけど、iOS6にもっあったぽい。iOS 6.1.6は昨日リリースされたよ。)

こんなような微妙バグって、悪夢だ。
俺はこれは単なるミスだと思うし、なんかもうほんと最悪って思う。


ここに、今回の問題を明らかにするコードがある。:
extern int f();

int g() {
 int ret = 1;

 goto out;
 ret = f();

out:
 return ret;
}
もし俺が"-Wall "を付けてコンパイルしたとしても、XcodeGCC 4.8.2 や Clang 3.3は死んでるコード(the dead code)について警告をしないんだ。
本当にビックリだよ!!!

ここで警告が出ていたらこの問題は止められたのに。でもたぶん、現実には死んでるコードが多すぎて無視することにしてるんだろうね。
(ピーターネルソンが教えてくれたけど、Clangはこれを警告するための"-Wunreachable-code"を持ってる。でもこれ、なんと"-Wall "には含まれてない!)

if文に{}をつけないことを許すコーディングスタイルはこの問題を誘発したかもしれない。
でも、人は{}を付けたとしても間違ったプログラムを書くことがあるから、これは俺はあんまり関係ないように思う。

テストケースはこれを見つけることができたはずだけど、今回のはいろいろ条件が複雑なやつだったから難しかったと思う。
TLSのめちゃめちゃ多くのオプションを試さなきゃいけなかったからね。しかも正常系じゃないやつも。
俺、TLSLiteでちゃんとテストしてるか思い出せないもん。(月曜日怖いかも)

コードレビューはこの種類のバグについて効果的でありえる。
ただし単なる審査じゃなく、それぞれの変更に対してしっかりとレビューすることだ。
Appleコードレビューカルチャーがどんなもんか知らないけど、もし俺が同じようなことをやっちゃったとしたら、同僚のWan-Teh や Ryan Sleevi がばっちり見つけてくれたと、固く信じてる。
でも、誰もがそんなにいい仲間を持てるわけじゃないよね。


最後に。昨日、Apple証明書ホスト名をちゃんとチェックしていなかったことについて多くの議論があったんだけど、
それは OS Xコマンドラインcurlを使うと、IPじゃない証明書でもIPHTTPSにつながっちゃうってだけだったよ。変だけど。
Safariはこの問題には関係なかったよ。

2014-02-16

古いプログラムの書き直しをしたいけど

研究室で使っているFortran77のプログラム

配属されてからいろんな機能を追加してきた。中規模くらいのプログラムで、研究ではメインで使っている。

でもだんだんつらくなってきた。とにかく見づらい。

1980年代に作られたこのプログラムは今までの人たちのコメントの蓄積が半端ない

プログラム書き換えでとりあえずとっておいたコードコメント、書き換えた日時と人が書いてあるコメントプログラム中に混在している。

これらは実際に動く部分のコードよりも多く、可読性をかなり下げている。

前者については、ほとんどが不要だと思うのだがあまり考えずに消すと将来困るかもしれないのでちゃんと確認して消したい。

そして未だに残るGOTO文とFORMAT文と文番号。implicit noneではない暗黙の型宣言。

Fortran入門: 知識として必要な過去のFortran このページに書いてあるほぼすべてが詰まってる。

COMMON文もほぼすべてのサブルーチンにあったが、これはなんとかmoduleに書き換えた。

moduleに書き換えたとはいえ、本来は引数で渡したほうが適切なもの機械的にCOMMONからmodule文に書き換えたためその辺も見直したい。

一番面倒なのが一行の文字数制限。何段かのインデントを入れるとすぐにアウト。

エディタ使ってると自動でインデント入れてくれるのでいちいち直すのも面倒だし、インデント好きなのでできればインデント入れたい。

エディタといえばシンタックスハイライトfortran77モードだとうまく表示できないことが多い。

allocatableとかmodule文なんかは厳密に言えばfortran90以降の機能だけどコンパイラ対応してくれているおかげで使える。

でもエディタシンタックスハイライトにはそういうコンパイラが気を利かせたような実装は含めないのでうまく表示されない。

fortran90モードを使うと今度は行頭カラムの空白が守られなかったりしてコンパイルエラー

すっげー書き換えたい。全部きれいにしたい。他言語にするとあまりにも変わりすぎて教授が混乱するからせめてFortran90にしたい。

でもさ、よく考えるとこの書き換えって全く自分の実績にならないんだよね。

そもそも今までプログラム改良して出来る計算の幅をだいぶ広げたけど、それ自体は発表できないからほぼ表に出ない。

計算結果を出してそれを発表しないと表面的にはまったく意味が無い。

ましてやプログラム保守作業であるこの書き換えは計算結果に影響をおよぼすものでもないから研究成果にはまったく現れない。

しかプログラム書き換えた自分だけじゃなく、みんなも使うから書き換えた自分特別得するわけでもない。

プログラムすべてのコードを書き換えるのは単純に機械的にやっても結構時間がかかるし、書き換えても一発では絶対にうまく動かないから修正にも時間がかかる。

研究者の中にはそういうプログラム書いてばかりの人間馬鹿にする人もいる。プログラムを書いてる研究者自分の分野ではかなりヒエラルキーは低い。

情報系でもないんだし、それが研究の本筋じゃないからというのはわかる。自分たちのやるべきことじゃない。(でも専門性の高い道具を作り、整備する技術・人も必要なんじゃないかなと思ったりもする。)

やってもあまり得しないし他のことやったほうが絶対に自分の将来を助けるけど、ほっとくのもなんだかなあと悶々としている。

多分きれい好きの人が自分の部屋を見たら同じ苦悩を抱えると思う。

2014-02-03

http://anond.hatelabo.jp/20140203010532

彼の書くコードはそれで問題がない。

僕のコードには問題がある。

それだけだ。

まり増田コードは問題だらけのコードだ、ということか?

いや、ここだけ抜き出して揚げ足取るわけではなく、

gotoを使わなくても良いようなコードは書ける、ということでしょ?

増田はかかないといけないよ言うな組み立てにしてるだけで。

それ自体が問題なんだけど、そこについてそっくり無視してるこの文章はなんなんでしょう?

2013-11-21

http://anond.hatelabo.jp/20131121151139

グローバルな関数足す

DLLやSO作るときに、シンプルグローバル関数で逃げられるなら、別にシンプルグローバル関数の追加は有り。

何でもかんでもIDLとかやってられない。

 

メソッドやす

1度しかよばれない、汎用性の低い処理をわざわざAPI切って公開するな。他人が使わないものを公共の場に置かれても迷惑

 

private

protected virtualも検討してくれ。他人が使うことがある。

 

その他よくある。goto 使うな

ネストの深い帯域脱出goto使わないとかありえないし、関数内の例外エラー処理にtry-catch使うほうがありえない。よってgotoの方が良いケースも有る。

 

基本的にコーディング規約初心者を縛るもので、上級者になったら、コーディング規約例外ケースを知らないとダメ

想定外がない事ががないように、コーディング規約例外想定外の条件にコーディング規約に従っても仕方がない。逆に、そういうことを知らずにコーディング規約を語っても仕方がない。

2013-03-25

http://anond.hatelabo.jp/20130325172822

正直、プログラミング学者にやたらc言語ポインタ学習を勧める風潮には辟易している。

 

ポインタは何にでも使えすぎるんだよ。自由すぎる代わりに強力って意味で、あれはgoto文に近い代物だと思うし、

いまさらポインタを使いこなせる必要があるかというと疑問だ。

ポインタによって学べていたメモリ空間上のイメージオブジェクト変数実体への参照を持っているに過ぎないことなど

概念重要だが、その概念を活用するための手段としてアドレスを実際に見たり、指し示すアドレス

前後に移動させるような機能が今の時代必要かっていうとそれはノーだろう。

メモリ空間を直接叩くというのは例外的なオペレーションだし、やるとしてもそれは直接叩くのではなく

対象を抽象化ライブラリを通してやるべきだ。

 

特に初心者が「何のためにプログラムを学びたいのか」を考えたとき、その手段として

ポインタ必要場合は皆無だと言っていい。

2013-02-03

http://anond.hatelabo.jp/20130203154719

大学でティーチングアシスタントやってたときに感じたのは、ポインタが分からない人はそもそもポインタ以前が分かってないというか表層的な理解しかしていない。

変数・・・なんか記憶しておくやつ。

配列・・・なんかたくさん記憶しておくやつ

構造・・・なんかたくさん記憶しておくやつ。配列とどう違うのかよくわからん

関数・・・なんかプログラムコマ切れに書くやつ。gotoとどう違うのかよくわからん

etc...

ポインタの前の段階で躓いていたのだが、サンプルの見よう見まねでなんとかやり過ごすことができて、問題にならなかった。

しかポインタをやろうとしてるときになって、理解ができず、初めて問題として発覚。

学習者は「ポインタが分からない」と声を上げる。

世の中の「ポインタが分からない」という声は実はそれ以前の問題があるのではないかと思う。

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