MuhのFreeBSD日記スマートフォン用の表示で見るMuhのFreeBSD日記この広告は、90日以上更新していないブログに表示しています。onlineゲームはFreeCivだけインストールして暇つぶしに遊んでいたのだけど、MMORPGというのを験してみたくなって、最初「黒い砂漠」というのをやってみようと思ったのだけど、W530では最低仕様を満たしていないようで、次にFF14のベンチマークを験してみたらギリギリの性能。それで結局、UltimaOnlineをインストールした。今のところ、遊び方がまったく判らないが、慣れればまったり遊べるかもしれない。MuhのFreeBSD日記で、関数の戻り値を一時的に保存しておく為の'result'を変数として宣言すると、Lazarusで識別子'result'がダブっていると怒られる謎について書いたら、有り難い事にコメントを頂いた。変数があるため、varで再宣言するとエラーになっているのだと思います。FPCとDelphiでは、Result変数はvarで宣言無しでも使えます。resultを変数宣言を削除、Lazarusの環境下でコンパイル。結果ご指摘頂いたとおり、エラーはでなかった。叱られる結果となった。Delphiでは試していない。コマンドラインから使用したコンパイラは、'\lazarus\fpc\3.0.4\bin\x86_64-win64\fpc.exe'。気になってにググってみたら、以下のようなスレッドを見つけた。[2014/02/26即ち、コマンドラインからfpc.exeでコンパイルして、Lazarusと同様の結果を得る為には、コマンドラインに'-MObjFPC'オプションをつける。objfpc}を追加すれば良いらしい。ディレクティブの方を試してみたところ、コマンドモードの方でも変数宣言なしでコンパイルする事ができた。識別子'Result'が変数宣言なしに使えるという事自体に、たいしたメリットはない。互換性の問題は今後も発生するかもしれないが、それはその時対応すればよいという事で、ResultをRsultValueに変更する事で、互換性の問題については、とりあえずの回避する事にする。Pascalとしてコンパイルされる。Pascalの言語仕様の違いとして捉えるべきらしい。06:00Pacal再入門:Resultの扱いTweet広告を非表示にするもっと読むコメントを書く2018-05-14Pascal再入門:ID3TAGの読み取り、車輪の再発明ID3TAGの仕様の解説を参考に、コマンドモードで使えるID3TAGの読み取りの為のプログラムを書こうとしている。必要に迫られているわけではなく、Pascalのプログラミングを思い出す為の題材として適当だと思い、現物合わせしながら、とりあえず手持ちの楽曲ファイルのタグを読み出せればいいと思っていたのだが、オフセット値の計算とか文字コードとか何かと面倒臭い。カルト・ドラン)を見つけた。有り難く参考にさせて頂く。01:24Pascal再入門:ID3TAGの読み取り、車輪の再発明Tweet広告を非表示にするもっと読むコメントを書く2018-05-12Pascal再入門:ID3TAGの解析、リハビリに適度な低水準処理ID3TAGにはバージョンがあって、ID3V1の構成は単純で取り扱いは簡単だが、ID3V2の場合は各情報のオフセットを読み取る必要があり、それもバージョンにより取り扱いが異なるようだ。ファイルの冒頭から3バイトの識別子でV1とV2を区別し、V1の場合はその後に固定長の情報、即ち「曲名」「アーティスト名」「アルバム名」...等が並ぶ。V2の場合はちょっとややっこしくて、3バイトの識別子のあとの2バイトがサブバージョンになり、そのサブバージョンで構成が異なる。ヘッダ)には、ID3v2.2とID3v2.3が解説されている。ID3TAGを書き加えた。end;end.これを実行した場合、以下のようになる。"11-Chiquitita.mp3"id3v2.00[68.51.3.0.0.0.3.47.118.0.0]...dummy3...はバイト配列をそのまま出力しているので、文字化けする。,,,等は読み取れる。22:52Pascal再入門:ID3TAGの解析、リハビリに適度な低水準処理Tweet広告を非表示にするもっと読むコメントを書く2018-05-12Pascal再入門:とりあえずmp3ファイルを読み込んでみる今、書こうとしているのは、mp3ファイルからid3tagを読み取る為のプログラム。Pascalでのテキストファイルのシーケンシャルな読み書きは、日常的に使っていたのだが、バイナリーとかランダムアクセスは使う機会がなかった。id3tagの構造とか文字コードの知識とかが必要。座学で知識を収集してからでは、いつまで経っても先に進まないので、とりあえず読み込んでみる。対象は、前回分割したunitの片割れ。分割したのは、対象を局所化する為。writeln('dummy3');end;end.このunitと、呼び出し側のプログラムのコードを再コンパイルして、適当なmp3のファイル名を引数にして実行すると、文字コードとバイナリの混在した出力が得られる。最初の3文字'ID3'が読み取れたので。プログラムは正常に動いている。この後の出力を解析する必要がある。ID3TAGに関しては、とりあえず、最初にヒットした以下のサイトを参考にする。04:10Pascal再入門:とりあえずmp3ファイルを読み込んでみるTweet広告を非表示にするもっと読むコメントを書く2018-05-10Pacal再入門:Unitを2つに分ける引数として与えられたファイル名の妥当性の検証の為のコードと、未実装のID3TAG解析の為のコードを分ける為に、Unitを分割した。呼び出される側のUnitと本体のProgramを毎回コンパイルしなければならないのは面倒臭いが、これは仕方がない。sim4で呼び出す事にして、myAppの方は//でコメントアウトしたのだが、ダブって呼び出された。コマンドラインで使うコンパイラオプションも良く判らないので、オプションなしで使っている。ソース中で使うべきデレクティブも無視。Pageにドキュメント類は整備されているのだが、なかなか読む気になれない。本棚に紙のマニュアルも発見しているのだが、分厚過ぎて背表紙を見ただけで、持ち出したくなくなる。fpでCUIベースのIDEが起動するらしいのだが、FreePascalではなくLazarusuをインストールした為か、fp.exeは見当たらない。このインストールではC:\lazarus\fpc\3.0.4\bin\x86_64-win64\配下にバイナリーがある。<ターゲットのソース>でコンパイルしている。ソースコードもdesktop/doc/fpc配下に置いている。最終的には生成される単一のexeファイルのみで実行できるので、後腐れがなくていい。LispのメリットPascalの再学習を始めて判ったEmacsLispのよいところは、細かな事を覚えなくても、なんとなく動くプログラムが書けてしまう事。お約束が少ないので、最初の敷居を踏み越えてしまえば、類推的に先に進めてしまう。お約束はあるのだが、それほど複雑なものではない。Pascalがそんなにややっこしい言語だとは思っていなかったのだが、一旦忘れてしまって再学習となると、結構細かくて面倒くさい。覚えなおす事が多過ぎる。コンパイラ独特のお約束もある。一昨年、Lispをいじり始めた時、BASICの気軽さに似ていると思ったのだが、これはインタプリタの気軽さだったのかもしれない。昔はインタプリタは遅くて初心者用の言語というイメージがあったが、今はハードウェアの処理速度が速くなったし、主記憶容量も比べ物にならない。逆にコンパイラが吐き出す実行ファイルは大きくなり、NETとかLLVMとかの前提になったりして、昔の単純にマシン語に変換するコンパイラではなくなってしまっている。Lispの主戦場はあくまでもEmacs用のマクロ言語なので、一般的なプログラミング言語とは用途は異なるのだが、目的がEmacsの世界で用が済んでしまうのなら、対象が具体的な事もあいまって、手軽で強力な手段になる。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。