とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
人気ジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
<   2015年 07月 ( 19 )   > この月の画像一覧
【恐怖】Dr. Racketの起動画面
Racketを使っている人には、Dr. Racketの起動画面はおなじみだと思います。

c0364169_20542563.png
でも、このウィンドウにカーソルを合わせると・・・

c0364169_20545702.png
ギャャャャャァァァーーー


lisperあたまおかしいって、ホントかもしれないです。


[PR]
by tempurature | 2015-07-30 20:58 | scheme
どうしてracketは流行らないのか?
私のより新しい意見はこちらになります。



racketは、PLTというグループが開発するlisp系言語です。racketはもともとPLT schemeという名前で、scheme実装の1つでしたが、schemeとCommon Lispを踏まえた新しいlispを作るという目標のもとに分化しました。

racketの1番の特徴は、windows, macOS, linuxで使えるGUIベースの開発環境 Dr. Racketであり、Common Lisp, Schemeではこれほど簡単に導入することができる環境は私の知る限りではないです。

とはいえ、日本ではracketはほとんど知られておらず、アメリカでもCommon Lisp, Schemeほどの人気はない言語です。

現在私が知る限りにおいて、なぜracketが流行っていないのかを考えてみます。


< 1 > racketの実装は実行速度が遅い

lispのコミュニティの中では、schemeに比べてracketの実行速度が遅いという評判です。実際そうなのか私自身把握しているわけでなないですが、そういう書き込みは見ています。

< 2 > 枯れた言語ではない

C, scheme, Common Lispなどは古い言語なので、ドキュメントやライブラリが充実しています。また、仕様変更が頻繁におこらないので、レガシー資産を使うことができ、また、自分の書いたコードを10年後にも使えるだろうという安心感もあります。

pythonやphpなどは人気のある言語ですが、現在も言語の仕様変更が行われているのでコードの寿命が短いという問題があります。racketも生まれたばかりの言語なので同様の問題が発生します。

< 3 > lispの慣用とは異なる

racketはschemeとほぼ同じような言語仕様ですが、scheme, Common Lispとは相容れないような違いがあります。

・識別子(identifier)は大文字と小文字を区別する

scheme, Common Lispでは大文字・小文字を区別しないので、lisperが大文字の名前と小文字の名前を使っているracketコードを見ると混乱します。

・文字コードはunicode

schemeやCommon Lispでは独特の文字列処理体系を持っていますが、racketではpythonやDに似たunicodeによる文字列処理を行っています。

これらの特徴は、lispを他の言語と併用しようと考えた場合には長所となります。racketはモダン言語の1つとしてのポテンシャルは持っていると思います。

< 4 > 実装の種類が少ない

scheme, Common Lispは商用、非商用の実装が多数あり、実行速度や拡張機能などのニーズで色々な実装を試すことができます。racketはPLTで配布している実装だけなので、素人向けではありますが、プロ向けではないのだと思います。



racketはscheme, Common Lispに比べて日本語の情報が少ないですが、導入の手軽さでは群を抜いており、GUI, webサーバー, 3Dグラフィックスのライブラリも一通り揃ってますので、趣味のプログラミング用途では一押しです。

racketが有用であるかどうかは難しいところですが、racketの日本語の情報を提供することで、多くの人が言語に関してより正しい選択ができるようにしていけたらと考えています。


[PR]
by tempurature | 2015-07-26 16:08 | scheme
最強のプログラミング環境は?
今の時点で私が最強と考えるプログラミング環境(日曜プログラミング)をまとめます。

c0364169_13364995.png
プログラミングが趣味の人は、
  1. 疲れてる
  2. ネット決済を利用する
  3. 狭いところに住んでいる
のだと思います。

○chromebook
疲れている人は、寝ながらプログラミングしましょう。その目的に最もかなっているのはchromebookです。chromebookは軽くて、ハードディスクを搭載していないので粗雑に扱ってもよく、また、壊れても安価なので財布に優しいです。

あと、プログラミングにはデュアルディスプレイが必須だと思っていたのですが、Dr. Racketやbashを使いたい場合には13インチワイドディスプレイで十分だということがわかりました。

EclipseやVisual Studioを使いたい場合はデュアルディスプレイが最適だと思いますが、そもそも趣味でJavaやC#の勉強をするのが良い選択肢なのかということも考えてみたほうがいいと思います。職場でJava, C#をメインで使っているのだとしても、家でプログラミングをするよりはJava, C#の本を読むほうがいいですし、家に仕事を持ち帰ること自体あまりよくないことだと思います。

chromebookは、サーバー構築や組み込み系のプログラミングには全く向きませんが、そういうことを家でやると疲れるし、部屋も散らかるし、お金もかかるということを理解したうえでやるべきでしょう。

c0364169_14231370.png
ブラウザとDr. Racket(リモートデスクトップ)の併用


○WindowsデスクトップPC (chromeリモートデスクトップ用)
chromebookの欠点は、chromeOS以外のOSを入れづらいことです。なので、プログラミング用のWindows PCを導入しましょう。このPCのスペックについては、プログラミングの目的によって変わってくると思います。

racketを使いたい場合は、5万円のWindows PCで大丈夫です。
Java, C#など重たいIDEを使う場合でも今のPCであれば問題ないと思います。
(実は1.5万円の激安サーバーでいいのかも... いや、危ない橋は渡らないほうがいいと思います)

<ハイスペックPCが必要になる主なシチュエーション>
  1. 1つのPCでWindowsとLinuxを併用(vmware, virtualbox)
  2. 3Dプログラミング
  3. OSビルド
  4. adobeなどグラフィック系の製品を使用する場合
  5. 自宅Webサーバー
  6. TV番組録画、動画編集

○ネット決済用PC

ネット決済を利用する場合、それ以外の用途のPCとは分けておいたほうがいいと思います。ネット決済はWindowsかMacでしかできないので、安いWindows PCを用意すればいいと思います。


[PR]
by tempurature | 2015-07-26 14:27 | プログラミング
racketのチュートリアルをやっていて
racketのWeb Applications in Racketというチュートリアルに取り組んでいます。
その中でサンプルコードを何度もupdateしているので、私も何度もそれらのコードを手打ちしているのですが(習わぬ経をなんとかというやつです)、一番最初のstruct定義のところでチュートリアル作者と私の間で感性が違うみたいです。

; チュートリアル作者(Danny Yooさん)

(struct blog (posts) #:mutable)
(struct post (title body))

; ブログ主(tempurature)

(struct post (title body))
(struct blog (posts) #:mutable)

きっとDannyさんが英語圏の人間で、私が日本人だからなのでしょう。はじめに結論ありきといいますが、あれはトップダウン的で、説明してから最後に結論を持ってくるのはボトムアップ的な考え方なのでしょう。

関係ないですが、素人の人(エグゼクティブなど)にとって一番大事なのは、目的なのでトップダウン的な考え方をするのかもしれません。専門家にとって一番大事なのは技術なので、ボトムアップ的な考え方をするのでしょう。
(ホンマでっかTVの評論家とか、ボトムアップの典型かと)


[PR]
by tempurature | 2015-07-25 04:59 | scheme
idealの読み方は?
verilog関連で、sdc制約を記述することがあって、その中でideal net(理想的なネット)という概念があります。

idealというのはreal(実在の)の反意語であって、それほどマイナーな単語ではないのですが、私はこれを「アイデアル」と読んでいました。しかし、会社の先輩は「アイディール」と呼んでいたので、まさか!!と思って調べてみると、案の定、私のほうが間違っていたようなのです。

その根拠としては、google検索で以下のように調べた際に、検索結果が

ideal アイデアル : 約58,500件
ideal アイディール : 約173,000件

となっていたためです。そーか、英語では「アイディール」の方に近い発音だというのはわかっていたのですが、日本人もアイディールと読んでいたのは驚きでした。

なぜって、warningやimageのように英語発音とカタカナ語が乖離している単語は結構あるからです。

とはいえ、自分がidealをアイデアルと読んでいるのは、数学用語のイデアルに引きづられているのではないかと思います。ちなみに、

ideal イデアル : 約167,000件

でした。

あと、tupleはタプルと読んでいますが、英語発音ではテュープル・タプルの2通りがあるようですよ。


[PR]
by tempurature | 2015-07-25 03:39 | verilog
【racket】set!-valuesの例
set!-valuesの例

(define winner "men")
(define loser "women")
(define (swap!) (set!-values (winner loser) (values loser winner)))
(define (report) (string-append winner " beat " loser "."))

> (report)
"men beat women."
> (swap!)
> (report)
"women beat men."

[PR]
by tempurature | 2015-07-24 00:03 | scheme
いろいろな言語に同じことをさせてみるサイト
racketのブログで取り上げてたので、紹介しておきます。

rosetta code (ロゼッタコード)

<概要の訳出>
Rosetta Codeはprogramming chrestomathy(プログラミング同人)のサイトです。このサイトのポリシーは、できるだけ多くのプログラミング言語に同じタスクをやらせてみて、プログラミング言語の共通点・相違点を明らかにすることです。また、1つの方法に縛られている人にとって、違うやり方を勉強する手助けにもなります。Rosetta Codeには現在773のタスクが用意されており、作成中のタスクが165あります。そして、Rosetta Codeでは、部分的に解答が用意されているものも含めると、582のプログラミング言語を確認しています。


[PR]
by tempurature | 2015-07-23 23:11 | プログラミング
プログラミング初心者のためのUNIX入門
世の中にはWindows以外にもMacOS, GNU Linux, FreeBSD, SolarisなどのOSがあります。

ここであげた4つのOSはUNIX系OSとよばれており、Windowsよりもコマンドライン機能が優れているという特徴があります。プログラミング関連の書籍の中には、UNIXについての知識が必要となるものもあるのでここで、UNIX環境の導入方法を紹介します。

たとえばC言語を習得したい場合、カーニハン&リッチー著「プログラミング言語C」で学習するのが一般的ですが、C言語はUNIXの基幹言語であるためUNIX環境を用意しなければ習熟は困難となります。

また、perl, ruby, pythonなどの言語はUNIXのシェルスクリプトと深い関係にあるのでWindowsよりもLinuxで環境を整えた方が自然で、簡単です。

Lisp, OCaml, Haskellなどのマイナー言語についてもWindowsよりもLinuxのほうが効率がいいです。


UNIX系のOSをWindowsマシンに導入する方法は主に3つあります。

①WindowsマシンにデュアルブートでOSをインストールする
 - ハードディスクの空き領域にパーティションを割り当てて、
  OSをインストールします。起動するたびにOSを選択しなければならない、
  2つのOSを同時に使うことができないといった理由から最近では
  あまり使用されない方法です。

②Cygwinをインストールする
 - CygwinはUNIX系ツールをWindowsで使用できるようにしたもので、
  立ち上げ時間が速いという特徴があります。
  ただし、拡張性にはかけます。

③仮想化ソフトをインストールする
 - 仮想化ソフトはWindows上でOSをエミュレートするためのもので、
  有名なものにVMwareとVirtualBoxがあります。
 - WindowsとUNIX系OSを同時に使用することができます。
 - また、拡張性も高く、OSをマシンに直接インストールするのと
  ほとんど同じレベルのことができます。
 - ただし、マシンリソースを消費し、立ち上げ時間もかかります。
  (物理コア数が4以上のCPU、4MB以上のメモリがないと
   厳しいです)
 - 初心者の人は32bit版Ubuntu(Linuxディストリビューションの1つ)
  をインストールしましょう。


②と③を両方実施することをおすすめします。とにかく、OSに対する
アレルギーを取り除きましょう。


[PR]
by tempurature | 2015-07-13 19:57 | プログラミング
プログラミング入門
あなたのプログラミングの動機はなんでしょうか?

・Windowsの本格3Dゲームを作りたい
 必要な知識:C++, DirectXまたはOpenGL
 難易度:4(やってもいいけど、他のことから始めることを強く勧める)

・Windowsのちょっとしたゲームを作りたい
 必要な知識:C#, Unityなど
 難易度:2

・メーラー・ブラウザ・表計算ソフトなどを作りたい
 必要な知識:C++
 難易度:5(絶対できない)

・テキストエディタを作りたい
 必要な知識:C++
 難易度:3(意外に難しい)

・Androidアプリを作りたい
 必要な知識:Java
 必要な機材:デバッグ用端末(Google Nexusが望ましい)
 難易度:3

・Webアプリを作りたい
 必要な知識:PHP, Javascript, HTML, CSS
 難易度:3

このような感じでしょうか?VBA, R, MATLABがやりたくてプログラミングを志す人はいないと思います。プログラミングをやる上で重要なことをまとめます。

① これと決めたら3ヶ月は続ける
       - あなたが今やっていることが、あなたに向いているのかどうかは分かり
        ませんが、プログラミングは1日ではできません。本でもサイトでも
        いいので、3ヶ月は続けてみてください。
       - 裏を返すと、気軽にプログラミングの勉強を開始して欲しくないという
        ことでもあります。始めようとしていることが、標準的にはどの
        くらいの期間で終わるのか、それは本当に初心者向けなのか、標準的な
        方法なのかはきちんと調べないといけないです。
       - あなたがもし職業プログラマになりたいのであれば、本当にプログラマ
        になることが最良の選択なのかをよく調べて、考えてください。
        プログラミングの才能だけではプログラマになることはできません
        (Joel on Softwareを読むのがいいでしょう)。

    ② できるだけ無料で済ませる

       - プログラミングの書籍は、初心者にとって選定するのが非常に困難です。
        20年前であればプログラミングの学習は本で勉強するものでしたが、
        今はインターネットのサイトで勉強するのが主流です。
       - プログラミングの書籍の中には、本と同じ内容のものがインターネットに
        アップされているものがあります。これは誰かが違法にアップロード
        しているものではなく、そういう喜捨の文化だからというのが主な理由
        です。本を購入する前にタイトル名で検索してみましょう。
       - プログラミングの書籍が自分のやりたいこと、自分のレベルに合って
        いるかを見極めるのは非常に難しいです。
       - MicrosoftのVisualStudioは、最初に製品版(有料)のページが表示され
        ますが、探せば無料のものも提供されています。
        (今の世の中は基本的に知らない人が損をするようにできています)
       - 本は、書いてある分量がある程度分かりやすいというメリットがあります
        が、インターネットのサイトはそうではありません。インターネットの
        サイトで学習する際の私のお勧めは、サイトの目次をExcel等に書き
        写してしまうことです。また、文字数カウントのアドインをブラウザに
        インストールして活用しましょう。
    c0364169_16575327.png












    ③ デュアルディスプレイが理想
       - プログラミングをする際、IDEの他にブラウザを開いて調べものを
        することが多いです。PCのスペックはそれほど高くなくても
        構いませんが、ディスプレイは2台使えると効率が格段に
        向上します。

    ④ おごらない

       - プログラマの能力として、速くコーディングできる、
        色々な分野でソフトを作成できるといったことは
        あると思いますが、所詮学校の勉強と同じで、誰でもできることです。
        俺スゲーとおもっても周りに吹聴しないのが、後々のためです。
       - プログラミングの学習はできるだけ簡単な言語から始めてください。
        Windowsの場合はC++ではなく、C#やJavaなどから始めるのが
        ベターです。このアドバイスを守れている人は少なく、そのため
        大抵のプログラマが損をしています。
       - プログラミングの学習をできるだけ簡単な言語から始める理由としては
        以下のことが考えられます。
         i. 難しい言語の習得には非常に大きなエネルギーが必要であり、
          習得が容易だといわれている言語でさえ、思っているほど容易では
          ない。
         ii. 言語を習得している途中では成果が全くでないので、心が折れる
          (分かりづらいですが、非常に重要なポイントです)

    ⑤ 他人と比較しない

       - 他人と比較するとつらくなります。自分が決めた目標をクリアできたか
        どうかを気にするようにしましょう。


    プログラミング初心者のためのUNIX入門に続きます


    [PR]
    by tempurature | 2015-07-13 17:56 | プログラミング
    外部リンク一覧
    このブログの外部リンクのうち、RSSフィードに対応していないページの一覧です。


    [PR]
    by tempurature | 2015-07-11 05:12