この共通情報記号枠組みの目標

ここで提案する新しい情報季語枠組みの目標は以下のとおりです。

  1. 自然で汎用性のある仕組みにして以下の用なものの記号化に対処できる。
    1. 文字
    2. 記号になっていない、二進法のままの情報
    3. その他?
  2. 解剖がほぼ真っ直ぐで進む仕組み。
    1. 記号点はなるべく、似たものと一緒に組み合わさる。
    2. 似た形によってだます手品を避ける方法を提供する。
    3. 単純でバランスあるバイト状の圧縮仕組みに傾ける。
  3. 汎用対応。
    1. なるべく全ての言語を含む。
    2. 異なる言語の類似した文字に互換性を持たす。
    3. 既存の記号化された情報を埋め込む仕組みを持たす。
    4. 自然に拡張できる仕組みを持たす。

大きい目標になっているのは意識しております。賢い人はここまでやろうと思わないでしょう。覚悟しております。ボクにはちょっと頑固なところあるようです。

カテゴリー: Common Information Encoding Scheme -- 情報記号枠組み | コメントする

Basic Goals for this Common Information Encoding Scheme.

These are the goals of my proposal for a new information encoding scheme:

  1. Natural and general encoding, including
    1. characters
    2. numerics
    3. binary data
    4. etc.?
  2. Straightforward parse:
    1. As much as possible, codepoints for similar types should be together.
    2. Provide ways to avoid spoofing by similar glyphs.
    3. Provide simple, balanced, and effective byte-oriented compression.
  3. Generality:
    1. Include all languages, if possible.
    2. Make similar symbols from various languages compatible.
    3. Provide ways to embed legacy encodings.
    4. Provide natural means of extension.

These are grand ambitions. I am aware of that. I understand that I’m pushing ahead where smarter people would turn back. I guess I have a small stubborn streak.

カテゴリー: Common Information Encoding Scheme -- 情報記号枠組み | コメントする

FORTH 言語・システムをSH-3 への移植

これはポリテクセンター兵庫(兵庫職業能力開発促進センター)組込みマイコン技術科の訓練生として行った最後の課題の報告書です。

1. はじめに

FORTH (フォース)言語をSH-3に移植することは何のメリットがあるでしょう?

簡単に言えば、リナックスなどのホストシステムを使わず、ターゲット自体に開発を進ませることが可能になるはずです。また、組み込みのシステムはリナックスほど複雑ではなく、スケジューリングなどのシステム機能は自分で決めれるのです。

ただし、一ヶ月だけの間にスケジューリングまではできません。巧く行けば、ぎりぎりの線で、基本のシェルに相当する言語インタープリターの分と簡単なドライバを組めるという覚悟の下その道を決めました。欲張りが動いたかも知れません。

因って、以前から持っていた、開発の途中の自作 bif-c方言FORTH言語がターゲットのSH-3上リナックス上動いているのを既に確認していたので、間に合わなければ、途中切り替えることも先から考えていました。

結局、移植は半分ぐらいできました。できたソースコードをソースフォージの作業部屋に置いています。<http://sourceforge.jp/users/reiisi/pf/fig_sh/>です。BIF-C の発表の分はこれからBIFのプロジェクトページに載せるつもりです。<http://bif-c.sourceforge.jp/>の下に置くでしょう。(ウェブフィルタの関係でそのサイトページを作る作業は自宅で行うしかありません。)

2. 開発環境

ハードウェア:

  • PC (OSはMSWindows XPまたはCent OS 5)
  • Sophia Systems SH3-DSP用EJ-DEBUGモジュール
  • SH7709S CPU掲載のSH-2002及びEMB-DIO104-02

ソフトウェア:

※但し、Watchpoint を使うまでは行けませんでした。

3. 機能概要

FORTHというものは飽く迄も言語です。アプリケーションが作れるほどの性能を持っているし、ライブラリなどを組んでいくとドライバも作れます。そして、デバッガとして利用することも可能です。

3.1 アプリケーション

簡単なLED設定命令は直ちに作りました。通常のFORTHではアセンブラなどを使うところはBIF-Cの場合、C言語で追加しました。これはファイルのbif_ex.cの中に定義しています。追加できるために、シンボルテーブルの初期化を改造する必要があって、その稼働時ソートはファイルの bifst_a.c の中の COUNTCLEAR()からBALANCETREES()までの追加関数でできました。(同ファイルのxCOLD()を参照。)

3.2 ドライバ

今回はドライバがリナックスの稼働環境なので、ドライバは練習で作ったC言語のドライバのままでした。(モデルはドライバを作るための性能の分まで用意されていないのです。組むまでは8〜24人時間の作業工数を予測します。)

3.3 デバッガ

デバッガの機能の1つを例としてあげると、16進法表示の簡単なものは ファイルの tools_stdio.text の中の BYTE-DUMP から 4DUMP(32ビット毎)までの定義です。

4. 過程

•およそ3週間の間にSH-3アセンブラへの変換の半分ぐらいができました。内部インタープリターの動作を HEWのエミュレータで確認できました。ソースコードの最後の状態はfig_sh3.tgzのアーカイブファイルに、確認段階のスクリーンキャプチャーと一緒に収めています。変数などの現在の値を獲得する「@」の確認は以下のような操作でした。

debug-docol

変数の値をr1に格納し、スタックに転送してから次の仮想処理季語に制御が移るのを確認しました。

debug-docol

また、複数の仮想処理機語で構成される仮想処理機語が以下のように開始するところから、その定義が終了して呼び出し側に戻るまで辿って確認できました。
他の確認もできましたが、ここで省略します。

•最後の一週間に、「これができたはず!」という気持ちで、BIF-Cの改善を済ましてから、LED, 7セグメントLED, スウィッチ、及びLCDの簡単な制御の実例ができました。LEDに対しての使用は以下の様子です。

EMIT_LEDS

以下の映像はそれぞれの結果の様子です。

( 「67 EMIT_LEDS」、「OPEN_7SEGS 52 EMIT_7SEGS」などのあと)

LEDS

5. 終わりに

最初から移植を諦めて、BIF-C だけに集中していたら、練習の写真アプリをFORTHで組んでから、何らかの簡単なゲームもできたはず。しかし、移植が完了できずにしてもSH-3のアセンブラを大体マスターしました。機会があれば、訓練終了後移植を追い詰めることを考えていますし、BIF-Cにもっと充実した開発環境を整えることもしたいと思っています。

6. 参考文献

カテゴリー: fig FORTH on SH3 | コメントする

The Gnupg Riddle — グヌーピージーの謎々

The Conundrum — How does one get a trustable copy of gnupg?
難問は、どうしたら信頼できる GnuPG を手に入れれるでしょう?

The theory — Bad guy hackers, or good guy hackers gone bad, (or the US’s NSA) might be doing sneaky things to get you to download something you really don’t want.
理論上は、悪奴職人たち、もしくは善良だったのに間違った道を選んだ職人たち(それとも米国の国立社会安定署)の方が狡く、人がダウンロードするつもりのないモノをダウンロードさせる悪巧みを練ってとします。

For example, say you want reallyusefulappoftheweek.exe. And you trust the author. So you go to famousdownloads.com and download it.
例えば、今週の非常に便利な「reallyusefulappoftheweek.exe」というアプリをダウンロードしたいとします。製作者も信頼しています。したがって、有名なダウンロード処の「famousdownloads.com」というウェブサイトに行ってダウンロードします。

But maybe some cracked-up bad-guys decide to poison the internet directory in your area for five minutes. And it’s your bad luck to try to go to famousdownloads.com in those five minutes. (Opened the window at the wrong time!)
しかも、(仮りに)気が狂った悪奴らが5分だけの間、ご近所のインターネット索引装置に毒情報を差し込み、悪運、 famousdownloads.com へ行くことにしていたその5分間でした。(まずいタイミングでその窓を開けてしまった。)

And you end up at badguys.com instead of famousdownloads.com, but your browser is telling you that you are at famousdownloads.com because of the DNS cache poisoning. And badguys.com even passes most of famousdownloads.com on to you as it is, so you don’t notice. It’s just the download button they grab and do dirty things with.
次第に、 famousdownloads.com ではなく、「badguys.com」へ到着します。到着しているのに、領域名索引の即参照装置が毒情報を受けているので、ウェブブラウザが famousdownloads.com であると知らせてくれるのです。しかも、 badguys.com の方は famousdownloads.com の内容をほとんどそのまま引き渡してくれるので、気がつきません。悪奴らがさわって汚しているのはダウンロードボタンだけです。

So, you end up with moneystealer.exe instead of reallyusefulappoftheweek.exe.
あげく、欲しかった reallyusefulappoftheweek.exe の替わりに、あなたのお金を他所へ持っていく「moneystealer.exe」というモノを手に入れてしまう。

Back in 2007, it was hard enough to do such things that most people who could do such things would be making better money doing legitimate work.
2007年に遡ると、こんなワザが難しく、出来る人は大概、妥当な仕事の方が儲かるのだった、

But it’s a lot easier now, the economy is just going down the tubes, and governments we once trusted have betrayed us. So what was unthinkable then is something we have to think about now.
現在に戻るともっと簡単にできるし、経済は悪化ばかりの傾向ですし、かつて信用していた政府に裏切られています。一昔考えられなかったモノはもう、考慮に入れなアカン。です。

What to do?
対処の手段は?

Well, first, quit downloading on impulse. Think before you click.
先ずは、刺激反応のダウンロードをやめましょう。クリックする前に状況を確認しましょう。

Second, get tools that can check your downloads. And only download stuff that gives you information you can check against.
その上、ダウンロードを確認する道具を手に入れるべきです。そして、確認できる情報が存在する条件のみでダウンロードします。

And there is the conundrum: Gnupg is a free-and-open tool that can tell you that what you downloaded really is what it was supposed to be. But Microsoft, in their infinite wisdom, won’t put that in your copy of MSWindows when they sell it to you. So you have to download it. But how do you make sure you don’t get trickypg.exe instead of gnupg.exe?
というこで、難問がわかります。ダウンロードした物が本当にダウンロードするつもりだった物になったかどうかを調べる Gnupg と言う自由に利用できる道具は存在しますが、マイクロソフト社の賢明さにしたがって、ご購入のMSウィンドーズオペレーティングシステムにそういう道具を見つけることはありません。システムソフトウェア及びコンピュータ本体を買ったままには入っていないのです。ダウンロードすることになります。けれども、ダウンロードするに当たって gnupg.exe の換わりに、悪用ソフトの trickypg.exe が手に入ったことではないのを、どうしたら確認できますか?

I mean, it’s not like the bad guys are going to actually name it trickypg.exe. Of course they’re going to name it the name you trust, instead. Outside of ignoring the obvious truth of what goes around comes around, they are pretty smart.
悪やつらは敢えて、 trickypg.exe のように分かるようなファイル名を付けてダウンロードさせてくれるわけにならへん。むしろ、皆の信用するファイル名を付けて、ダウンロードする人をだますつもりですね。無論のことですね。自分がやったことが自分に戻る事実を無視する以外は賢いやつらですから、ね。

Now, Microsoft does provide similar tools, proprietary tools laden with Microsoft-claimed Intellectual Property (TM), tools that don’t really cooperate with the free software world. Of course Microsoft is not going to intentionally help you get free from their monoculture.
やはり、マイクロソフト社は似たものをお提供してくださるのです。独自専用の道具です。マイクロソフト社が主張する「知的財産」(商標)満載です。自由ソフトウェア業界と協力しない道具です。マイクロソフト属単品世界からは、意図的にお客様たちを解放させることは無いでしょう。

So, what should you do?
さあ、どうしましょう?

Well, if you were using a Linux OS as your base OS, Linux OSses pretty much come with essential parts installed, and you can use the OS package tools to get the full package. The package manager itself should be using those parts. But that doesn’t help, if your computer boots up under MSWindows.
ご利用のオペレーティングシステムがリナックスの基盤の上に出来ている種類のOSの場合、こういう道具の必要な部分はインストール済みのまま出荷されている。パッケージマネージャの処理にその機能を既に使用していますので、充実した商品が必要な場合残りが無事にインストール出来ます。ただ、ご利用のコンピュータがMSウィンドーズの場合はリナックスと言ってもしかたがないでしょう。

(Apple? Their official marketplace is already pretty well guarded using some of these tools, and if you install Apple’s developer tools, you can get most of what I describe here. Just make sure you get the developer tools directly from Apple, not badguys.com.)
(アップル社は、その公式市場が既にその道具を利用していてまあまあ守られています。アップル社の公式開発道具さえインストールすると下記に説明する残りの機能をを無事に手に入れることが出来ます。ただ、その開発道具は直接アップル社から受けとるのよ。不意に badguys.com などからはダウンロードしないように気をつけてください。)

I’ll talk more about Linux in a separate post, but most of the world is still stuck in the MSWorld, so I’ll talk about the MSWindows experience first, here.
リナックスについては後に取り上げるつもりですが、今のこの投稿はMSウィンドーズ上の状況を宛て話します。世界の大半がまだMS世界に嵌っていますから。

This will take some time. That’s okay. Good things come to those who wait. It will also take some work and some thinking. You have no issues with that, either, right?
話が少々長くなります。若干の作業の手間もかかるし、能力も充てる必要です。大丈夫です。忍耐は道徳の一つです。我慢して待つのは報いが必ず出てきます。異論があるまい。

But read this all the way through once, then go take a break before you start.
まあ、話が長いと思ってくれてもいいですが、とにかく、これを一読して、ちょっと休憩してから作業にかかりましょう。

First, let’s go to the place that produces gnupg. We’ll look at their download pages, and then we’ll go to a mirror site to actually download. And we’ll get the information we need to check at the same time, because checking after the fact is better than not checking at all.
先ずは、 gnupg を提供してくれるサイトに行きましょう。ダウンロードページを見てからミラーサイトに行ってダウンロードしましょう。見ている序でに確認に必要な情報一先ず確報しましょう。終わってから確認は、まったく確認しないヨリはとにかく一つ増しなのです。

We have to start somewhere, so we’ll check after the fact, just this once.
どこかから始まらないと何も始まらないので、一度だけは確認を後にします。

Now, it so happens that the gnupg.org people have some friends who package gnupg especially for MSWindows. It always helps to get at least two opinions, so we’ll go there and download their tools, too.
因みに、 gnupg.org の連中には協力の連中もいます。協力連中はMSウィンドーズ専用に gnupg をパッケージ化してくれるのです。2ヶ所の意見を求めるのは賢明ですので、連中のところにも行ってダウンロードします。

Then we can use the one to check the other.
こちの方を使ってあちらの方を確認します。

Being able to check things against each other is what is cool about the many hands approach to software. If we depend only on Microsoft (or only on Apple or only on IBM, or Oracle, etc.), we really don’t have any options to compare against. It’s hard to meaningfully compare one opinion against itself.

In the open source world, there are many big guys and lots of little guys, and when someone decides that immediate gratification is better than protecting the world from corrupt empires and other evil bad guys, well, the dirty laundry tends to show up a lot quicker. There’s a lot to compare against.

It’s not perfect, but it’s better than the monoculture.

So, let’s get started. Make a new folder on your desktop or somewhere that you can find easily. Call it “gnupg_dls” or something you can remember. (Maybe even write it down? That’s your call.)

Now, let’s go where they make gnupg. You can, and probably should, look it up on Google or duckduckgo or Yahoo or Ask, whatever your favorite search site is. All the information the search sites give you can be confusing, but not having information is worse. Don’t trust a single organization. Don’t trust a single person, not even me.

This is the gnupg site according to me:

http://www.gnupg.org

If it changes, or if your search engine can’t find it, you should find out why. Asking questions is the responsible way to use the Internet — even though it takes time and patience and you are really wanting to download your reallyusefulappoftheweek.exe and start using it.

This is their current downloads page:

http://www.gnupg.org/download/index.html

And you need to look at their file integrity check page. It’s linked there on the download page, or you can currently find it at

http://www.gnupg.org/download/integrity_check.html

Look for the list of SHA-1 checksums. It looks something like this, but not these numbers:

34bffe2e0665f567159a7fc7d9141ae4e93e85c8 dirmngr-1.1.99.tar.bz2
e490d004488b5a2c5d2830f3b41ea1186a93a97e gnupg-1.4.98-1.4.99.diff.bz2
d17ecb9c0fa77825622b60f360c3dbdac489f150 gnupg-1.4.99.tar.gz
e3d32682c100d73c4ac64716d8c8120f6d383baf gnupg-1.4.99.tar.bz2
8e5b37cb98adb1d96887c7b2325a783f68a90749 gnupg-w32cli-1.4.99.exe
8edda696554a72627791a6f821711ce9ab641fb7 gnupg-2.0.99.tar.bz2
de38230b736e9fa153ccb43fd9d59a0683eb6e6e gpgme-1.4.99.tar.bz2
6cd1cd40b87ae46310a265ac900cc482054d38de libassuan-2.1.99.tar.bz2
5f3d21aa7fa5d5c3f0c8146db013a5a04dd6e715 libgcrypt-1.6.99.tar.bz2
4e37bdfca27686d73165a433bd2625763aee7da1 libgpg-error-1.12.99.tar.bz2
e30d7d419efe4ab9fc32037807403832b3f30449 libksba-1.3.99.tar.bz2
de0d9c781f98a2ec196d75cfd974a2180159ed2f pinentry-0.8.99.tar.bz2

Copy the line that says, “gnupg-w32cli” with a version number. (Well, you can copy the whole list, but the only one you need now is the one that says, “gnupg-w32cli”.)

Use the mouse to select that long base-16 number and the file name, use the mouse’s right-click context menu, and copy that line. Open a plain text editor. (Okay, even MSWord will work in a pinch.) Paste that line into an empty document and save it. Name it “gnupg_org.text” or something you can remember. Save it in the folder where you will save the program downloads.

Do NOT copy the numbers I show here. I just made them up so you have an idea what to look for. Copy the numbers from the gnupg web page.

One more place you want to go. Look for the signing key link on the integrity page. It’s currently at

http://www.gnupg.org/signature_key.html

What you want to copy from that page, the part you need looks like this:

pub 2048R/4F25E3B6 2011-01-12 [expires: 2019-12-31]
Key fingerprint = D869 2123 C406 5DEA 5E0F 3AB5 249B 39D2 4F25 E3B6
uid Werner Koch (dist sig)
sub 2048R/AC87C71A 2011-01-12 [expires: 2019-12-31]

The “2048R/4F25E3B6” is one part of the key that you need to pay attention to. The key fingerprint line is another. You probably don’t need the sub part. Copy that all, but keep the page open.

Now, download the MSWindows gpg application. (If you already downloaded it, that’s okay, too. You just want to make sure you get the checksum and the signing key.)

Wait, you don’t see the application? Well, you have to look on the mirrors page, and you want to find the closest mirror to you. There’s a link to the mirrors page in the side-bar, which is currently

http://www.gnupg.org/download/mirrors.html

In my case, I went to

http://www.ring.gr.jp/pub/net/gnupg/

and found what we want under the “binary” link:

http://www.ring.gr.jp/pub/net/gnupg/binary/

Get the “gnupg-w32cli” file with the highest version number, currently 1.4.16:

gnupg-w32cli-1.4.16.exe 18-Dec-2013 16:50 1.5M

Get the signature, too:

gnupg-w32cli-1.4.16.exe.sig 18-Dec-2013 16:50 287

Right click and save both of those in the folder you made for the downloads.

If the gnupg.org part of the link changes, you do need to find out why. If the links underneath gnupg.org change, maybe they’ve just changed things around, or maybe you need to ask your internet service provider (ISP) to check their domain name servers (DNS). And you can check on the gnupg.org mailing list, too.

I can’t tell you whether to ask or not. You have to decide for yourself. (I would probably ask, myself.)

We are a third of the way there. Patience.

The gnupg front page mentions

Packages for MS-Windows are available at Gpg4win.

Let’s go get that one, too. Click the link on their page. It’s currently at

http://gpg4win.org/

They have a nice big download button, and they tell you the sha1 checksum right there on the download page. And there are “check integrity” links everywhere, to make it really easy to find all the checksums and the keys.

The one question which you might have is “Which?” For now, just get the vanilla app.

Okay, you can get the full app, too. That’s up to you, but the steps below assume the vanilla app. At the current time, the version is 2.2.1, the file name is “gpg4win-vanilla-2.2.1.exe”. Copy the sha1 checksum line and paste it into the same text file document where you pasted the information from gnupg.org. Copy the key/fingerprint data, too.

Now, we are ready to take the plunge. Two-thirds of the way, and you have the two applications and the keys and checksums for them. Take your pick and launch the installer. I’ll start with gnupg.

Double-click or launch it from the command line. The setup dialog opens up.

It’ll probably ask you to pick a language. Unfortunately, Japanese was not in the list, so I picked English. Then there’s the welcome dialog. Read it. Don’t take these things for granted.

Click next and you get the license agreement. Basically, it says, this is free to use and modify, as long as you don’t try to claim other people’s work as your own, just because they are so radical as to offer it freely. Read the GPL license here if you haven’t read it yet.

If you don’t understand the license, well, the ride is over. Go back to your monoculture. Okay, I’m joking. You don’t have to go back to the monoculture (and it really isn’t yours, anyway).

I’ll take one more stab at explaining it, but please read it and try to understand it for yourself.

Free here is not about money. Nobody is offering free beer (or free root beer, or free apple cider) as an incentive to get you to agree to spend more money later.

Free here is about freedom. It’s a kind of gentlemen’s agreement. Anyone who gets this software is free to do a variety of things with it. Use it. Look inside it. Figure out how it works. (Most licenses try to stop you from even looking inside, much less from trying to figure out how things work.)

You can even look at the source code! That’s how liberal the people who make it are about “intellectual property”.

Just a couple of catches:

(1) If you pass it on to someone else, you have to let them know it’s under this free license. Don’t try to keep them from exercising their freedoms.

The people who make this like to have other people help make it better, you see, and people won’t help if they don’t know they are free to do so.

(2) If you modify it, you can use the modified version yourself, all you like. But if you distribute your modifications, (and this is where most penny-pinching accountants go crazy), you have to let others take the same kinds of liberties with your modifications as you took with what you got originally.

Someday, I’m going to try to argue that this is precisely why open is secure. Not here, this blog post is too long already.

Now, let me repeat. Most people will not bother modifying the program. Unless you are one of those one-in-a-thousand helpful types, you will not. That means the license says, go ahead, use it for free.

If you are one of the one-in-a-thousand, you may want to think more deeply before you modify it. I can’t make that kind of decision for you. But I’ll tell you that I use the GPL with much of my personal work, and it’s not because I’m some sort of loser with no self-confidence.

In the meantime, use gnupg for free. Using it is okay.

Okay, you’ve read the license. Click Next. Leave all the components selected if you have room on your hard disk. (If you don’t even have 5MB of room, you definitely need to move stuff off of it.)

Now you’ve checked your disk’s free space and it’s good.. Click Next. Select a language.

You can select Japanese if you want. (I did, but I can read Japanese.) Click next.

It says it will install in the “Program Files” directory. That should be fine, and, if it isn’t, you are the one who knows where to put it. If you do, tell it where. Click Next.

I know of no reason not to put it in your program menus. But you might. If you do, change that. Click Install. It shouldn’t take more than a minute or two, probably just a few seconds. Show details if you want, click Next and click Finish. And scan the README file.

Hmm. What gets installed to the program menu is a manual page, describing how to use it from the command line in technical English. I should have started with gpg4win.

Sorry.

Now we need to set the path.

If you erase all or part of your path, you’ll need to rebuild it. I can’t do that for you. You have to be careful here.

First, find where you installed gnupg. That’s probably “C:\Program Files\GNU\GnuPG”, if you didn’t change it. You might want to check in a file Explorer window. If you do, you can just select the whole path in the URL field and copy it.

On the desktop, right-click on “My Computer”. Click on “Properties”. Select the “Detailed Settings” tab. Wait, that’s not what it’s called in English. Click tabs until you find the one with the User Profile (Permissions?) button. But don’t click User Profile, click the Environment Variables button at the bottom of the dialog.

(Give me a break. I’m working from the Japanese version.)

With the Environment Variables menu up, select the line called “Path”. It looks something like

Path %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;

Click “Edit”.

Now, be very, very careful. Read the instructions first, all the way to the end. When you are ready, be careful. (Did I say that already?)

If you delete something in the existing Path, click cancel and try again.

Leave the Path name blank alone. Put the cursor in the lower field with a single click. This is the entry field that shows things like “%SystemRoot%\System32;”. Hit the “End” key on the keyboard, or use the right-cursor-arrow key to move to the end of that long list of places where executable stuff can be found. Paste or type the path to gnupg in at the end and type a final semicolon, something like

C:\Program Files\GNU\GnuPG;

It should look something like

C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\GNU\GnuPG;

although you probably have lots of stuff between powershell and gnupg.

Click the OK button to close this dialog, click the OK button to close the parent, and likewise the OK button on the parent of that.

Scary? Not really. Just remember to click cancel if you think you deleted something.

Now, we are ready to try it out. Open a command prompt window and change directory to the download directory. Type “cd” at the prompt, then a space, then go to the file Explorer window, go up a directory there, select the downloads directory where we have been saving things, and drag it to the command-prompt window. The result should look something like

C:\>cd “C:\Documents and Settings\myuser\Desktop\downloads”
C:\Documents and Settings\myuser\Desktop\downloads>

At the prompt, type

> gpg –version

and it should respond with the version number and license information. If it says it can’t find gpg, close the command prompt window and open a new one.

If it still says it can’t find it, try setting the Path environment variable again.

If you have to rebuild your Path variable, one possible way is to log out, create a new user, open the path variable there, copy it to a text file that you save on a USB drive or something, then log back in to your regular user and paste the line of paths back in where it belongs.

If you really get stuck, ask someone to help you. If you really can’t find someone in the physical world to help you, login here and post me a question. I’ll try to walk you through it.

Okay, for the 999 in a thousand who made it safely this far, let’s use gnupg to check gpg4win.

At the prompt, type

> gpg –help

Okay, that’s just to get a look at some of the things you can do. Now, just to refresh your memory about what is called what, type

> dir

2014/02/26 15:13 <DIR> .
2014/02/26 15:13 <DIR> ..
2014/02/26 15:02 1,263 checksums.text
2014/02/26 10:07 1,610,893 gnupg-w32cli-1.4.99.exe
2014/02/26 10:07 287 gnupg-w32cli-1.4.99.exe.sig
2014/02/26 10:14 4,100,424 gpg4win-vanilla-2.2.99.exe
2014/02/26 10:14 198 gpg4win-vanilla-2.2.99.exe.sig

Okay, now we want the message digests, so type

> gpg –print-md sha1 gnupg-w32cli-1.4.99.exe
gnupg-w32cli-1.4.99.exe: 8E5B 37CB 98AD B1D9 6887 C7B2 325A 783F 68A9 0749

You can copy (right-click menu, select area to copy) from the command prompt window, or you can use file redirection to make a text file:

> gpg –print-md sha1 gnupg-w32cli-1.4.16.exe > gnupgmd.text

You want to compare the two checksums. So open gnupgmd.text with your text editor and copy the checksum from the site into this file, add spaces every four digits, and you can check that they are the same, something like this:

gnupg-w32cli-1.4.99.exe:
8E5B 37CB 98AD B1D9 6887 C7B2 325A 783F 68A9 0749
8e5b 37cb 98ad b1d9 6887 c7b2 325a 783f 68a9 0749 gnupg-w32cli-1.4.99.exe

And now we’ll check the signing key:

> gpg –verify gnupg-w32cli-1.4.99.exe.sig
gpg: 12/13/13 17:52:15にRSA鍵ID 4F25E3B6で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

Like I said, I operate in Japanese a lot. Translated, that says that the signature file was signed with the key ID 4F25E3B6, which is the short form of the fingerprint. We really want to check the long form of the fingerprint, but not yet. Between the key and the SHA1 checksum, we are pretty sure the file made it okay, and maybe has not been modified by bad guys.

Now we do the same for gpg4win:

> gpg –print-md sha1 gpg4win-vanilla-2.2.99.exe
gpg4win-vanilla-2.2.99.exe: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX

> gpg –print-md sha1 gpg4win-vanilla-2.2.99.exe > gpg4winmd.text

> gpg –verify gpg4win-vanilla-2.2.99.exe.sig
gpg: 10/08/13 00:31:48にDSA鍵ID EC70B1B8で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

So, gnupg says both gpg4win and itself are okay. Now let’s see what gpg4win has to say.

Double click gpg4win’s installer, or start it from the command line. It goes through the same set of steps that we saw for gnupg. And, in fact, it installs in the same place by default, so we don’t have to mess with the Path variable a second time. (Phew!)

No. Wait. That actually means that some things may have gotten written over. Maybe we shouldn’t have let it install in the same place. But we can still use gpg4win, and it is called gpg2. So, let’s verify both downloads again with gpg2:

> gpg2 –print-md sha1 gnupg-w32cli-1.4.99.exe
gnupg-w32cli-1.4.99.exe: 8E5B 37CB 98AD B1D9 6887 C7B2 325A 783F 68A9 0749

> gpg2 –print-md sha1 gnupg-w32cli-1.4.16.exe > gnupgmd.text

and compare.

> gpg2 –verify gnupg-w32cli-1.4.99.exe.sig
gpg: 12/13/13 17:52:15にRSA鍵ID 4F25E3B6で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

and check the key.

> gpg2 –print-md sha1 gpg4win-vanilla-2.2.99.exe
gpg4win-vanilla-2.2.99.exe: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX

> gpg2 –print-md sha1 gpg4win-vanilla-2.2.99.exe > gpg4winmd.text

and compare.

> gpg2 –verify gpg4win-vanilla-2.2.99.exe.sig
gpg: 10/08/13 00:31:48にDSA鍵ID EC70B1B8で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません

and check the key.

It’s the same software, but two different versions, compiled and packaged by two different groups. And the two versions verify each other, so we are pretty confident they haven’t been tampered with.

Now you have a tool that you can check the checksums and signatures of things you download. It’s not the most optimal method of bootstrapping your tools for this sort of work, but it’s way better than nothing.

You can download MinGW and/or Cygnus and check your downloads and and install them, and they have gnupg as well, and can give you a good counter-check, as well. (And I recommend precisely that, for several reasons.)

And you can download the install images for Debian or Fedora or Gentoo or CentOS or openBSD or what ever sounds interesting, and get yourself really free from Microsoft’s monopoly power over you.

You can also go back to gpg4win and get yourself a mail client that can send and recieve encrypted mail, by the way. But this blog post is now officially way, way too long.

カテゴリー: Computers, tools | コメントする

A Variable of Changing — 変移に関わる可変値

In the last step, we took a look at getting numbers into the program from the command line.
先のステップで、コマンドラインから数値をプログラム内に取り入れる方法を見てみました。

In the process, we used two variables:
序でに、二つのいわゆる変数を使いました。

double a = strtod( arguments[ 1 ], NULL );
double b = strtod( arguments[ 2 ], NULL );

In these two lines, a and b are variables. (strtod() is a function, but that’s for a later step.)
この2行には、 ab は変数と言うものです。(strtod()は関数ですが、その話は今度にしましょう。)

You can say they are placeholders, or you can say they are places to put numbers. We give the command line arguments to strtod(), and then strtod() gives us back whatever number it finds at the front of the argument. And we put those numbers in a and b until it’s time to print the numbers with printf():
位置留め役とか数値の置き棚とか言えば良いでほう。コマンドラインからの引数を strtod() に引き渡すと strtod() がその頭部に見つかった数値を返してくれるのです。するとその数値を printf() によって表示するときまでに ab のところに預けておきます。

printf( “%.9g * %.9g == %.9g\n”, a, b, a * b );

We need another example. Say we want to make a chart of shoe size conversions. Hmm —
さて、もう一つの例が欲しいでしょう。例えば、靴サイズの変換を表にまとめたい場合はどうなりますか?ええっと

We declare three variables for holding double precision floating point numbers, which we give the names start, end, and step. We set start equal to 5
3個の2倍正確性小数値用の変数を宣言して、名前を start, end, 及び step とします。 start の値を 5 に、

double start = 5;    /* inches */

and end equal to 13.6,
end の値を 13.6 にして

double end = 13.6;

and we don’t set a value for step yet.
step の値はまだ指定しません。

double step;

And we remind ourselves in the comment that we intend these to be inches.
そして思い出せるように、この値はインチのつもりだという注釈を残します。

Now we declare a series of steps that run in a loop. (More about loops and conditionals later.) At the start of the loop, step is set equal to start. (Ick. Did I say that?) The loop is set to continue as long as step is less then end. And once we finish the steps of the loop, we add 0.5 to step.
これをもってループに回る循環手順の定義を宣言します。(循環文及び条件文については後に取り上げます。)手順の最初は stepstart の値を設定します。(変数名は意味あるべきです。)そして手順は、 stepend より小さい限りやりくりが続きます。ループの中身の手順が終わると step0.5 を足します。

for ( step = start; step < end; step = step + 0.5 )
{

There’s only one step to the loop, but it includes multiplying step by 2.54 (the conversion factor for converting inches to centimeters) and printing the step and the conversion. (It’s a big step. C tends to be that way.)
ループの中身の手順は、実は、一段階で終わります。ただし、その段階には step をインチからセンチへの変換値の 2.54 に掛けて、変換の結果を一緒に表示します。(一段階と言って、大きく踏ん張ったようですね。C言語はそんな感じです。)

    printf( “%7.1f .. %7.1f\n”, step, step * 2.54 );

And we mustn’t forget to end the loop.
ループの終了点を宣言するのを忘れてはいけません。

}

I added a little more, so you can tell the program to start and stop at different places on the command line, and you can find it here.
開始値と終了値をコマンドラインから変更できるようにもう少しコードを足したまま、ここに置きました。

Save it as “shoechart.c” or something appropriate and compile it with
“shoechart.c” など、適切なファイル名で保存したら、

cc -Wall -o shoechart shoechart.c
./shoechart
inches — cm
5.0 .. 12.7
5.5 .. 14.0
6.0 .. 15.2
6.5 .. 16.5
7.0 .. 17.8
7.5 .. 19.1
8.0 .. 20.3
8.5 .. 21.6
9.0 .. 22.9
9.5 .. 24.1
10.0 .. 25.4
10.5 .. 26.7
11.0 .. 27.9
11.5 .. 29.2
12.0 .. 30.5
12.5 .. 31.8
13.0 .. 33.0
13.5 .. 34.3

Well, we can see that the shoe sizes in the stores are not exact conversions. (But I think we knew that?) But the numbers are close.
まあ、お店のサイズはピッタリの数値的な正確性ではないのがおわかりですね。それでも、お店のサイズにちかいでしょう。

Now, are you wondering why I set end to 13.6 instead of 13.5? Good for you. I’m glad you were paying attention. Computers are not as smart as we want to believe they are. But that will be hard to explain now, so I hope you’ll let me save that for later, too.
ところで、 end を 13.5 ではなく、 13.6 に設定したのを不思議に思っていらっしゃるのではないでしょう?よく気がつきましたようね。コンピュータは思いがちほどの賢いものではないのです。ただ、ただ今のところではちょっと説明しにくいのがありますので、これも後回しにして、後に説明させていただけませんでしょう?

カテゴリー: C Primer, Computer Languages, Computer Programming, Computers | コメントする

Passing Arguments … — 理論を引き渡したりすると…

In the first three steps, every time you want to change the numbers, you’ve had to change the program, save it again (maybe with a different name), and compile it again. That’s a lot of work. Is there some way to avoid some of that?
これまでのステップでは、数字を変えようと、プログラム自体に手を加えて、違うファイル名をつけるかどうかを決めて、保存し直してから更にコンパイルすることになっていました。結構の手間かかるやり方ですね。そんな手間を避けられる方法無いでしょう?

As a matter of fact, yes. It’s called arguing with the computer.
もちろんあります。コンピュータと言い合いすることですよ。

Just joking. In computer jargon, “arguments”, or “parameters” are what you use when you want to specify that a part of the program can change. Think of the phrase,
さて、下手な冗談をやめれば、コンピュータ用語では「アーギュメント」というものがあります。他に、「パラメータ」、「母数」または「引数」と言うのです。これを使って、プログラムの一部を変更できることを指定できます。例えば、

Just for argument’s sake, let’s try this.
仮に、議論のため、「こんなこと」にしましょう。

Or think of setting parameters to your theory.
それとも、理論の特性値を決めることを考えましょう。

But don’t think too deeply. Not yet.
しかし、今は深く考えないでください。まだです。

Let’s look a little more carefully at the the declaration of the main function of the program:
プログラムの主関数の定義を、もうちょっと細かく見直しましょう。

int main(void)

“Void” means there’s nothing there. Well, let’s try putting something in there:
“Void” (「空」とか「無」とか)の意味は何もありません。では、何かをそこに取り付けておきましょう。

int main( int argCount, char * arguments[] )

Hmm. What have we here? It looks like getting into a count of complaints, or maybe arguments. And then theres a brace of charred arguments.
ウン、何だろうこれ?文句とか、議論の数?それに、黒焦げの文句を組み合わせた何とか…

Well, I didn’t claim to be much of a comedian. And those aren’t braces, they’re brackets. Braces are the curly ones. But, as a matter of fact, there is an argument count, and an array of arguments in there. The count is an integer, and the arguments are strings of characters.
やっぱり、漫才師じゃダメ、ね。でも、実状、アーギュメント(引数)の数がありますし、アーギュメントのかたまりもあります。数は整数です。引数(パラメータ)は文字を繋いだ文字列の配列にした塊です。ちなみに、あの括弧は「ブラケット」 (“bracket”) と言います。

Now that we have them, how do we use them? Here’s one way:
そして引数なんてあれば、どう使いましょう?こういう感じで使えます。

if ( argCount > 2 )
{
double a = strtod( argv[ 1 ], NULL, 0 );
double b = strtod( argv[ 2 ], NULL, 0 );
printf( “%g * %g == %g\n”, a, b, a * b );
}

And you need to
それに

#include <stdlib.h>

up above.
をその上の方に書く必要あります。

And now you’re scratching your head and saying, “That looks like a lot more trouble!”
頭傾げて「面倒そう!」のように、ブツブツつぶやいていらっしゃるのではませんか。

But when you save it as “multiply.c”, and compile it with,
しかし、”multiply.c” といファイル名で保存して、

cc -Wall -o multiply multiply.c

you can use it like this:
と、コンパイルしておけば、

./multiply   7.345334   3.1415927<enter>
7.34533 * 3.14159 == 23.076

のように使えます。

Hmm. It does a bit of rounding for us. Let’s see if we can fix that:
ええっと、四捨五入してくれていませんか?そうですね。もうちょっと手をつけてみましょう。

printf( “%.9g * %.9g == %.9g\n”, a, b, a * b );

And now it looks like this:
にすると、出力は

./multiply 7.345334 3.1415927
7.345334 * 3.1415927 == 23.0760477

のようになります。

Okay, so does that look a little more useful, maybe?
あれ?もうちょっと便利そうに思いませんか?たぶん?

Here’s the source. (I’m going to let you fix the comments yourself.)
ソースコードはここです。(コメントは任せます。)

Explanations:
解釈:

#include <stdlib.h>

Gives us access to some more useful stuff, like “strtod()” and “EXIT_SUCCESS”.
とは、更に便利な物々を利用可能にする宣言です。その中には “strtod()” と “EXIT_SUCCESS” のようなものがあります。

if ( <condition> )
{ stuff();
}

Allows the program to do “stuff()” only if <condition> is satisfied. The braces allow more than one “stuff()” to be based on the <condition>.
によって、プログラム処理上、 <condition> を条件に “stuff()” を行うような判断ができます。中括弧のブレースは複数の “stuff()” を <condition> の条件に基づいて行うのを可能にします。

strtod( <text-string>, <text-pointer> )

collects numeric text from the front end of <text-string> and converts it to a floating point number (like a decimal fraction).
を使って、数字の文字を文字糸、つまり文字列の先端からまとめて、浮動小数型の数値に直します。

arguments[ 1 ]

is a (pointer to) the text string of the first command-line argument, 7.345334 in the above case.
とは、最初のコマンドライン引数(上記の場合の 7.345334) を指すポインタです。

NULL

in this case, is an empty argument for when you don’t care where the conversion stopped. (More on that later.)
この例では、変換がどこで止まったかは気にしない時の空引数です。(後に詳しく説明します。)

double a

declares “a” to be a double-precision floating point variable, a good place to remember the “7.345334” from the command line. So,
にすると、 “a” を、2倍の正確性の浮動小数点あり変数を定義します。コマンドラインの “7.345334” のような少数の数値を覚えることに適しています。

double a = strtod( arguments[ 1 ], NULL );

Sets up “a” as a place to keep the first command-line argument, “7.345334”, above.
これで “a” を、命令行の “7.345334” を覚える場所に設定します。

Phew! (Take a breath, contemplate the ceiling for a moment.)
一息。(一瞬、天井を熟考しましょう。)

Okay, “%g” is like “%f”, it allows us to print out floating point numbers. And
さて、 “%g” とは “f” のようなもので、少数を表示できるように指定します。そして、

“%.9g * %.9g == %.9g”

formats three floating point numbers to 9 places of precision. (Loosely speaking. We’ll be more precise later.)
とは、三つの少数の数値を九桁の正確性までに表示する形式を決める文字列です。(詳細は後に取り上げます。)

And, remember that

a * b

multiplies a by b.
は a を b に掛ける式であることを忘れないでください。

Now, don’t think too deeply yet. Compile it. Try different numbers. Maybe even try making programs for addition, subtraction, division, calculating the circumference and area of a circle, and such things.
さて、深く考えるのはまだです。コンパイルして、いろんな数値でテストしてみてください。また、足し算、引き算、割り算、そして円の周辺と面積などを計算するプログラムも面白いかも知りません。

And I won’t confuse you by pointing out that the printf() statement has parameters in it, too. No. I won’t tell you that. Not yet, okay?
それに、ね、 printf() にも引数が指定されることを指摘して惑わせてあげることなどはしません。イヤ、そんなことについて話するつもりありません。いいね?

By the way, if you want or need a good calculator now, I’ll remind you that bc is pretty good stuff.
ちなみに、よくできる計算機がもう、今必要なら、 bc  は結構できます。

man bc

カテゴリー: C Primer, Computer Languages, Computer Programming, Computers | コメントする

What’s the point in floating? 浮くには何の点があろうか。

So, you got creative in the last step and tried something like
さて、先ほどの段階で、ちょっとだけ想像力を使って、

printf( “An American size %d foot is about Japanese size %f.\n”,
11, 11 * 2.54 );
つまり、
printf( “アメリカサイズ %d 足は日本サイズではおよそ %f です。\n”,
11, 11 * 2.54 );

のように試してみたんでしょうか。

And you remembered to compile with the “-Wall” options,
そして -Wall の指定を忘れず

cc -o footsize -Wall footsize.c
つまり
cc -o footsizej -Wall footsizej.c

の命令でコンパイルして…

and the compiler told you something about arguments and int and double and … what is it saying? It looks like English, but it doesn’t make sense. You didn’t intend to argue with the computer!
なんと、 argument やら int やら double やら、丸でケンカを売っているようなわけわからない反応がコンピュータから出るのではありせん?英語かどうかわからないのですが、こんな言い合いになるつもりは全然無かったはずです。

But you remembered the “ls” command, and it looked like the program compiled, so you ran it anyway:
でも、 “ls” の命令を思い出して、コンパイルは出来たかの様子でしたので、一応、動かしてみようと思ったら

./footsize
An American size 11 foot is about Japanese size -687194767.
及び
./footsizej
アメリカサイズ 11 足は日本サイズではおよそ -687194767 です。

のような結果でした。

Yes, this computer is definitely picking an argument with you!
マサに、このコンピュータメ、ケンカ売ってんちゃうか?!

No, no, no, that’s not it at all. Like I say, I’ll tell you about the argument thing later, but this one is actually simple. (Said the mathematician.)
イヤイヤイヤ、全然ちがうよ。議論か、母数か、とにかく、もう少ししてあの argument のことをちゃんと説明いたします。今のところはそれほど難しくないのです。(数学者によるは。)

“%d” tells printf() to format the number as a decimal, uhm, integer. Err, well, that’s a decimal (base ten) number without any decimal point. (Ahem.) Numbers with decimal points are called “floating point” numbers in computer jargon. (Well, there are fixed point numbers, too, but that’s a story for quite a ways down the road.)
あの “%d” のことは、数字を、エエッと、十進法の整数としての形で出すように printf() に指示するのです。まあ、つまり、小数点無しの十進法数字、という感じです。(ゴホン)小数点付きの数字はコンピュータ専用後で、「浮動小数点」、つまり、 “floating point” 数字と言うのです。(正に、固定小数点もありますが、それは遥か先の話です。)

Clear as mud? Well, anyway, here’s how you do it:
泥水のように綺麗にまとめていますか?ごめん。とりあえず、やりたかったのはこんな構文になります。

printf( “An American size %d foot is about Japanese size %f.\n”,
11, 11 * 2.54 );
つまり、
printf( “アメリカサイズ %d 足は日本サイズではおよそ %f です。\n”,
11, 11 * 2.54 );

Notice, in particular, that the second percent symbol is followed, not by “d”, but by “f”. That would be “f” as in “floating point”, wouldn’t it?
特に注意してほしいのは、二番目のパーセントの後の字は “d” ではなく、 “f” になっています。つまり、浮動小数点の “floating point” の “f” ですね。

Picky, aren’t we?
コマかい、な。

Now, I would actually recommend “%g” rather than “%f”, but I don’t want to explain why just now, so let’s stick with “%f”.
では、私にすると、 “%f” の代わりに “%g%” の形式をお勧めしますが、今は説明したくないので “%f” のままにしましょう。

And now you can also do this with “%f”:
これで、 “%f” を利用して

printf( “A Japanese size %d foot is about American size %f.\n”,
27, 27 / 2.54 );
つまり
printf( “日本サイズ %d 足はアメリカサイズではおよそ %f です。\n”,
27, 27 / 2.54 );

のようにできます。

And you can download this sample program here. (I forget to put the “.c” on the file name, you’ll have to add that yourself when you save it.)
例文プログラムをここでダウンロードしていただけます。(ファイル名に “.c” を付けるのを忘れたので、保存するところ、自分でつけてください。)

So, now you know a way to work with fractional numbers, play around with a few. Next time, I’ll tell you a little about why computer programs have arguments.
さて、これで分数の扱う手順が見えてきます。ちょっと、遊んでみません?そして次回はコンピュータにあの argument なんかがある理由を少しでも説明させていただきましょう。

Next, let’s take about parameterizing things. 次は引数の話に行きましょう。

 

カテゴリー: C Primer, Computer Languages, Computer Programming, Computers | コメントする

Both Feet on the Rock — 両足を岩に

Okay, playing with a program that only says one thing is not all that exciting. Let’s see what ways we can make this more interesting.
分かった。一つのことしか言えないプログラムで戯れをするのはそれほど盛り上がらない。もっと面白いことできるはずです。何かできませんか?

Hmm. Well, computers are supposed to do math, right? Okay, let’s make it do some math. Replace the
エエット、まあ、コンピュータは算数が達者でしたね。よし。算数をさせてみましょう。

puts( “Got my feet on the rock!” );
puts( “足を岩に乗せたよ!” );

と言う文を

with

printf( “Got %d feet on the rock!\n”, 1 + 1 );
printf( “%d 本の足を岩に乗せたよ!\n”, 1 + 1 );

で置き換えましょう。

I’ll explain later, but save it as “foothold2.c” (or, “feethold.c”?;-) and compile and run it with
また後で説明しますが、”foothold2j.c” というファイル名で保存しましょう。 (んん、 “feetholdj.c” でもいい?;-) そしてコンパイルして稼働させるのは

cc -Wall -o foothold2 foothold2.c
./foothold2

(For the Japanese version:)(日本語の場合は)

cc -Wall -o foothold2j foothold2j.c
./foothold2j

Now that’s pretty cool, isn’t it?
格好エエではありませんでしょう?

Well, true, it’s not exactly a moonlaunch, but it’s getting ever-so-slightly more interesting, isn’t it? No?
そおか。正に月を目がけたロケットの打ち上げではないのですが、微妙に面白くなったのではないですか? 違いますか?

Well, let’s explain it anyway.
さて、オモロウ無いにしても、説明しましょう。

Where puts() outputs a simple string of text, fprintf() allows some simple formatting.
puts() の場合は単純の文字羅列を出しますが、 fprintf() にすると簡単な程度で形式を作ることができます。

In this case, the “%d” part is where the numeric result is inserted.
今の例文では、 “%d” のところは数値的結果が差し込まれるところです。

“\n” tells printf() to end the current line and start a new one.
“\n” は、 printf() にこの行を終わらせて、新しい行を開始するように指示します。MSウィンドーズ上ではちょっとややこしいことがあって、これは半角の「¥」文字で表示されることがあります。この話は今は勘弁してください。

I’ll tell you about arguments and parameters later, but, after the comma comes the math.
また今度引数や議論ではなく、エエッと、母数については後で話しますが、コンマの後は算数の計算がきます。

So, how about trying some more math. “+” is for addition, “-” is for subtraction, “*” for multiplication, and “/” for division. And don’t forget to re-compile and run it.
では、他の算数をやってみるのはいかがですか?「+」は足し算、「-」は引き算、「*」は掛け算ですし、「/」は割り算です。コンパイル・稼働の手順を忘れないでください。

And, yeah, I’ll have to tell you how to make decimal points work next time.
はい、次回は小数点を利用可能にするやり方について話しましょう。

 

カテゴリー: C Primer, Computer Languages, Computer Programming, Computers | コメントする

Foothold (Hello World) 地盤固め(世界よ!こんにちは)

I find myself with some extra time, so I decided to write a C primer blog.
ちょと暇が出来て、C言語の導入ブログを書きたいと思った。

[Tools. You must have tools. まずは道具ですね。道具が無いとできません。]

I’m going to assume you are using the gnu toolchain on a Linux or BSD distribution. Yes, if you want to really want to learn C, set yourself up a Linux or BSD box. It’s better that way.
リナックス類、若しくは BSD類のOS上、gnu の道具箱を利用することを想定としています。正に、C言語をしっかりと勉強するつもりだったら、その良い方法は Linux/BSD オペレーティングシステムを手に入れることから始めるのです。

But you should be able to use Cygwin/MinGW on MSWindows, as well, for the source code I’m presenting here. Or Apple’s LLVM (XCode) on Mac OS X, too.
しかしながら、僕がここで説明するつもりのソースコードについては、シグウィンミンGWを使って、エムエスウィンドーズ上でも勉強できるはずです。マックOSテン上のアップル社のLLVM (XCode) でも巧くいくはずです。

If you are the one who set your programming environment up, it’s a little redundant, but let’s start with getting a foothold.
もし、作業環境は自分で築いているなら、余分な作業に思われるでしょうけど、地盤を固めることから行きましょう。

This is the traditional “Hello World!” program, but I am changing the name of the program and the message.
伝説の「世界よ、こんにちは!」プログラムですが、新しいプログラム名と新しいメッセージを考えました。

Now, let’s get a good look at the code. Let’s start at the top:
さて、見学しましょう。ジックリと見ててね。まずは、頭部の数行を

/* Sample foothold program. (Yet another Hello World!.)
// 地盤固めの例文プログラム。(更にもう一つの、「世間よ!」)
// By Joel Rees, November 2013.
// ジョエル リースの2013年11月作。
// Play with it, check out your compiler and your understanding.
// いじってみて下さい。
// これを使ってコンパイラの動作や自分の理解度をご確認ください。
*/

In C, everything between “/*” and “*/” is a comment from the programmer to the reader of the program. You can think of them as a different kind of parentheses.
C言語では “/*” と “*/” が変わった形の括弧だと思えば分かると思います。これはいわゆる「コメント」です。言い残しです。プログラマがソースコードを読む人に残す伝言みたいなものです。

We will see various uses for comments as we go, but the first few lines here are just to tell you that you can, and should, play with the program.
コメントには幾らかの利用法がありますが、この最初の数行のメッセージはただ、「どうぞ、弄って見ていいよ!遊んでみていいよ!」という意味のつもりです。
#include <stdio.h>    /* 表示用・打ち込み用の標準機能を含む。 */

Going down, we see an odd looking string of letters:
降りて行くと妙な文字の組合せが見えてくる。

#include <stdio.h>

Hmm. “std” looks like an abbreviation for “standard”, doesn’t it? And “i” and “o” would be for “input” and “output”?
ええっと、 “std” とは “standard” の省略に見えるかな?それに “i” と “o” は “input” と “output” を示せそう?
(スタンダード、 インプット、 アウトプット)

So, are we saying something to the computer about including the standard set of input and output functions?
それじゃ、コンピュータに、標準 (standard) の入力 (input) と出力 (output) 機能を含め (include)るつもりのような何かを云っているかな?

Actually, yeah. That’s close enough for now. Thus the comment:
/* For putting stuff out and getting stuff in. */
ン、そうよ。今のところはそれぐらいで宜しい。つまり、コメント通り
/* 表示用・打ち込み用の標準機能を含む。 */

int main( void )

“Main” looks like this might be the main part of the program, but what’s “int” and “void”?
“Main” というと、このプログラムの主役部分がここにあるでしょうが、 “int” と “void” は何のことでしょう?
(メイン、 イント、 ヴォイド/ボイド)

Were Dennis Ritchie and his buddies warning us about programming leading us “int(o the) void”?
もしかして、デニス・リッチー氏と彼の仲間は、プログラミングという仕事は人を空虚へと導くでしょうと、警告していたワケ?

Could be. Programmers have senses of humor, too. Twisted, maybe, but, …
そうかも。プログラマなんて滑稽って判る。ユーモアの感覚をもっている。めげてる感覚かもしれませんが、…

No, no, not that, “int” stands for “integer” and “void” stands for “Something that might be there isn’t.” More about these later.
否、イヤ、違う。 “int” とは「整数」(integer) を、 “void” とは、「在ったかもしれないけど無い物」を示しているのです。後にもっと詳しく触れることにします。
(インテジャー)

And those curly braces — {} — after main, maybe they are collecting all the “stuff” of the main part together?
では、 main の後の中括弧の{}はもしかして主役部分の中身をまとめてくれているかも?

Very good.
宜し。

Okay. The comment on
オッケ。

return 0;

says, “Tell the system we made it safely.” We can understand it to mean just that?
のコメントは “システムに無事終わったことを知らせる。”と言っているのですが、そのまま理解してもいいでしょう?

Yes. By the way, did you notice that 0 is an integer?
そうです。ちなみに、零が整数の一つであることにお気づきでしょうか?

This is what the “int” before main() refers to. But I’ll explain more later.
main() の前の “int” はこの整数を示しているのですが、後にもっと説明します。

That leaves the “puts()” thingy:
残っているのは “puts()” というやつだけです。

puts( “Got my foot on the rock!” );
puts( “足を岩に乗せたよ!” );

“puts()” sends a string of letters — text — to the output, to your screen if you haven’t said otherwise.
“puts()” は文字の糸に繋いだ文字羅列のような塊を出力の方に送ります。違う出力を指定していなければ、画面上に出るでしょう。

The string is the letters between the quotes.
その糸(ストリング)は引用子の間の文字です。

Well, let’s make a place to put this. Open a command-line terminal window and do this:
さて、保管場所を作りましょう。コマンドライン端末ウィンドーを開けて、こうしましょう:

mkdir cplay
mkdir cplay/foothold
cd cplay/foothold

Now launch a text editor and copy the source code in and save it in cplay/foothold as “foothold.c”.
それで、テキストエディタを起動さして、ソースコードをコピー取って cplay/foothold の下に “foothold.c” というファイル名で保存してください。

Now you can type
これが出来たら、次を打ち込んでみてください。

cc -Wall -o foothold foothold.c

If there are no errors, type this:
エラーが出なかったら、次のコマンドを打ち込んで下さい:

ls

and you should see “foothold” in the directory list as well as “foothold.c”. (“foothold.exe on MSWindows.”)
ディレクトリリストの中に “foothold.c” と一緒に並んでいる “foothold” を見つけるでしょう。(MSWindowsの場合は “foothold.exe” です。)

Now, type this:
これを打ちましょう:

./foothold

and your program should print out what was between the quotes in the call to puts().
そして、プログラムが puts() の呼び出しの引用子の間画面に表示されるはずです。

If it did, try replacing the text in the puts() call with something else interesting. See what else you can think of to try.
できたら、文字の入替を試みてください。何らかの面白い文を入れてみてください。また、他に遊べそうなところを遊んでもいい

Don’t forget to recompile after your changes.
変更の後の最コンパイルを忘れないで、ね。

— Next, a (very) little math. — — 次回は(本の)少しの算数。–

 

 

カテゴリー: C Primer, Computer Languages, Computer Programming, Computers | コメントする