「ほっ」と。キャンペーン

とりとめのないことを書いております。
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年 10月 ( 7 )   > この月の画像一覧
【racket】ソーシャルゲームのAP充電時間を計算するスクリプト
#!/usr/local/bin/racket
#lang racket/base

(require racket/format)

(define ap-unit-time 5) ; in minute

(define (print-usage)
  (map (lambda (str) (printf "~a\n" str))
       '("Usage: ap-charging-time.rkts [current-ap] [max-ap]"
         "Calculates \"AP\" charging time of social games")))

(unless (= (vector-length (current-command-line-arguments)) 2)
        (print-usage)
        (exit 1))
(define current-ap
  (string->number
    (vector-ref (current-command-line-arguments) 0)))
(define max-ap
  (string->number
    (vector-ref (current-command-line-arguments) 1)))
(when (or (not (integer? current-ap))
          (not (integer? max-ap)))
      (print-usage)
      (exit 1))

(define total
  (* (- max-ap current-ap) ap-unit-time))
(define minute 
  (remainder total 60))
(define hour
  (remainder (quotient total 60) 24))
(define day
  (quotient total (* 60 24)))

(define (%02d num)
  (~a #:min-width 2 #:align 'right #:pad-string "0" num))

(printf "rest time: ")
(unless (zero? day) (printf "%d day(s), " day))
(printf (string-append (%02d hour) ":" (%02d minute) "\n"))


[PR]
by tempurature | 2015-10-21 00:27 | scheme
結局Lispとは何だったのか?
CやJavaでプログラミングをしていると、なんで同じようなコードを何度も何度も書かなければならないのかと考えこむことがある。または、プリプロセッサ仕事しろとか、云々。

現代的な意味において、Lispとはそれに対する合理的な解の1つであるように思う。つまり、ソースコードの中で文法を記述できるとするならば、どのくらい効率的かということだ。

今の私の感覚で言うと、こんな感じ。

・コード効率はCの2倍(とはいえライブラリが貧弱なのでむしろ効率悪い)
・単純なくせに難易度が高い
・可読性はよくない
・実行効率もLL言語より悪い

大体、つい最近まではLL言語はプログラミングができない人がやるものだと思われていたが、LL言語というのはLispとCが下地にあって、両方のいいとこどりをしている。だからLisp言語でいいところといったらマクロくらいしか思い浮かばないのだ。

とはいえ、schemeはやっておくと他の言語で書いた時もソースコードがキレイになるというのは本当だと思う。Lispというのはある意味Cよりも危うい言語で、その中でソースコードが書けると他の言語でも難なく書けるというボディビルディングのような側面がある。また、ライブラリを考慮しなければコード効率は最強なので、他の言語のソースコードも、最適な記述方法なのかヘボいコードなのかを一発で見ぬくことができるようになる。

あと、言語の難易度はracket < scheme < Common Lispだと思っていたが、むしろCommon Lisp < scheme < racketではないかと思っている。

racketは環境が一番充実していて素晴らしいのだが、まず日本語のドキュメントが皆無、英語のマニュアルもどことなく計算機科学者向けのまどろっこしい説明になっていて困る。racketはschemeとCommon Lispのいいとこどりの言語らしいのだが、どこかschemeとCommon Lispを両方理解しているものとしてマニュアルを書いているような感がある。よって一番難解。

schemeは、定本がなくて困る。SICPは読むのを断念した。

Common Lispは、ポール・グレアムのANSI Common Lispが一番安心できる定本であるように思う。Common Lispの難易度はC++と同じくらいなのではないかと思う。

[同日 追記] schemeについては、「プログラミングGauche」という本が一番よさげなので、読んでみて、よければ記事を書き直したいと思います。

[PR]
by tempurature | 2015-10-12 19:09 | プログラミング
経験でものをいう人は矛盾した言い方をすることが多い
経験知は暗黙知なので、アドバイスをする人はアドバイスしようと思った時にはじめて言葉を組み立てていたりします。大抵の発言というのは、提案だけでなく理由もつけるものなので、付けるのですが、それは後付けであることが多いです。

また、経験からくる提案は、状況に対してセンシティブであることが多いので、前提が間違っていて見当違いになってしまうことも多いです。

あと、理論の振りをした経験論も多かったりします。その場合、理由の部分で矛盾しているが、実践してみるとうまくいくことが多かったりします。Bohr理論みたいなやつです。

「〜が多い」が多くてすみません。あと、具体例を挙げられなくて申し訳ないです。

私は賢い方ではありませんが、人間というのは論理だけで出来ているわけではないし、論理だけでは解決できないことがほとんどので、先達のアドバイスは大事だということが言いたかっただけです。


[PR]
by tempurature | 2015-10-12 17:08
ソーシャルゲームのいけてないところをあげてみた
久しぶりにソーシャルゲームをやってみました。
やばい臭いがしたのですぐやめました。

で、なぜやめたのかをまとめてみました。実際にやったゲーム名は書かないです(ひどい)。

1. ゲームは所詮人の作ったものなので、それのスキルを高めてもたかが知れてる
2. 年齢層が低め
(自分はこじんまりした武器や服装が好きなのですが、強い武器はでかくて派手でダサいので、やめました。じみに強い武器とか服装とかが、そこそこあればやってたかも)
3. ゲームには終りがある
(シナリオを全クリアするか、トロフィーあつめるか、レベルがカンストするなどなど)
4. 単純に疲れる
5. ゲームの事しか考えられなくなる
6. 時間を食う
7. 精神力を消費する
(これはゲームがテレビやネットサーフィンに比べて劣っているところであり、実生活でも精神力を消費するのにさらに消費してどうするのってことになる)
8. 常に他人と比較される
(ランダムで他プレイヤーと連携させることで、自分のぬるさを体感させる)

よくある回答で、お金を消費するというのがありますが、月1万位で、趣味としてのパフォーマンスがよければありだと思っています。

自分は格闘ゲームや落ちゲーが苦手だったので、もともとゲームの才能がなかったんだと思います。

クリーチャーを散弾銃でほおるのは楽しい(そういう感覚もどうかとは思います)。だけど、それが作業になると楽しくない。自分がゲームに求める性質は、次のようなものになると思います。

1. 短時間で終わる
2. 依存性がない。別作業をする気を換気させる
3. アドレナリンと幸福感を一気に高めることができる
4. 初心者でも、ヘビーユーザーでも楽しめる


[PR]
by tempurature | 2015-10-12 15:43
らららラケットプログラミング / Lalala, racket programming!!
ラケットプログラミングをエンジョイするためのロゴが頭にうかびました。これはひどい(笑)

c0364169_03310654.png

[PR]
by tempurature | 2015-10-08 03:33 | scheme
【happy-saiban.sh】不吉な数字が入っていない4桁の数字のリストを出力するスクリプト
シェルプログラミングではインデントが必要ないことが多いので、exciteブログにのせるのが楽でいいです。

[スクリプトの本体]

#!/bin/sh

python3 -c 'for i in range(0,10000): print("%04d" % i)' \
| sed '/4/d' \
| sed '/9/d' \
| sed '/13/d' \
| sed '/666/d'

[実行例]

$ happy-saiban.sh | wc
3890 3890 19450
$ happy-saiban.sh | head
0000
0001
0002
0003
0005
0006
0007
0008
0010
0011
$ happy-saiban.sh | tail
8877
8878
8880
8881
8882
8883
8885
8886
8887
8888


[PR]
by tempurature | 2015-10-06 23:05 | プログラミング
Chromeリモートデスクトップ導入時にやっておきたいこと
リモートデスクトップは便利だけど、セキュリティが心配と考えている人は多いと思います。

Windowsのデフォルト状態では、ログインユーザーが管理者になっていますが、これを標準ユーザーにすることで、攻撃者が接続先PCに侵入してもシステムへのダメージを低く抑えることができます。

管理者がインストールなどの権限を必要とする操作を行う場合には、ユーザーアカウント制御(UAC)の画面が表示されます。

c0364169_16310114.png
標準ユーザーが操作を行う場合、ユーザーアカウント制御の画面で管理者のパスワードが要求されます。
c0364169_16511701.png

Chromeリモートデスクトップでは、接続先PCの画面とキーボード・マウス(KVM)をリモート操作するので、攻撃者がリモート接続に成功した場合も同じ画面が表示されることになります。

従って、普段から管理者ユーザーでログインするのではなく、標準ユーザーでログインして、必要に応じてパスワードを入力すれば、悪意のあるソフトウェアをインストールされるなどのリスクが軽減することになるのです。


[PR]
by tempurature | 2015-10-04 17:13