サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
kmaebashi.hatenablog.com
2021年の6月頃に初公開した「完全初心者のためのプログラミング入門」に、以下の二つのページを加えました。これにて完結となります。 シューティングゲームを作る(オブジェクト指向へようこそ) JavaScriptの「オブジェクト指向」はやわかり ここまでは「UFOゲーム」を作ってきましたが、最終回である今回は、こんな感じのシューティングゲームを作ります。 「シューティングゲーム」の画面 下にあるキャノン砲で、敵を撃墜するゲームです。敵は、UFO、エイリアン、フライングボード(くるくる回りながら落ちてくる板です。何かに似ていますが気にしないように)、それからエイリアンが落とす爆弾の4種類です。実際のゲームは、こちらで遊べます。 ここまで作ってきたUFOゲームに比べると、相当複雑なプログラムに思えるのではないでしょうか。実際それなりにプログラムは長くなっていますが、メソッドオーバーライドとかポリ
タイトルからして無謀ですが、「本当の初心者のためのプログラミング入門」というのを始めました(始めました、と言いつつ、続くかどうかは評判次第ですが)。 kmaebashi.com この入門では、JavaScriptを使って、以下のような「UFOゲーム」を作ります。 下にある「キャノン砲」で、飛び回るUFOを撃墜するゲームです。 UFOは1機しかいないし、UFOは撃ってこないし、キャノン砲が発射するビームも画面上には1発しか存在しません(ビームが消えるまで、次のビームが撃てない。昔のスペースインベーダーやギャラクシアンはこうだった)。しょぼいゲームですが、最初の一歩はこれでよいかな、と思っています。 実のところこのUFOゲームは、かつて「マイコンBASICマガジン」、略して「ベーマガ」の1982年8月号に載っていた「UFOゲームを作ってみよう」へのオマージュです。ベーマガのUFOゲームは、BA
少し前、以下の記事がホットエントリに上がっていました。 givemegohan.pigboat.jp タイミング的にかなり遅れてしまいましたが、せっかくCの話題が出たことですし、宣伝しますよ。 メモリとアドレスの話 ポインタの話をするにあたり「例え話をしない」というスタンスには共感しますし、ポインタを理解したいなら結局メモリを理解しないといけない、ということにも同意します。 ただ、拙著「C言語 ポインタ完全制覇」の旧版では、メモリとはどういうものかについてあまり説明しませんでした。17年も前の本ですから、当時は、プログラムを書こうというような人はある程度メモリの概念ぐらいはわかっているだろう、と仮定していたのだと思います。その仮定が正しかったかどうかはわかりませんけれども。 今となってはメモリの概念とか考えたこともない、という初心者も多そうなので、「C言語 ポインタ完全制覇」の改訂版では以
かなり古い話ですが、かつて増井俊之さんが提唱した概念で「富豪的プログラミング」というものがあります。 富豪的プログラミング 実のところ私は、この文章の趣旨には異論はありません。特に以下の部分などは、場合によってはプロトタイプに限るかもしれませんが、強く同意します。 メモリや実行効率を気にしないでお気楽にプログラムを作る 効率を重視したプログラムは作るのが大変ですし、 ちゃんと動かすにはデバッグも大変です。 富豪的プログラミングでは一番単純で短いアルゴリズムを使います。 条件が変わる度にすべての計算や表示を行なう 再表示が必要な場所だけ書き直ししたり、出力のバッファリング をしたりする貧乏性な工夫はバグのもとになるので行なわず、 条件が変わる度に計算を再実行したり全体を書き直したりします。 ――が、こういうのは、あくまで、それにより開発効率が上がったり、UXが向上したり、という場合に限るので
いわゆるANSI C(C90)では、配列のサイズは定数でなければなりません。つまり、配列を宣言する際には、 int a[10]; のように[]の中には定数を書く必要があり、 int a[size]; のように変数を書くことはできません(gccでは昔からできたりしましたが、それはgcc独自拡張です)。 しかし、C99からは、可変長配列(VLA: Variable Length Array)の機能が追加され、配列の要素数に変数(というか定数でない式)が書けるようになりました。 ただ、VLAが使えるのは自動変数(staticでないローカル変数)だけです。まあ静的配列の要素数が可変というのもいまいち意味が分からないので無理はありませんが、一時的にしか存在できない自動変数の配列のサイズが可変にできたところで、あまり便利じゃないのでは、とも思えます。まあ、実行時にしかサイズが決まらない一時的な作業バッ
2001年の発売より、実に17年、第18刷を数えるロングセラーとなった「C言語 ポインタ完全制覇」の改訂版が発売されます。 私の作成した紹介ページはこちら。 「C言語 ポインタ完全制覇(第2版)」書籍情報 技術評論社さんの紹介ページはこちら 新・標準プログラマーズライブラリ C言語 ポインタ完全制覇:書籍案内|技術評論社 Amazonでは現在予約注文が可能です。 https://www.amazon.co.jp/o/ASIN/477419381X/gihyojp-22 技術評論社さんでの電子書籍版(PDF)販売、およびKindle化の予定もあります。 「なんでいまさらCの本?」と思う人が多いかもしれません。私自身そう思わなくもないので当然です。しかし、現在でも、WebやTwitterで検索してみると、Cのポインタで苦労している人はまだまだたくさんいるようです。ていうか著者からすると、最近書
以前Twitterで書いた話の焼き直しではありますが。 スネちゃま捕鯨を語る http://3500131221.blog120.fc2.com/blog-entry-15.html クジラを乱獲したのは鯨油だけとっていたアメリカだろ!日本は昔からクジラを余す所なく利用していたんだ!日本は何百年間も捕鯨を続けてきたのに、よその国の価値観でその伝統文化を不当に抑圧されているんだ。別に絶滅危惧種をとろうといってるわけじゃないんだ! はぁ〜。うんざりする俗論だね。それ間違いだから。恥ずかしいからよそでそんなこと言わないでくれよ、ジャイアン。19世紀の中頃にアメリカの捕鯨が日本の沿岸捕鯨にダメージを与えたのは本当だけど、いま特に批難されているのは日本の南極海での捕鯨なんだ。南極海の商業捕鯨では日本も鯨油だけとって残りを捨てたりしてたんだよ。おまけに南極乱獲四天王は日本、ノルウェー、英国、ソ連なんだ
常に話題には乗り遅れる私ですが、ちょっと前、「変数を箱にたとえる」ことについて議論がありました。 プログラミングの変数を教えるときの「箱の説明」の是非について。 - Togetter 実のところこの話題は昔から何度も出てきた話で、「何周目だ」という話ではあります。私自身、「センス・オブ・プログラミング!」に書いたことがあります。 変数は「箱」か? - the code to rock そして、上記の「the code to rock」の文章にもありますが、「箱モデル」の代わりとしてよく提唱されるのが「名札モデル」です。 こういうことは文章で書いてもわかりにくいので、それぞれ、絵にしてみましょうか。 箱モデル ■「a = 5;」という代入 「aという名前が付いた箱に、5という値を格納する」プログラミング言語の入門書によく出てくる説明ですね。 ■それに続いて、「b = a;」という代入 ここで
http://qiita.com/kantomi/items/747aef968d37b5ebeced ■ 中間言語方式 Java・.Net (バイトコードなど)中間言語に変換してから、JavaVMなどがネイティブコードで実行する。 ■ インタープリタ言語 PHP/Ruby/JavaScriptなど 1行ずつ、コンパイルしながら実行する。 コンパイラ(コンパイル作業)すら必要ないようにした。 ■ 最終的にマシン語(機械語)に翻訳されます ……うへえ。今時こんな文章を読むことになろうとは。 当たり前ですが、JVMを含め、インタプリタはネイティブコードへの変換は行いません*1。 今から文章書くにはもう眠いので、昔、拙著「センス・オブ・プログラミング」に書いた文章を貼っておきます。 センス・オブ・プログラミング p.83の補足『インタープリタは「翻訳」しない』より 『インタープリタは「翻訳」しな
「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」いよいよ明日が発売日です(書店によってはもう置いてあるのかもしれませんが)。 技術評論社さんの紹介ページはこちら。 Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門:書籍案内|技術評論社 私のWebサイトにおける紹介ページはこちら。 http://kmaebashi.com/webserver/index.html amazonはこちらから。 さて、書籍「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」は、元々Webで公開していた「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」に対しいろいろ加筆修正していますが、6章、7章は完全に書き下ろしです。 サポートページにも目次を載せていますが、こんなことを書いています。 第 6 章 Webアプリ開発に
以前よりWebで公開していた「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」が、技術評論社さんから本として発売されます(発売日は6/7です)。 技術評論社さんの紹介ページはこちら。 Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門:書籍案内|技術評論社 私のWebサイトにおける紹介ページはこちら。 http://kmaebashi.com/webserver/index.html amazonはこちらから。 この本は、タイトルにあるとおり、「基礎からのWebアプリケーション開発入門」です。 その前にある「Webサーバを作りながら学ぶ」のあたりでちょっと待てと思う人がいるかもしれませんが*1、私は、冗談でもなんでもなく、本気で「基礎からのWebアプリケーション開発入門」のつもりで書いています。ただし、プログラミングそのものの初心者は対象ではな
正月休み明けの話を今頃はてなダイアリーに書くのも何ですが、開始時にここで紹介しましたので終了についても書きます。 本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう http://kmaebashi.com/programmer/webserver/index.html 1年半ほどかかりましたが、一応完結いたしました。1年半のうち1年ほどは放置状態でしたけれども。 上記のリンクを見ていただければわかるように、この記事は、以下のような構成になっています。 TCPサーバ/クライアントを作る Webサーバを作る 落ち穂拾い(その1) 落ち穂拾い(その2) POSTメソッド へなちょこサーブレットコンテナもどき「Henacat」を作る Cookieに対応する セッションに対応する 最初は簡易的なWebサーバを作っていますが、最終的にはへなちょこなサーブレットコンテナHenac
以前から「誰か書いてくれませんかね」とか言っていた「本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう」ですが、誰も書いてくれないので自分で書きました。 本当の基礎からのWebアプリケーション入門――Webサーバを作ってみよう http://kmaebashi.com/programmer/webserver/index.html 現状、合計で140行くらいのJavaプログラムで、普通に画像やCSSを含むWebページが表示できています。こちらのページの下のほうにも画像を貼っていますが、こんな感じで、ローカルのファイルシステムに置いてある私のWebサイトのトップページが表示できていますし、もちろんリンクをクリックして遷移することもできます。 「えっ? Webサーバってこんなに簡単に書けるの?」と思う人も多いのではないでしょうか。 もちろんこんなのは「わかっている人」から
Cでのポインタの読み方 上記のページ、現時点ではてなブックマークが1241ついています。同趣旨のことを私は1998年に以下のページに書きました。 配列とポインタの完全制覇 こちらのはてブ数は212…… きいいっ! 悔しい!! などという話はさておき。 上記ページに関連してだと思うのですが、Twitterで@kinabaさんが以下のようにつぶやかれておりました。 『という方針のCの入門記事』ということであれば、WebではないのでURLは貼れませんが、たとえば柴田望洋先生の「秘伝 C言語問答 ポインタ編」*1には以下の記述があります(p.22)。 ここで、下のように考えると、int x;の部分が*ptrに相当すると考えられますね。 int x ; int *ptr ;――*ptrはint型変数であると言っているように解釈できますね。 で、実のところこれを意識した上で、私は「C言語 ポインタ完全
id:Dr-Seton さんのところのエントリに便乗し、日本赤十字に義援金を送ってきました。 皆様にお願い - シートン俗物記 私が確認した時点で1355ブクマだったので、それ×100円分。今はなぜかひとつ減って1354ブクマになっていますが。最初の24時間くらいはブクマ数がむくむく伸びていて、それはドキドキしましたとも。最終的な金額は、まあ「ただちに生活に影響がでるものではない」金額ですのでご心配なく。 それにしても、今回のシートンさんのところのブックマークコメントでもそうですが、この手の話になるとやれブクマ稼ぎだの黙ってやれだのの声が出てきて閉口します。というより私がこれに便乗して募金する気になったのは、id:temtanさんの以下のコメントが原因です。 temtan (´Д`)y-~ いいからとっとと自分が出来る募金をしろよ。それとも自分の自己顕示欲を満たさないと禄に募金もできねーの
mojixさんの記事: もしも「カレー無料法」ができたら - モジログ いやさ、mojixさんはどうせいつもこんな感じなのだけども、賞賛しているブクマコメントが多いのに引いた。 はてなブックマーク - もしも「カレー無料法」ができたら - モジログ これを「思考実験」と言うのなら、ある状況を仮定したとき次にどのような状態になるのかを論理的に説明できなければいけないでしょう。この例では、 『「お金のない人にも、せめてカレーくらい食べさせてあげよう」という趣旨のもと「カレー無料法」が制定され、政府が一食500円の補助金を出して飲食店にカレーを無料で提供させる』 という状況を仮定しています(その前の、補助金なしでカレーを無償提供させる例はあまりにも非現実的なので割愛)。 もし本当にこんな状況になったら何が起きるか。mojixさんの言うように、みんなカレーばかり食べるようになって他の飲食店が壊滅す
前回の続きです。 なお、私が持っているのは初版第10刷、正誤表がこちらにあるようです。 この人、Cで開発したことあるのかな オブジェクト指向の教科書ではよくあることですが、この本も、Cによる開発とオブジェクト指向言語(この本の場合はC++)による開発を対比し、「C++の方がこんなにいいでしょ」という説明が随所にあります。そのこと自体は悪いことだとは思いません。 しかし、そういうことを書くなら、Cによるまともな開発についての知識が必要なんじゃないでしょうか。 p.30 クラスの宣言は一般的にヘッダファイルに記述します.C言語でのプログラミングでは,ヘッダファイルをプログラマが書く機会というのはあまり多くありませんでしたが,C++ではクラスを作るたびにヘッダファイルを書くことになります. いや、本当に本当の入門者でない限り、Cプログラマだってヘッダファイルぐらい書きますってば。ていうか、経験を
http://blog.usagee.co.jp/2010/11/27/level-up-programmer-2 (3)更に読んで欲しい5冊 C言語ポインタ完全制覇 (標準プログラマーズライブラリ) C言語ポインタ完全制覇 (標準プログラマーズライブラリ) 前回書くべき書籍なのに、すっかり忘れていました。。。 超有名本ですよね。 C言語使わない人も、是非読むべきです。 あわせて http://sakurai.sumomo.ne.jp/page/c_pointer も見るべき。 ちなみに、ポインタについての凄くわかりやすい説明を前どこかで見ましたので、うろ覚えながら書きます。 『ポインタって何?』『2chのレスと、そのレスへの安価』 ご紹介いただきありがとうございます。(_o_) ……それはさておき、「憂鬱なプログラマのためのオブジェクト指向開発講座」という本についてですが。 C++をメイ
ここんとこブログも書かずにネット上で書くものといえばTwitterぐらい、という状態が続いているのに言うのも何ですが。 Twitterって、これほど使われているサービスにしては、あまりに不便で低機能じゃないですかね? 文字数制限 まず、普段使ってて、一番不満に思うのがこれ。 「何言ってるんだTwitterは140文字制限があるから気楽につぶやけるんだろ」という反論があるのはわかるし、そういう面があるというのは理解はできるんですが、それでもやはり、システム屋としては、システムの制限をメリットとみなすのはおかしいと思う。なにしろ1万文字書き込めるシステムで140文字だけつぶやくことはユーザの選択でいつでもできるのに対し、その逆はできないのであって、ユーザに気楽につぶやいて欲しいならそのように機能を使いやすくすればよい話だろう。仮に制限をかけるとしたって、たとえば「URLは常に1文字とみなす」と
id:mktx さんの「超テキトー図解ポインタ」、絵はかわいいですし面白い試みだと思うのですが、内容にちょっと問題があるように見えますので指摘しておきます。 冒頭で、ポインタをWindowsのショートカットや標識にたとえています。これについてブコメで批判もありますが、たとえ話は所詮たとえ話ですし、主観や感性の問題ですのでそこはよいかと思います。ショートカットでたとえるのはなかなかうまいと思いますし。 問題は、その後の「★気をつけること」です。 1.変数名に「*」をつけたものがポインタではない! たとえば「int a;」としてint型の変数aを宣言し、これに*を付けて「*a」と書いてもポインタにはなりません。コンパイルエラーです。*ではなく&を付けて、「&a」と書けば、変数aへのポインタになります。 これは当たり前なので、おそらくここで言いたいことは、 int a; という宣言に対し、 in
おひさしぶりです。ブログの書き方をすっかり忘れてしまいました。 タイトルのとおり、日経ソフトウエア2010年8月号に記事を書かせていただきました。 日経ソフトウエアトップページ 該当号もくじ 『マイ言語「MIL」ならできる! スクリプト言語をゼロから作ろう』を書いています。 MILは、MInimum Languageの略で、本記事のためにゼロから開発した言語です。ソースコードがCで900行程度しかないので、本記事に全ソースを掲載しています。言語処理系に興味はあっても作り方は見当もつかない、という人が、無理なくソース全体を読み解けるように配慮したつもりです。 手前味噌ですが、「十数年前の私が本誌を入手したら、切り取って永久保存にしていただろう」ぐらいの価値はあると思っています。 MILは、ソースコードを読み込み、メモリ上にバイトコードを展開して実行するタイプの言語です。 使用できるデータ型は
はてな近辺では昔から何かと話題のベーシックインカムですが、私には、これの何がいいのかがさっぱりわからんのです。 私の知識は、ここ数年のはてダのホットエントリとかに入った記事とか、小飼弾さんの404 Blog Not Found:ベーシック・インカムに賛成するのに十分なたった一つの理由とか、Wikipediaとか、その他ネットの記事くらいで、特に本とか読んで勉強したわけではないので、素人の疑問として疑問だけ投げておきます。 貧困をなんとかしたいなら、貧困層にだけ配るのがよいのでは? ベーシックインカムといえば月5万円だか8万円だかが想定されることが多いけれど、何もたとえばダンコーガイにこれ以上お金をあげることもないのでは。 財源が足りるとか足りないの話もあるけれど、当たり前の話、今現在普通に食えている人にまで配るより、今現在食えていない人にだけ配るほうがコストは少なくて済む。限りある財源で貧
Diksamの文法一覧です。Java, C++, C#等の言語をある程度知っている人はこれを読めばDiksamの基礎をマスターしてDiksamを書くことができるようになっています。 ――はい、便乗です。なにやらはてダのトップの人気記事が基礎文法最速マスターだらけになっていたので。まあ、需要があるとも思えませんが。 Diksamって何だ、って? 私が作った自作言語です。 言語が似ているだけに、下記はJava基礎文法最速マスター - いろいろ解析日記をベースとさせていただきました。 言語仕様はこちら: http://kmaebashi.com/programmer/devlang/dls_0_4_01.html この本の後半で扱っている言語でもあります。 1.基礎 プログラムの構成 プログラムは宣言部、トップレベル、関数定義または宣言、型定義、定数定義から構成されます。実行は、起動時に指定され
前回、続きを「数日中に書きます。」と言ったくせにその後いろいろ忙しかったり酒飲んだりしていて書いている余裕がなくて、そうこうしている間に、以前のC#作者Anders Hejlsbergのインタビュー記事へのJames Goslingからの反論を見つけてしまいましたので(こちら経由)また訳してみました。「The trouble with Checked Exceptions」は有名ですし以前から知っていましたが、これの存在は今回はじめて知りました。 例によって私の英語力はアレなので、間違いや訳し切れなかったところについてはご指摘をよろしくお願いいたします。 原文はこちら。 http://www.artima.com/intv/solid.html Summary James Gosling talks with Bill Venners about how to build solid ap
他人の意見の翻訳ばかりでもアレなので。 例外処理機構についての私の考え方は、Diksamがそうなっているように、 例外処理機構自体は必要 検査例外も必要 というものです。 例外処理自体の有用性について Joel Spolsky氏の記事の翻訳の感想でも書いたのですが、例外処理機構は必要だと思います。「戻り値でちまちまエラーケースを上位に戻していってうまくいくと思えるほど、私は(自分を含む)プログラマを信用していない」ためです。 Joel氏は 例外を上げるかもしれない関数を呼び、それをその場でcatchしないときはいつも、あなたは、データを整合性のない状態にしたまま突然中断された関数や、あなたが考慮しなかった別のコードの実行経路による驚くようなバグが発生する機会を作り出しているのだ。 と書いていますが、こういうケースは実際に存在します。たとえば(これは「プログラミング言語を作る」に書いた例です
JavaからC#に移った人は、C#にはなぜ検査例外がないのか? と疑問に思うと思います。それに対するC#作者Anders Hejlsbergのインタビュー記事を訳してみました(いままでにもまして訳に自信がないところが多いんですが)。 原文はこちら。 http://www.artima.com/intv/handcuffs.html 拙著「プログラミング言語を作る」内でも少し言及しています(p.340)。 ところで、JavaとC#の例外処理の違いというと「検査例外の有無」が取り上げられることが多いのですが、「スタックトレースが生成されるタイミング」も異なっており、Javaプログラマはたまにはまることがあります。その点も「プログラミング言語を作る」では言及しておりますのでぜひどうぞ(宣伝)。 関連記事: MSDN内の記事 http://msdn.microsoft.com/en-us/vcsh
mixiにこんな記事がありました。 http://news.mixi.jp/view_news.pl?media_id=20&id=1064218 愛煙家おじいさん登場、児童誌が販売中止に 福音館書店(塚田和敏社長)は28日、月刊「たくさんのふしぎ」の2010年2月号として発売した「おじいちゃんのカラクリ江戸ものがたり」(文・絵、太田大輔)を販売中止にすると、ホームページで発表した。 対象年齢は小学校3年生からで、発明家のおじいちゃんが2人の孫に江戸時代の暮らしを説明する内容。おじいちゃんはたばこ好きの設定で、喫煙したまま孫たちと同席する場面が何度も描かれている。 喫煙に反対する団体などから「たばこを礼賛している」「たばこ規制枠組み条約に違反する」といった指摘があり、同社は販売中止を決定した。 ホームページでは、塚田社長名で「(たばこは)小道具として使用したものであり、喫煙を推奨したりする
InfoQの以下の記事経由で、 Andrej Bauer氏の語るプログラミング言語の設計 こういう記事を見つけたので、 On programming language design | Mathematics and Computation 日本語に(勝手に)訳してみました。 英語が得意なわけでもないので(ていうか苦手なほうなので)変なところ等ありましたらご指摘願います。 ――というかHaskellをちゃんと勉強したくなった。 In a recent post I claimed that Python’s lambda construct is broken. This attracted some angry responses by people who thought I was confused about how Python works. Luckily there were
Inspired by みねこあさんとこ 発端: Life is beautiful: Ruby on Railsの「えせMVC」の弊害 Modelの外部インターフェイスの設計においてもっとも大切なことは、この「データの整合性」の責任を100%Model側で引き受け、「Controllerが何をしてもデータの整合性だけは絶対に壊れない」ように作っておくことである。 まったく同意です。 それに対するひがさんの反応: えせMVCについてそろそろ一言言っておくか - yvsu pron. yas 私は、Modelには収まりが悪いビジネスロジックはServiceにおくことをすすめています。この辺は好みで、永続化されないModelにおく方法もあります。Controllerにあったほうが良いこともあるでしょう。 まったく同意です。 「MVCとはなんぞや」的な話には実のところ興味はないのですが、私の理解
次のページ
このページを最初にブックマークしてみませんか?
『K.Maebashi's はてなブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く