プログラム

125件の投稿

プログラミング言語

前回私はプログラミング言語について、「プロであれば、知っている言語の数を自慢するものではありません」と書きました。
勿論理由があります。

 

私たちの周りで実際沢山プログラミング言語が使われていますが、いくつかの言語を理解してみれば、言語の違いは、方言の違いだと言える程なのです。

プログラミング言語Pacsalの設計者Wirthは、次のようなタイトルの教科書を書いています。

Algorithms + Data Structures = Programs 

このタイトルは、プログラムの本質を言い当てています。
すなわち、プログラムはどんなデータをどんなアルゴリズムで操作するのか、
に尽きると言っています。

昔々、コンピュータが世の中で使われ始めたころ、すなわちIBMがこの世界の絶対王者であったころ、コンピュータは大変高価で、メモリーをふんだんに使うことができなかったので、プログラムはできるだけメモリーを使わないようにしました。

当時私たちが使うことができた言語は、FortranとCobol、少し後からC言語ですが、ここで取り入れられたのがデータ型の概念です。

データ保存倉庫に何(どんなデータ型のデータ)が入っているか、明確にする手法がとられました。

Xというアドレスには整数が、
Yというアドレスには実数(小数)が、
Zというアドレスには文字列が入っていると明示する必要があったのです。

というのは、整数や実数や文字列のコンピュータ内部での表現が異なり、多くの場合それぞれの倉庫の大きさも違うのです(倉庫の境界線はどこにも書いてありません)。Xというアドレスには実際には整数が入っているのに、
文字列だと解釈しては、何をやっているのか訳が分からなくなります。

例えていえば、全てを0と1のパターンとしてしか見えないロボットが、Xというアドレスには5㎡の面積に果物が入っているのに、10㎡の面積に建材があると思って取り出すと何をしているのか分かりません。

上でX、Y、Zを変数といいますが、以後長い間、様々な言語でこの変数のデータ型を明確に宣言することが重要であり、当然のことと考えられてきました(特にPascalはデータの型付けを厳格にしました)。

プログラムは求める結果を実現するために、このデータをどのように操作するかのロジック(Algorithm)が必要だし、それを実現する一連の命令が「手続」(Procedure)です。

この手続きも意外と少ないし、どの言語も結局同じようなことをしているのです。
例を挙げますと…

アドレス:Xに値:1を代入する。例 => X = 1
アドレス:Xの値を他のアドレス:Xに代入する。例 => Y = X
あるアドレス:XとYの値を計算しあるアドレス:Zに保存する。例 => Z = X – Y
(データの演算は、様々なものがあります。)

また一連の手続を制御するのは、アドレスの値を判定する条件文(if文、switch文)、同種の動作を繰り返す繰り返し文(While、Until文)です。

また、一連の処理を纏めておいて、必要な時に呼び出して使うサブルーチンや関数やライブラリーも昔から使われていました。

データを単独ではなく纏めて保存する仕組みとして当初から配列がありましたが、
その後リスト、ストラクチャー、ディクショナリー等の便利なデータ保存の仕組みが登場しました。

更に、近年プログラミング言語で大きく発展したのは、クラス概念です。

クラスは仕様書のようなものです。
例えば、自動車という仕様書には、車輪があり、駆動部があり、座席があります
(自動車は車輪を持っている。have)。乗用車や作業車は自動車の一種です(乗用車は自動車である。is)。

ここで乗用車は自動車クラスを継承します。すなわち乗用車といえば、自動車クラスの性質(駆動部や座席を持っている)を継承しています。

当然、プログラムは世界を定義するのではなく、そのプログラムに適したクラスを定義していきます。

実際のデータは仕様書から、「生産」(言語では通常=newを使います)することで、オブジェクトとして実体化します。
例 => 私の車 = new 乗用車

 

上の説明は、プログラミング言語をよく説明したとは言えませんが、プログラミング言語の骨組みはこのようなもので、これに色々便利な(場合によっては厄介な仕組み)が付加されています。

例えば、正規表現、デリゲイト、ラムダ式、ジェネリック、データベース、ファイル操作や様々なライブラリー(処理プログラムのパッケージ)です。

最初に書きましたが、データ型はプログラミング言語では必須の概念と考えられてきましたが、多分メモリーを気にしなくてよくなったことと関連すると思いますが、データ型を余り気にしなくてよい言語があります。

例えば、特にインタープリター型言語のPerlやJavascriptやPythonでは、必要になって初めて動的にデータ型を判断するし、Pythonでは数字を含むすべてのデータをオブジェクトにしていて、むき出しのデータではなく、データをオブラートで包んで処理することで、プログラマはデータ型を気にしなくてよいようになっています。

ともかく、手続き型言語は、それぞれ特徴を持ってはいるにしても、文法の本質は変わらないので、この部分を理解していれば、後は方言だと思う程度のものです。

勿論実務で使いこなすには、マニュアルでよく動作を確認しなければいけませんが、それも難しいものではありません。

 

 

WEB プログラミング

最近、とりとめもなく色々なことをしていて、ブログのまとまった記事を書くことができません。

 

私はWebの仕事は、数件お手伝いでプログラムを書いた程度で、あまり詳しくありません。

私は、これまでもっぱらWindows用のデスクトップアプリケーションの開発をしてきて、「もう新たに他分野の勉強をすることもない」と意欲がありませんでしたが、WEBの仕事も面白いかもしれないと、少し勉強しています。

これまで私がWEBの仕事で使った言語はMicrosoftのASP.NET以外に、Perl、Java、Javascript、Phpで、これで打ち止めと思っていたのですが、Pythonが面白そうなので、今結構一生懸命勉強しています。

 

私たちが見るWebのページは、最終的には(ユーザのコンピュータで使われるのは)、Htmlという規約に則った文字データ(その他画像や音源へのリンク)でできています。

どんなものか知りたければ、ブラウザでどこかのページを表示しておいて、キーボードで[Ctrl + U](コントロールキーを押したまま、アルファベットのU)を押すと、このファイルのHtmlデータが表示されます。

ブラウザ(Microsoftのインタネット・エクスプローラーやGoogleのChrome)が、この文字情報を元に、通常私たちが見るきれいな画面に作り替えています。

先に書いた言語はブラウザを支援するために使われます。

JavaやPerlのプログラムの中身はHtmlファイルでは見えません。
通常、画面上のボタンをクリックすると、その指令はサーバーに送られて、JavaやPerlのプログラムが計算等の処理をして、その結果をブラウザに送ってくる仕組みになっています。

PhpはHtmlファイルの中にプログラムを書きます。たとえば、

<?php $a = 1;if ($a == 2): ?>
これは正しい。
<?php else: ?>
これは間違い。
<?php endif; ?>

で、<?php  ?>で囲まれた部分がPhpのプログラムで、この処理はサーバーで実行し、結果だけブラウザに送りますので、ユーザ(クライアント・ブラウザ)に届いたときには、この部分が何であったか分かりません。
上のプログラムは、ブラウザには「これは間違い。」という文章だけが返ってきて、従ってそのように表示されるだけです。その裏の処理はユーザは知る由もないのです。

再度言いますが、PhpのプログラマはHtmlファイル(拡張子はphp)にプログラムを書き込んでいくのですが、サーバがPhpを処理し、その部分はユーザには届きません。

 

JavascriptはWebでは最も多く使われている言語だといわれています。
この言語で書かれたプログラムはユーザ(ブラウザ)まで届き、ブラウザがこのプログラムを処理します。

上で[Ctrl + U]の押し下げると、Javascriptのプログラムは丸見えになります。

 

言語にはそれぞれ向き不向きがあります。
その言語が何に力をいれているかによって、関連するライブラリーがどれだけ沢山あるか濃淡があります。

セキュリティを十分考慮したプログラムを書くにはJavaが向いています。
その代りJavaを実行する環境が必要で、サーバーで設定しなければいけません。

私たちが簡単に使うことができるレンタルサーバーでは、あまり使うことができません。

恐らく、航空券の発行や金融機関では、専用のサーバーを構えて、Javaでプログラミングしていると思います。

 

簡便にちょっとした仕事をするには、JavascriptかPhpを使うと思います。
Perlは昔はよく使われていましたし、現在も使われているようですが、PythonやRubyに取って代わられるのではないかと思います。

 

言語は実行形式で大きく、コンパイラー型とインタープリター型に分けられます。プログラムは最終的には機械語に変換されますが、一度機械語に変換(コンパイル)しておいて、実務では常に機械語化されたプログラムを呼び出して使うタイプの言語をコンパイラー型言語といい、必要なときその都度元のプログラムを機械語に翻訳して使う形式の言語をインタープリター型言語といいます。

先の例では、Javaがコンパイラー型言語でその他はインタプリター型です。

コンパイラー型のプログラムは高スピードなので、纏まった処理をする場合にはこの形式の言語を使います。Java以外では、Fortran、C、C++、VB、C#、Pascal等沢山の言語がコンパイラー型です。

一方のインタプリター型の言語は、テスト(デバッグ)が容易にできますので、一寸した仕事、特別高速を要求されない仕事には向いています。

コンパイラー型とインタープリターの中間の言語があります。
プログラムコードを中間言語に一度翻訳しておいて、実際には中間言語から機械語にその都度翻訳するものです。
実はJavaがこの形式ですし、.NETといわれるマイクロソフトのVBやC#やC++がこれに属します。

 

ついでに、言語の分類で別の分け方があります。

宣言型と手続型です。

上に挙げた言語はすべて、処理の手続きをプログラマが書いていきます。

ところが、「こうしたい」と書いてやれば、処理してくれる言語があります。データベース用言語SQLとか昔AI研究で使われた推論用Prolog等です。

前者を手続型言語、後者を宣言型言語といいます。

 

さて、Pythonをどのように使ったらいいのかまだよくわからないのですが、Webの世界を徘徊し情報を集めるには適しているようなので、少し研究しています。

 

余談ですが、
数年前、初対面のあるソフト技術者が、現在ほとんど日本では使われていないDelphi(Pascal)という言語を使っていると聞いたので、軽い気持ちで、「デルファイを使っているのでね」と話の口火と切ったところ、「デルファイも」と「も」に力を入れて返答してきて、大変面喰ったことがあります。

彼は「あれもこれも知っているのだ」と言いたかったのでしょうが、ソフト技術者であれば最低3つ、普通に5つくらいの言語が使えなければ一人前とは言えません。

プロであれば、知っている言語の数を自慢するものではありません。

WordPress プラグインの日本語化 2

WordPressやテーマやプラグインは頻繁に更新されます。
HPを閲覧している人には関係ないのですが、問題は、開発者が接するテーマやプラグインのメニューや説明部分です。

WordPress自身は日本語化されていますので、新たな手間は必要ないのですが、テーマやプラグインの更新は、古いフォルダーをそっくり削除して、新しいソースに入れ替えますから、せっかく作った日本語ファイルは跡形もなくなり、メニューや説明部分は全て英語の記述になります。

更新があるたびに、Poeditでメッセージに日本語を付けていくのは、負担になり面倒です。

一つの解決策は、以前作成した[po]、[mo]ファイルを、元あった場所にアップすればいいのですが、プラグインが大きく変わった時は古い翻訳は役に立ちません。

最新のプラグインソースを基にPoeditを使って、英語のメッセージファイル(po)を自動で作成するか、プラグインによっては、訳がついていない英語のdefault.poというファイルがありますので、これに以前の翻訳を可能な限り自動で埋め込み、後はPoeditで訳を補足していくという方法を考え、そのためにプログラムを書くことにしました。

翻訳対象は最新の[po](default.po)で、埋め込むのは古い[ja.po]ファイルです。

[ja.po]ファイルは実は次のようになっています。

#: core/class-fire-prevdem.php:285 core/init-base.php:267
msgid “”
“Many layout and design options are available from the WordPress customizer ”
“screen : see your changes live !”
msgstr “”
“様々なレイアウト,デザインオプションがWordPressのカスタマイズ画面にありま”
“す : その場で変更を確認!”

[default.po]には[msgstr “”]だけで、翻訳(日本語訳、上の例で[“様々なレイアウト,…])がありません。
[default.po]の[msgid] に対応する部分を[ja.po]から探し出して、[ja.po]の[msgstr]部分を [default.po](実際には出力用に新たな別ファイル)の[msgstr]に、埋めていくことになります。

新たな[default.po]を自動で翻訳しきれなかった部分は、Poeditを使って翻訳していきます。

VB.NETでプログラミングしました。
多少使い勝手をよくして500行弱のプログラムです。

取り敢えずこれで良しとします。

WordPress プラグインの日本語化

最近私はホームページを作るときは、殆どWordpressを使っています。

WordPressそのものは日本語化されていて、
ブログ画面も裏方の管理画面も日本語を標準で使えるのですが、
デザインを担当するテーマや追加機能のプラグインは大半が英語です。

私は多少は英語でもいいのですが、
画面に英語がでるとそれだけで読む気がしなくなります。

WordPressはPHPで書かれていて、
ユーザに何かの文章を示す部分では、下のような仕組みを使っているようです。

$message = ‘<p class=”message”>’ . __(‘You have logged in successfully.’) . ‘</p>’; $message = ‘<p class=”message”>’ . __(‘You have logged in successfully.’) . ‘</p>’;

ここで重要なのは「__(」の部分です。

WordPressでは、ここの部分を各言語に置き換える仕組みがあります。
インターネットでは、日本語を使う宣言には、
「define (‘WPLANG’, ‘ja’);」という記述がある筈だと書いてありましたが、
私は確認できませんでした。
ともかくどこかに[ja](日本語)ファイルを使うという宣言があると思います。

さて、__(‘You have logged in successfully.’)に対応する、日本語を作成しなければいけません。
Poeditというソフトがあります。
確か数千円だったと思いますが、これが思いのほか有用です。

まず、日本語化したいテーマやプラグインのソースをダウンロードしておきます。

次にPoeditを起動して、このプラグインのフォルダーを指定すると、
翻訳対象部分をすべて抽出して、表を作って表示してくれます。
表の左欄に英語を、右に日本語を表示するようになっています。

翻訳したい言語を選択(日本語)して、「事前翻訳」ボタンをクリックすると、
左蘭の英語に対する日本語訳を右欄に表示してくれます。
ただし、不十分な翻訳ですから、原則すべての翻訳を確認するように求められます。

一行一行見ていきますが、このこき幾つかの翻訳候補が表示されますので、
そのどれかでよければ、その翻訳を選択しますし、
どれもダメなら自分で翻訳を入力します。

大きなテーマやプラグインだと数百行文章がありますが、
やるしかありません。

ともかくやり遂げましょう。

出来上がりは、[po]とそれをコンパイルした[mo]ファイルが作成されます。
できたら、自分のサイトの所定の場所に二つのファイルをアップします。
(他言語ファイルが沢山アップされています)

これでWordpressの管理画面を開いたときに、
このプラグインは日本語化されています。

やれやれ。

 

ところが話はこれで終わりません。

NPO 向けホームページ

今月はNPOの手伝いで手いっぱいでした。

 

私は子供たちの支援をしたいと思って、近所のNPOに顔を出したのですが、ここのホームページが酷い(私の主観です)ので、ついでにホームページの改定を申し入れました。

ところがちょうど広報誌の発行が迫っていて、
担当者が辞めたとかで、急きょ表裏2ページの広報誌のレイアウトをすることになりました。

印刷業者側の担当デザイナーは、イラストレーターの最新版で編集しているのですが、私が持っているのは10年前のイラストレーター7で、これと互換性がありません。それにイラストレーターは昔触ったきりで、もう忘れてしまったので、私は、最近もマニュアル作成で使っていたInDesingを使いました。

InDesingは基本的に書籍の編集用で、
凝ったレイアウト画面を作成する道具ではありません(大抵のことはできますが)。

一方チラシ(のような広報新聞)では、レイアウトを色々工夫するので、イラストレーターが向いているのかもしれません。

InDesingとイラストレーターでは少しギャップがあるのですが、私はInDesingで基本デザインを決めて、デザイナーにはPDFでレイアウトを送付し、デザイナーはイラストレーターで最終原稿を作る形で作業を進めました(イラストレーターとInDesingではデータ互換がありません)。

 

さて、次に手をつけたのがホームページの試作です。

私が持っているホームページ作成用ツールはDreamWerver CS5です。

以前DreamWerver MXは少し使いましたが、
CS5はオークションで買って殆ど使わないままでした。

今回CS5を使い、「あれ!」と思うことが多々ありました。

昔は、例えば文字のフォントや色を文書入力画面で直接設定していたのですが、
今はこのようなやり方はしません。原則これらの設定はCSSファイルで定義して、HTMLファイルでその設定を使います。ですから、昔あった文字の色や大きさを変えるコマンドが、DreamWerverCS5にはありません。昔の人間は、慣れないといけません。

プルダウンメニューのコードをWEBから探し出して付けたり、PhotoShopでそれなりに恰好いいタイトルロゴを作り、HPの構築を進めましたが、そこまできて「そもそも」を考えました。

「手間暇かけて作ってみたが、今後どのように運営するのか」

私が、いくら凝って立派なHPを作っても、「いったいだれがこれからやっていくの?」という問題です。

HTMLファイルを一から書くHPでは、これからも私が運営していかなければいけません。それはNPOの主旨とも私の主旨とも違います。

みんなで作り、みんなで運営するHPにしなければいけません。もちろんコード(プログラム)を一行でも書いてはいけないのです。

色々調べて、WordPressがいいらしいと判断しました。しかも、WordPress専用のレンタルサーバーがあります。

早速、無料のサーバーを借りて試作しました。
しかしある程度やってみて、後で引っ越しするのも面倒なので、ドメインも取得しました。

キャンペーン中でorgが500円程度だったし、
NPOの結論を待っていたのでは、いつのことになるか分かりません。
勝手に取得したドメインでHPを試作しています。(NPOで気に入らなければ、私の練習用にするから構いません)

さて、無料レンタルサーバーで、ワンクリックでWordPressをインストール。
あとは、コンテンツを入力、メニューを設定し、テーマを決めれば、ホームページは完成です(それほど単純ではありませんが)。

WordPressでデザインを決めるのは、テーマといわれるもので、これは有料・無料ともに沢山ネットからダウンロードできます。テーマによっては、色々なことがうまくいったりいかなかったりしますので、きちんとテストしなければいけません。

今回、柔軟性があると思われたので、Customizrを使っています。
当サイトで必要とする機能はCustomizrで達成できそうです。

WordPressの特にヘッダーデザインは、通常サイト全体どのページも一つのデザインしか使えないのですが、Customizrでは、フロントページのデザインの変更できます。これが採用の大きんな理由です。

Customizr-Pro(約5000円)という有料のバージョンがあるので、更に期待して購入しましたが、今のところその必要はなかったかなと思っています。

 

今回の経験で、専門の管理者を持たないサイトでは、WordPressが最適だと思います。

理由は、
まず、デザインは色々探せば、多分気に入ったものが見つかります。
小さなソフト=プラグインが豊富で、スケジュール管理、グーグルマップ、
写真ギャラリー、掲示板等が簡単に設定でき、また簡単に取り外しできます。

もう一つとてもいいことは、インターネットにつながったPC(Ms Word)から、
記事をサイトにアップできることです。

NPOのメンバーの皆さんが、下書きをサイトにアップし、管理者(当面私)が、体裁や記事カテゴリーをチェックして正式に公開すればいいのです。

メンバーの皆さんの参加意識の向上に寄与するし、管理者の負担が少なくなります。

管理者の負担が少ないということは、今後、興味ある人が少し勉強すれば管理担当になれるということです。

これもNPOにとって重要なことです。

 

私はこれまで、色々なCMS、JoomlaやDrupalやConcrete等勉強しましたが、特別複雑なサイトでない限り、WordPressが一番いいのではないかなと思います。

WordPress専用のレンタルサーバーも月額1000円程度ですから、一寸したサイトには、申し分ないように思います。

 

2015年12月30日追記。

本年はこれが最後のブログです。

途切れ途切れの投稿ですが、毎日沢山の方が訪問してくださいます。

悪意ある訪問者がいるので、コメントが動作しないようにしています。

もしどうしてもいいたいことがある方は、このサイトのどこかに、メール送信のページがありますので、そのメールを使って下さい。私に届きます。

NPOの仕事を切り上げて、中断した以前の状態に戻りたいと思います。

アマゾンで読みたい本を見つけては買ったので、もはや来年いっぱいでも読み切れない本が、私の本棚からはみ出さんばかりになっています。(ちなみに、アマゾンで数十円、数百円の中古本も結構キレイです。ただし送料250円かかります)

来年もよろしく。
そして来年がいい年になりますように。
皆さまのご多幸をお祈りいたします。