iTunes 終了時にBDトレイがなぜかイジェクトする

うっとーしくて仕方ない。

ちなみに OS は Windows 7 (x64)。

 

ちゃんとテストしたのかな? バグってるから早く直して。

iTunes はバージョンアップの度に、

何かの動作がおかしくなっている事が多い気がする。

マイ○スイー○ーもどき

暇だったので Pharo で作ってみました。
ベースは PharoByExample に出てくる LightsOut です。
まだ点数やプレイ時間を計測する機能はありませんが、一応一通りの機能は作りました。たぶん。

それと、版権にひっかかりそうなのでタイトルは一部伏せましたw
ゲーム自体は作者がアホなため全然解けませんwww
f:id:umeaji:20180922101946p:plain
アイコンは Pharo で使っているものをお借りしてます。
ちなみに、

Smalltalk ui icons

をインスペクトすると、Pharo が持ってるアイコンの一覧がわかります。
URL があるのでアイコンパックをダウンロードして zip の中身を見たほうが良いです。
Pharo で頑張って探すよりも。

Brilliant Stars Project

| rotatePoint calcPoints mergePoints starPoints |
	
rotatePoint := [ :x :y :rad |
	((rad cos * x) - (rad sin * y)) @ ((rad cos * y) + (rad sin * x))].

calcPoints := [ :r |
	(0 to: 8/5 by: 2/5) asOrderedCollection
		collect: [:each |
			rotatePoint value: r value: 0 value: (each * Float pi)]].

mergePoints := [ :outer :inner | | points |
	points := OrderedCollection	new.
	1 to: outer size do: [ :i |
		points add: (outer at: i).
		points add: (inner at: i)].
	points].
	
starPoints := [ : r | | outerPoints innerPoints |
	outerPoints := (calcPoints value: r) collect: [ :p | p rotateBy: (Float pi / 2) about: 0 @ 0].
	innerPoints := (calcPoints value: r / 2) collect: [ :p | p rotateBy: (Float pi / 4) about: 0 @ 0].
	mergePoints value: outerPoints value: innerPoints].
	
(PolygonMorph
	vertices: (starPoints value: 20)
	color: Color yellow
	borderWidth: 2
	borderColor: Color black) openInHand

PharoByExample のモーフの章で StarMorph が出てくるのですが Pharo 6.1 (stable) には実装されていないようなので、作ってみました。
ワークスペースに貼り付けて Do It すれば、星モーフ(のように見えるポリゴンモーフ)が現れます。ちょっといびつですが、それはご愛嬌ということでw

プロコン

暇な時に過去問を解いたりしています。コンテスト自体は参加してません。
ほとんどのコンテストは、問題を解く早さにばかり傾倒していて自分は面白いと思わないからです。
ビジネスにおいては「早さ」がとても重要なのでしょう。自分もそう思いはしますが、趣味でコードを書くなら、時間に追われるのはご免です。なんで休日にせかせかコーディングしなきゃならないんですかね。休日ですよ、休日? 自分は楽しさを見い出せないですね。採点基準が「コーディングの早さ」だけですよ。極端な話、紙と鉛筆で解いて、数字を出力するだけのプログラ厶でも正解ですよ。コードの中味なんて関係ないです。でもそんなコードばかりアップしてると、お前ふざけんな!って運営から注意されるのかな? 真面目に解くコードしか書かないから、どうなるのかわからないですw テストデータ(非公開)を用意してるサイトもありますが、そういうズルをする人用の対策でしょう。
あとはマイナー言語はほとんど使えないところが多く、やはりこれもビジネス前提です。たいてい流行りの今時の言語しか使えません。SchemeSmalltalk がないとかムカつきますねw 実際に就活にも利用されるみたいですし。まあ、そうですよね。マイナーな言語を常用する人は、「よしよし、やっぱり無いな(ニヤリ」ぐらい言わないといけないのでしょう*1w
というわけで、最近流行っているらしいプログラミングコンテストはあまり面白いとは思いません。ビジネス臭がプンプンして自分は嫌です。

*1:プログラミング言語に限らず、メジャーになるとつまらなくなるのは世の常です。

LISP

LISP の名前は「list processor」に由来します。

要するにリストを処理するプログラミング言語です。

リストを入力して、それを処理して、リストを出力します。

 

一般的なプログラミング言語の場合:

入力データ → [処理] → 出力データ

 

これが情報処理(プログラミング)の基本ですよね。

でもちょっと待ってください。

 

LISP の場合は、データはすべてリストです。

実は、処理もリスト*1です

 

LISPの場合:

入力リスト → [リスト] → 出力リスト

 

LISP において、コードとは、

リストを入力し解釈してリストを出力するリスト。

となります。みんなリストです。

他言語で言う「処理(コード)」もリストなので、入力が他言語で言う「処理(コード)」でも良いのです。もちろん、出力が他言語で言う「処理(コード)」にもなりえます。

 

他言語のために書いてみますが:

入力コード → [コード] → 出力コード

 

LISP では普通にできます。

「コードを入力して解釈しコードを出力するコード」が簡単に書けます。

先にも言ったとおり、LISP ではデータもコードもリストだからです。

 

LISP では:

データ = コード = リスト

 ですから、

 データを入力して解釈しデータを出力するデータ

コードを入力して解釈しコードを出力するコード

 

は、なんの問題もありません。

 

コードを入力して解釈しコードを出力するデータ

コードを入力して解釈しデータを出力するコード

コードを入力して解釈しデータを出力するデータ

データを入力して解釈しコードを出力するコード

データを入力して解釈しコードを出力するデータ

データを入力して解釈しデータを出力するコード

 

すべての組み合わせも実現可能!

(リストを言い替えただけですし)

 

なぜなら LISP では

データ = コード = リスト

であり区別しないからです。

そして LISP はリストを処理する言語です。

 

処理はコードじゃなければいけないなんて、誰が決めたんですか?

入力がデータじゃなければいけないなんて、誰が決めたんですか?

出力がデータじゃなければいけないなんて、誰が決めたんですか?

そんな決まりを作ってしまうからプログラムの柔軟性が損なわれるのではないですか?

 

LISP では

データ = コード = リスト

です。リストを処理する言語。それが LISP です。

 

この柔軟さが「パワー」を生み出すわけです。

一つ例を挙げると、LISPLISP だけで LISP が実装できます。

 

「ソフト」ウェアって言うぐらいですから、柔軟じゃなきゃダメでしょう?

あなたの使っているその言語は石みたいに硬いですよ。

そして、その言語を使うあなたの頭は、固定観念でカチカチなのでしょうね。

石のように。

*1:S式と呼ばれます

Pharo はじめました

Pharo - Welcome to Pharo!

Windows 用は 64 ビット版の開発は、遅れてるっぽい感じかな。「Workspace」は「Playground」に名前が変わってましたが使い方は同じでした。いちおう初心者なのでwww、「Pharo by Example」を読んでいます。文章量は書籍一冊分ぐらいのボリュームがありますね。
Pharo の最大の良さは、
老害がいなそう
って事ですかね。
老害ウザイですからね。Smalltalk コミュニティにとって最大の敵は老害です。

ところで、LISP の有名なポエムに

LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
たとえ、実際には LISP そのものをあまり使わなくても。

というのがありますが、Smalltalk についても同じ事が言えると思います。

Smallralk は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
たとえ、実際には Smalltalk そのものをあまり使わなくても。

OOP を真剣にやろうと思うなら、Smalltalk を触ってみてはどうでしょうか。
きっとメインで使っている OOPL の良い手助けになりますよ。

じゃあ、なにかいと。Smalltalk 触らなきゃ OOP は真剣にはできないのかよ、と思うでしょう?
少なくとも自分は ○++*1 や Ja△a*2 では OOP のなんたるかは
まったく理解できませんでしたね。
今は仕事でメインで使っているのは C# ですが、おかげさまで「腕が良い」と褒められることがよくあります。(ちょっと自慢しましたw)
LISPSmalltalk のおかげだと思っています。

*1:実名は伏せましたw

*2:実名は(ry