電気羊の執務室

魔法を作る仕事をしています。

音楽と情熱

指揮者のTEDトーク

最近動画で見た、ある指揮者のプレンテーションがたいへん面白かったのでシェアします。 TEDという、アメリカの山の中で色んなプレゼンをする大会で話しているところです。

とりあえず見て下さい。

https://www.ted.com/talks/benjamin_zander_on_music_and_passion?language=ja#t-1227291

このトークが素晴らしいのは

1.誰でも音楽を楽しめる能力がある事を、会場の参加者に体験させる事。 『自分にはできる』という体験を強烈に印象付けるのは、とても貴重な事です。

2.ショパンの曲を通して、音楽の成り立ちをわかりやすく解説している事。

3.自分が取り組んでいる分野に、『誰も分かってくれない』と諦めてはいけないと教えてくれる事。

僕もプログラミング教えてますが・・・

もっと皆さんの目を輝かせられるように、僕も面白いコンテンツを作ろう・・・ そう決意を新たにしました。

今年は動画をたくさん配信するのが目標のひとつです。

Google Apps Scriptが便利

小さなアプリをGoogleAppsScriptで作る

GoogleAppsScript(GAS)を知っていますか? Googleのサーバー上に、小さなプログラムを乗せる事ができるのです。

これは地味にすごいことです。

Herokuを始め、プログラムを乗せる場所を使わせてくれるサービスは、他にもあります。

GoogleAppsScriptの何がいいか?

GASのいいところは、ある程度お手軽にサラッと書く事もでき、 Webアプリに拡張する事もできる事です。

また、自動実行で定期的な処理をさせる用途にも使えます。

イメージは太陽や風

太陽の光は、毎日定期的に降り注いで、植物を育てたり、熱を与えてくれたりします。 あるいは、常に吹いている風のようなものです。

その一部分を、自分がうまく行くように仕掛けをしてあげることで、得をすることができます。

プログラミングは、まず自分が得をしないといけません。

AIBOがニュースになってます

AIBOのニュース

AIBOのニュースが放送されています。
僕は、実家で母と一緒にニュースを見ましたが、
『可愛い、可愛い』と母は絶賛でした。

ロボットのいる未来

試作品や製品を見るまでは、『ロボットなんて気持ち悪い』と思うものですが、
一度見てしまうと、愛着がわくのもまた人間です。

うちにはルンバが一台いますが、非常に可愛いものです。
人間は、機械にすら愛着を見出す生き物なんだな、ということが、自分自身の感覚でよく分かります。

不気味の壁

不気味の壁って知ってますか?
ロボット工学をやる人の難関です。微妙に似ていないロボットを、非常に気持ち悪く感じる』という修正があるのです。

『不気味の壁』で検索すると、気持ち悪い写真が出てきます。 これらは、ロボットデザイナーが壁を超えられなかった、失敗の系譜です。

デザイナーは、完璧なデザインで人を魅了しないといけないのです。
中途半端は、逆効果なのです。

僕達も、どうせ作るなら、愛される未来を作りたいものですね。

プログラムを学ぶ=プログラマー?

Quoraの質問より。

現在、プログラミングを勉強しています。
しかし、プログラマーになりたいとは思っていません。
プログラミングの知識があるからプログラマーの選択しかないのでしょうか?

これについて、僕はこう答えました。

全業種でプログラムが必要

プログラミングできる人は、全業種で大切です。

日本は少子化で、労働人口が減ってゆくので、至る所でプログラミングをして効率化しないと、国力が衰退する一方です。 20年後には日本は隣国の一部になりかねません。

プログラムは、必ず実世界とセット

また、プログラムは、単体では存在し得ません。 レジを打つためのプログラム、在庫を管理するためのプログラム、文書を保管するためのプログラム。

プログラムは、全て『別の何かを実現するために』作られます。 なので、『プログラムの分かる〇〇業界人』というのは、非常に価値が高いのです。

異業種にこそプログラマーを!

それだけではありません。

同じレベルのスキルでも、IT業界とそれ以外では、価値が異なります

例えば、JavaScriptとSQLのスキルが少しある人がいるとします。 彼は、ソフトウェア会社のプログラマーなら見習いですが、例えば建設業界にいれば、魔法使いのように扱われるかも知れません。

しかも、ソフトウェア導入や開発を外注する時など、建設会社にシステムに詳しい人がいれば、業務ルールや業界慣習などについて、仕様の打ち合わせ精度が上がります。 その彼が、建設会社にとって、どれだけ貴重な存在か想像してください。

むしろIT業界以外にこそ、ITリテラシーが必要なのです。

神頼み

僕は、年が明けると、いくつかの神社に初詣に毎年行きます。

神前で、今年の抱負を語り、加護を求めます。

神は要るのか?

エンジニアには、信心が必要なのか? 神が本当に助けてくれるのか?という議論が、昔ありました。

その時の結論は、確かこうでした。

『あとは神頼み』というところまで、手を尽くす。
手を尽くした事を確認するために、最後に神頼みするんだ。

味わい深い言葉です。
たいてい、ちょっとテストの手を抜いたところから、見透かしたように不具合が噴出したりするものです。

パソコンに心はあるのか?

パソコンは、人を見て不具合を出したり、たまに機嫌を損ねたり、まるで意思があるようにふるまうものです。

パソコンには、心があるのか?
たまに、この話題が出ますね。

僕は、こう答えます。 『パソコンに心があると見なすと、うまく行く事が多い』
本当に心があるかは別として、経験則です。

人間に心はあるのか?

人間でも、生まれつき感情のない人が、
感情を持っている振りをすると、見破れないそうです。

我々が、本当に心を持っているのか、本当は誰も心など持っていないのか。

哲学的な問いは、僕の好むところです。

それではまた。

OSを作るといい

質問サイトQuoraより

プログラマーが少なくとも1回は作るべきプログラムは何ですか?という質問がありました。

僕は、こう答えました。

作るべき、という言葉の定義

*『作るべき』という言葉の定義を、ここでは『やらなければ失格の、必要条件』ではなく、『作った事があれば、どなた様でも理想的』という意味で解説します。

OSがおすすめ

ズバリ、OSです。 OSは、ロマンがあるので作るべきでしょう。

普段、我々が使っているパソコンは、電源を入れた時に、どこから最初のプログラムをロードするのか、それがどのようにして、日本語の文字を表示させるのか。 そのように、小さなプログラムが無限に発展してゆく様子を、感じ取る事ができます。

ふだん使うOSのありがたみ

Windowsなど、普段触るOSがどんな働きをしているのか、ふだんプログラムを作るうえで前提となっている部分のありがたみを知り、動作を理解することで、プログラマーとしてのスキルは大幅に向上するはずです。

ついでに、『ハードとしてのパソコンに、自分の書いたOSでイチから描画させる』というハード寄りの楽しみもあります。

OS作りを、強くお勧めします。

参考文献

30日でできる! OS自作入門

脳を味方にしましょう

脳を味方にしましょう

あなたの脳について、あなたはどれだけ知っていますか?

この記事では、脳科学のエッセンスを取り入れ、人生がうまく行くヒントを提供します。
自分の脳を上手にコントロールすれば、自然と爆発的な力を出す事ができます。

脳は食いしんぼう

もののサイトによると、脳は相当大食らいのようです。 https://www.kango-roo.com/sn/k/view/3725

脳が必要とする血液量は、脳組織100gに対して1分当たり50〜60mL、脳全体では1分当たり800mL前後です。1分当たりの心拍出量が約4.5Lですから、脳に流れ込んでいる血液量は心拍出量の1/5〜1/6にも達します。

この記事の最後で、脳を上手に使う方法を解説しますね。

プログラマーに必要な脳力は?

プログラマーは頭脳労働なので、いろいろな脳力が必要ですが、まず思いつくのは、『鮮明に想像する力』です。

これから作るシステムの動作や、それによって生まれる喜びを鮮明に描く。

作る最中に、動作のイメージや、部品同士が連携するイメージを持ち、うまく行きそう、うまく行かなそう・・・とシミュレーションしてみる。

これらの事を、脳内のメモリーを最大限に使って、鮮明にイメージするのです。

脳を鍛えるには?

あなたの脳に最高のパフォーマンスを出させるため、気をつけると脳にいい事は、たくさんあります
あるのですが、今日は1つだけシェアします。

比較的、反発の少なそうなものを・・・

『ながらスマホを止める』

これです。

ながらを止める

食事をしながら、または何かの合間に、スマホを見ていませんか? スマホに限らず、『ながら』をやると、脳は意味なく疲れます

『食べる』と『見る』の間に、脳の切り替えが頻繁に発生するので、それだけで脳が疲弊するのです。 しかも、『微妙に達成感がある』という、悪いおまけ付きです。

昔のしつけでは『行儀が悪いからやめなさい』と言われましたが、脳科学的にも、理に適っているのです。 礼儀作法というものは、先人たちが検証を済ませた、人間にとって得する行いの集合知なのですね。

GoogleSpreadsheetを使って、短縮URLを作る

やりたい事

複数のURLを一括で短縮したい。

要件

複数URLは、EXCELからコピペで入力完了できたほうがよい。

本日時点では、複数人同時実行は考えなくてよいが、 OS依存は許されない。

設計

EXCEL・・・はいったん断念

オーダー元が、mac環境なので、当初考えていた、
『EXCELでちゃちゃっと作る』が思ったより面倒そうでした。

WinHttpのライブラリが、macにはなく、
クエリテーブルを使っていかないと、
URL短縮用のhttpリクエストを投げられません。

ひとつURLを投げるたびに、短縮したURLを返す関数を組んで・・・ という流れをやるのに、クエリテーブル必須となると、
何かスムーズでないものを感じ、いったんやめました。

Google Cloud Platform・・も一旦やめた

GCPでWebサービスを作ろうかと思い、Pythonのプロジェクトを作りました。 Rubyでもいいのですが、バージョンに苦しんだ事もあり・・・

さて、Webでやるとなると、EXCELからの複数行貼り付けが難しいです。
複数行を取って複数行を返すところが面倒くさいです。

GoogleSpreadsheetにしました

Spreadsheetなら、ほぼそのまんまの記事がありました。

https://webapps.stackexchange.com/questions/76050/google-sheets-function-to-get-a-shortened-url-from-bit-ly-or-goo-gl-etc

これを改造して、左端の行すべてを短縮するように変えました。 また、クリアを付け、URLがない時にスキップする処理など、ガード系の処理を入れました。

ひとりツールとしては完成

EXCELからの転記も問題なくできるので、ひとまずSpreadsheetでたたき台完成としました。

画面イメージ

不特定多数の人に使ってもらうとなると、もうひと工夫、ふた工夫必要ですね。

SQL ServerにはMergeがある

SQL ServerでInsert or Update

今回、会社のデータ処理で、
SQL Serverを使って、データが存在していれば更新、
なければ追加、という処理をする必要がありました。

例によってGoogle先生に聞くと、 『SQL Serverには、Merge文があるんだよ』というお告げを受けました。

構文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MERGE INTO test_tableA AS A
    USING test_tableB AS B
    ON
    (
       A.no = B.no
    )
    WHEN MATCHED THEN
        UPDATE SET
             name = B.name
            ,age = B.age
    WHEN NOT MATCHED THEN
        INSERT (no,name,age)
        VALUES
        (
             B.no
            ,B.name
            ,B.age
        )
;

暗記できる気はしないので、いつか同じ事をやる時は、
このエントリーを見返すと思います。

参考資料

https://lightgauge.net/database/sqlserver/2446/#MERGE1SQLOK

サーバーを作り直す時、known_hostsをメンテする

さくらのVPSを作りなおした

さくらのVPSを借りていますが、新しいプロジェクトを 作るに当たって、itamaeでサーバーをいじっています。

8月ごろに一度立てたサーバーですが、 サービスを追加して、構成も変更したかったので、 いったん壊して作りなおす事にしました。
# itamaeで試行錯誤した過程が残ってしまうのも嫌だな・・・と
# 冪等性がてきとーです。

で、SSHが失敗する

最初に立ててた時も、SSHエラーを見た記憶があります。 しかし、何で出るのか忘れてしまったので、またGoogle先生のお世話に。

sshでサーバーに接続できないエラーめも-OS再インストール後【GMO】

ああ、SSHのknown_hostsに、サーバーの情報が残ってると食い違うんでした。 known_hostsから、VPSサーバーのIPを持つ1行を削除し、うまく行きました。

同じような事で困っている人に、今日のまとめです。
サーバーを壊した時は、known_hostsをメンテする。