でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

素の Emacs のモードラインにバッファのテキストが BOM 付きかどうかを表示する

photo

コード書いとる?

spacemace への移行は順調に進んでます。これヤバいです。これまでのキーバインドは何だったんだというくらい、ショートカットキー操作が快適です。

画面下部に「今なら使えるキーバインドはコレ!」って表示されるのとか最高です。

で、先日モードラインにバッファの文字コードをちょっと詳しく出せるようになって喜んでいたんですが、せっかくなので素のEmacsでもできないか試行錯誤してみました。

1. init.el に以下の関数を追加


2. mode-line-format のどこか適当なところに以下を追加(customize-variable を使うと楽)

(:eval (my-mode-line-bom-info))

元の内容の mode-line-mule-info の後ろがオススメ

3. Emacsを再起動!


オマケ

モードラインに表示される「改行コードの種類」は以下の変数を書き換えると変更できるよ!

eol-mnemonic-dos
eol-mnemonic-mac
eol-mnemonic-unix
eol-mnemonic-undecided

ではまた次回!

spacemacs でようやくモードラインに文字コードと改行とBOMを分けて表示

コード書いとる?

拙者はもう3週間くらい、仕事の合間にspacemacsの調整です。spacemacsの合間に仕事とも言います。

photo


んで、ようやくバッファの文字コードを「文字コード」「改行コード」「BOMの有無」に分離してモードラインに表示できるようになりました。長かった…

はじめサクッと書いたマクロが微妙に怪しい。右側の表示が少し見切れる。これ、ずっと調べていたら East Asian Ambiguous Width問題 にぶち当たりました。いやこれは気づかんやろ…

というわけで、プラグインを導入してマクロもちょこっと書き換え。
 
最後に spaceline で文字数を数える箇所を length → string-width に書き換えてオッケィ!

ではまた次回。

spacemacs のモードラインで文字コードを少し見やすく

test

コード書いとる?

XcodeとVisualStudioの両方でビルド可能なC++のソースコードは、文字コードがutf-8(BOM付き)じゃないとダメ。

んで、spacemacsに乗り換えたらテキストファイルがBOM付きかどうかモードラインに表示されない。

ので、色々調べてマクロを書きました。元々の関数を書き換えるひどい実装ですが動いてます。動けば正義! dotspacemacs/user-config に追加してください。
 

でもpowerlineが文字幅を計算する箇所が正しく動作していない感じ… まあいっか!

ではまた次回。

spacemacs 乗り換え中

photo

コード書いとる?

先日から乗り換え始めた spacemace の設定作業などが落ち着いてきました。

まだまだ日本語の情報が少ないので設定例をメモ書き。

dotspacemacs-configration-layers
dotspacemacs-configuration-layers
'(
  helm
  emacs-lisp
  c-c++
  markdown
  org
  ;; shellはemacs標準添付のshellを使う
  (shell :variables shell-default-shell 'shell
                    shell-default-height 40)
  version-control
  )
 
dotspacemacs-additional-packages '(
                                   ;; scratchバッファを永続化
                                   persistent-scratch
                                   ;; 自動保存
                                   auto-save-buffers-enhanced
                                   )

;; 一度インストールしたパッケージは削除しない
dotspacemacs-install-packages 'used-but-keep-unused

dotspacemacs/user-init
(defun dotspacemacs/user-init ()
  ;; Info用のパスを再設定
  (setq Info-default-directory-list (list (expand-file-name "info" dotspacemacs-directory)
                                          (expand-file-name "../info" data-directory)))
  ;;カスタマイズ変数を別ファイルから読み込む
  ;; TIPS:init.elが勝手に太るのを阻止
  (setq custom-file (expand-file-name "custom.el" dotspacemacs-directory))
  (when (file-exists-p custom-file)
    (load custom-file))
  )


dotspacemacs/user-config
(defun dotspacemacs/user-config ()
  ;; 手動で加えるマクロ置き場
  (add-to-list 'load-path (expand-file-name "~/.spacemacs.d/lisp"))
  ;; diredの挙動をWindowsと揃える
  (load-library "ls-lisp")

  ;; macOSのファイル名をutf-8で扱うためのworkaround
  (require 'ucs-normalize)
  (set-file-name-coding-system 'utf-8-hfs)
  (setq locale-coding-system   'utf-8-hfs)
  ;; git grep が utf-8-hfs に対応していないためのworkaround
  (defun my-shell-quote-argument (shell-quote-argument str)
    (funcall shell-quote-argument (ucs-normalize-NFD-string str)))
  (advice-add 'shell-quote-argument :around 'my-shell-quote-argument)

  ;; Rictyだとpowerlineのシンボルに想定外のフォントが使われてしまうためのworkaround
  (set-fontset-font t 'symbol (font-spec :name "Hiragino Sans-16"))
  ;; マイナーモードの表示変更 
  (spacemacs|diminish view-mode " Ⓥ" " V")
  (spacemacs|diminish centered-cursor-mode " ㊀" " -")

  ;; スクラッチバッファの永続化ON
  (persistent-scratch-setup-default)

  ;; shellを閉じる時のクエリを抑止
  (defun shell-mode-hooks ()
    (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil)
    )
  (add-hook 'shell-mode-hook 'shell-mode-hooks)
  ;; shell-popでshellを表示する時に、設定を無視して画面上部に表示されてしまうwork-around
  (push (cons "\\*shell\\*" display-buffer--same-window-action) display-buffer-alist)

  ;; alt+arrowでwindowを移動
  (windmove-default-keybindings 'alt)

  ;; LISP構文の間違いを警告するfont-lockを無効にする
  (defadvice lisp--match-hidden-arg (around lisp--match-hidden-arg-wrapper)
    (if (not (and (boundp 'use-my-lisp--match-hidden-arg) 'use-my-lisp--match-hidden-arg))
        ad-do-it))
  (ad-activate 'lisp--match-hidden-arg)
  (defun lisp-interaction-mode-hooks ()
    (set (make-local-variable 'use-my-lisp--match-hidden-arg) t))
  (add-hook 'lisp-interaction-mode-hook 'lisp-interaction-mode-hooks)

  ;; 行末の空白を色分けしない
  (setq spacemacs-show-trailing-whitespace nil)
  ;; buffer切り替えでorg-agendaを無視しない
  (push "\\*Org\.\+\\*" spacemacs-useful-buffers-regexp)

  ;; normal-modeになったら強制的に英語入力へ
  (defun my-evil-normal-state-entry-hook ()
    (mac-select-input-source "com.apple.inputmethod.Kotoeri.Roman"))
  (add-hook 'evil-normal-state-entry-hook 'my-evil-normal-state-entry-hook)
  (add-hook 'focus-in-hook 'my-evil-normal-state-entry-hook)

  ;; 指定ファイルを自動保存
  (require 'auto-save-buffers-enhanced)
  (setq auto-save-buffers-enhanced-include-regexps '("\\.\\(hpp\\|cpp\\|c\\|h\\|m\\|mm\\|pl\\|cgi\\|json\\|param\\|vsh\\|fsh\\)$"))
  (setq auto-save-buffers-enhanced-interval 1)
  (setq auto-save-buffers-enhanced-quiet-save-p t)
  (auto-save-buffers-enhanced t)

  ;; カーソル移動を見た目で行うworkaround
  (define-key evil-normal-state-map (kbd "<remap> <evil-next-line>")     'evil-next-visual-line)
  (define-key evil-normal-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)
  (define-key evil-motion-state-map (kbd "<remap> <evil-next-line>")     'evil-next-visual-line)
  (define-key evil-motion-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)

  ;; vc-modeのキーバインド追加
  (spacemacs/set-leader-keys "gl" 'vc-print-log)
  (spacemacs/set-leader-keys "gL" 'vc-print-root-log)
  (spacemacs/set-leader-keys "g=" 'vc-diff)
  (spacemacs/set-leader-keys "gD" 'vc-root-diff)
  (spacemacs/set-leader-keys "gg" 'vc-annotate)
  (spacemacs/set-leader-keys "gd" 'vc-dir)
  (spacemacs/set-leader-keys "gt" 'vc-create-tag)
  (spacemacs/set-leader-keys "gp" 'projectile-vc)

  ;; diffでwhitespace非表示のworkaround
  (remove-hook 'diff-mode-hook 'whitespace-mode)
  (remove-hook 'diff-mode-hook 'spacemacs//set-whitespace-style-for-diff)
  ;; helmを使う時のwork-around
  ;; SOURCE: https://github.com/syl20bnr/spacemacs/issues/9549
  (require 'helm-bookmark)

  ;; GCの閾値を初期値に戻す
  (setq gc-cons-threshold (* 8 1024 1024))
  )

custom-set-faces
(custom-set-faces
 ;; モードライン左端の表示設定を変更
 '(spacemacs-emacs-face ((t (:background "SkyBlue2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-evilified-face ((t (:background "LightGoldenrod3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-hybrid-face ((t (:background "SkyBlue2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-iedit-face ((t (:background "firebrick1" :foreground "202020#" :inherit (quote mode-line)))))
 '(spacemacs-iedit-insert-face ((t (:background "firebrick1" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-insert-face ((t (:background "chartreuse3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-lisp-face ((t (:background "HotPink1" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-motion-face ((t (:background "plum3" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-normal-face ((t (:background "DarkGoldenrod2" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-replace-face ((t (:background "chocolate" :foreground "#202020" :inherit (quote mode-line)))))
 '(spacemacs-visual-face ((t (:background "gray" :foreground "#202020" :inherit (quote mode-line)))))
 )

後はキーバインドを覚えるだけ!

ではまた次回。

spacemacsに乗り換えているお話

photo

コード書いとる?

気がついたら emacs から spacemacs に乗り換えてる真っ最中です。 公式サイトに掲げられている The best editor is neither Emacs nor Vim, it's Emacs and Vim! という一文に引き寄せられました。

かわいいよ spacemacs かわいいよ

という訳で設定内容とか注意点を共有。

乗り換え方法 
  1. .emacs.d 以下を別のフォルダに退避。 設定ファイルが ~/.emacs な人はこれも退避
  2. GitHub にある spacemacs のリポジトリをクローン
    git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d 
  3. emacs を起動
    「キーバインドはvim風にする? 標準的なプラグインは導入する?」
    と選択を迫られた後、自動的に必要なプラグインが導入される 
  4. ハイどうぞ!
あとは公式ドキュメントを読み進めながら操作方法などを覚えていけばよいです。

設定ファイル
~/.spacemacs にいろんな設定を書きます。 ~/.spacemacs.d/init.el に変更してもよいです。
  • dotspacemacs/layers
    いくつかのプラグインをひとまとめにしてキーバインドを設定し直した layer という機能を列挙する
  • dotspacemacs/init
    各種設定項目。spacemacs特有の設定もあるので一通り目を通しておくのが良い 
  • dotspacemacs/user-init
    dotspacemacs/init の直後に実行してほしい手続きを書く。layerの初期化手続きより前に実行される 
  • dotspacemacs/user-config
    ひとしきりspacemacsの初期化が終わった後に実行される。自分でプラグインを導入したり変数に値を拘束したりする処理はここに書く 
  • custom-set-variables
    カスタマイズ機能を使った設定内容が書いてある 
  • custom-set-faces
    カスタマイズ機能を使った設定内容が書いてある 
自分の設定例 
  • dotspacemacs-configuration-layers に適当なlayerを追加
  • scratchバッファの永続化
    dotspacemacs-additional-packages に persistent-scratch を追加して
    dotspacemacs/user-config に (persistent-scratch-setup-default) を追加
  • Font設定
    dotspacemacs-default-font '("Ricty"
                                :size   18
                                :weight normal
                                :width  normal
                                :powerline-scale 1.1)
    
  • モードラインの表示が崩れる不具合のwork-around
    dotspacemacs/user-config に以下を追加
    ;; Rictyだとpowerlineのシンボルに想定外のフォントが使われてしまうためのwork-around
    (set-fontset-font t 'symbol (font-spec :name "Hiragino Sans-16"))
    
  • 起動時にアプリ画面サイズをデスクトップ画面いっぱいにする
    dotspacemacs-maximized-at-startup t
  • Diredの挙動をWindowsと揃える
    dotspacemacs/user-config に (load-library "ls-lisp") を追加
  • git grep が utf-8-hfs に対応していないためのwork-around
    dotspacemacs/user-config に 以下を追加
    (defun my-shell-quote-argument (shell-quote-argument str)
      (funcall shell-quote-argument (ucs-normalize-NFD-string str)))
    (advice-add 'shell-quote-argument :around 'my-shell-quote-argument)
    
  • macOS はファイル名の文字コードが特殊なので dotspacemacs/user-config に 以下を追加
    (require 'ucs-normalize)
    (set-file-name-coding-system 'utf-8-hfs)
    (setq locale-coding-system   'utf-8-hfs)
    
  • shellのlayer設定を変更
    dotspacemacs-configuration-layers の shell に設定を追加
    (shell :variables shell-default-shell 'shell
                      shell-default-height 40)
    
  • バッファを閉じる時や spacemacs 終了時に「このプロセスを終了してもいいよね?」と聞いてこなくする
    dotspacemacs/user-config に以下を追加
    (defun shell-mode-hooks ()
      (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil))
    (add-hook 'shell-mode-hook 'shell-mode-hooks)
 
あとはチマチマとこれまでの設定を移植しつつ vim のキーバインドに慣れつつといった感じ!!

コントロールキーから始まる大量のキーバインドから解放されました。

スッキリ!! 

emacs 25.2 を macOS Sierra でいい感じに動作する設定

コード書いとる?

helm導入をきっかけにemacsの設定を大幅に見直しました。のでその設定を共有。
  • 動作環境:macOS Sierra
  • emacsはここのパッチを当てて野良ビルド
  • homebrewで色々導入している
mscOSでの文字コードの扱い
;; diredで濁点つきの文字が化けるのを防ぐ
;; TIPS:set-buffer-process-coding-systemでの設定は外した
(require 'ucs-normalize)
(set-file-name-coding-system 'utf-8-hfs)
(setq locale-coding-system   'utf-8-hfs)

;; git grep を日本語パスで動かすためのwork around (defun my-shell-quote-argument (shell-quote-argument str) (funcall shell-quote-argument (ucs-normalize-NFD-string str))) (advice-add 'shell-quote-argument :around 'my-shell-quote-argument)

shellを呼び出すときの環境変数
# shell起動時の環境変数設定
# shellで色をつける
export TERM=xterm-color
# shellでgit logした時に警告を避けるwork around
export PAGER=/bin/cat

TAB補完
;; shellでのTAB補完は大文字小文字を無視
(setq pcomplete-ignore-case t)

diffやannotateの挙動
;; diffやannotateで空白やTABだけの差分は無視
(setq vc-git-annotate-switches "-w"
      vc-git-diff-switches     "-b")

dumb-jump日本語対策
;; ディレクトリ名がutf-8-hfsなためのwork around
(setq dumb-jump-git-grep-cmd "git -c core.precomposeUnicode=false grep")

alignにルールを追加
;; alignのルールを追加
;; c++の配列などのカンマ区切りをいい感じに整列
(eval-after-load "align"
  '(add-to-list 'align-rules-list
                '(my-comma-assignment
                  (regexp . ",\\(\\s-*\\)")
                  (repeat . t)
                  (modes  . align-c++-modes))))

YES or NO の催促
;; yes or no を全て y or n へ
;; TIPS:SPACEでyの代わりになる
(defalias 'yes-or-no-p 'y-or-n-p)

dired設定
;; 実行ファイルを色分け
(font-lock-add-keywords 'dired-mode
                        '((" +-[rw-]+x"
                           (".+" (dired-move-to-filename)
                            nil
                            (0 'font-lock-string-face)))))


ふぅースッキリ!
ではまた次回。

VisualStudio2017を使っているとHDDの残り容量があっという間に無くなる件

コード書いとる?

今年度は教えに行っている専門学校で「PCのHDDの残り容量がもう無い!500GBあったのに?!」報告が多発しました。

原因はVisualStudio2017が自動的に生成するインテリセンスのデータベースファイルがある条件下で不必要に残ってしまうことでした。

根本的な解決策はまだ調査中ですが、原因を共有しておきます。
 
C++のコードを含むプロジェクトの例
photo1

 隠しファイル属性になっている「.vs」ディレクトリ内にインテリセンスのデータベースファイルがある。結構容量が大きく、時には500MBを超える。
photo2


気づけばHDDの残り容量が無くなる手順
  1. 前述のプロジェクトをフォルダ丸ごと複製する
    photo3

  2. C++のコードを編集すると.vsディレクトリ内に新しくインテリセンスのデータベースファイルが作られる
    photo4

  3. 以上繰り返すことで、不要なインテリセンスのデータベースファイルが増えてゆく
  4. 気づけばHDDの容量がなくなっている!
VisualStudio2017ではC++用インテリセンスのデータベースファイルを作る時に、フォルダ名に基づいてファイル名を生成しているようです。

故にフォルダごと複製して新しくプロジェクトを作る操作を繰り返していると、不要なデータベースファイルがどんどん増えてゆきます。 元のデーターベースファイルの容量が200MBだと、5回複製を繰り返した時点で3GB…たくさんプロジェクトを作っている人は要注意です!

この問題を回避するには、フォルダを複製して新しくプロジェクトを作った時に.vsフォルダを削除すればよいのですが、Windowsの初期設定ではエクスプローラーで隠しファイルを表示しない設定になっているので注意してください。

試しにネットで検索してみたら出てくる出てくるw みんな同じ問題で困っていたようですwww

ではまた次回!!

自作アプリを Joy-Con で遊ぶ

コード書いとる??

先日催された 【第2回】東ゲ部 ゲーム試遊会 で見掛けたのですが…


おおおお?! Windowsで動くアプリを Joy-Con で操作しているだと?!

早速調べてみたら Joy-Con がPCからは汎用的なBluetooth機器として認識されるように作られてるとな…グッジョブ任天堂!!

結論から言うと Joy-Con は Windows や macOS からはごくフツーのゲームパッドとして使えます。小型で場所を取らないしケーブルないし、展示時のインパクトもあるしで、みんなも積極的に使っていこうぜ!!!


以下macOSでの認識方法とか

Bluetooth環境設定を開きます

photo1

Joy-Con をペアリングモードにします

photo2

環境設定で認識されたら「ペアリング」ボタンを押す。これだけ。

photo3

左右の Joy-Con は個別に認識される。

photo4

アプリからは「ボタン20個、アナログ軸4つ」のゲームパッドとして認識されますが、実際に使えるのはボタン14個だけ。残念ながらアナログ入力は使えません。惜しい!!

ですがアナログスティックの入力を4つのボタン入力として扱えるので何ら不便ではない!! いやぁ便利便利。

ではまた次回!!

emacs 挿入する語句とキーバインドをお手軽に記述する

31

コード書いとる??

メモ書き用途として TODO: とか FIXME: とかの語句をコードのコメントに挿入するマクロを書いて、適当なキーバインドで運用しています。

これまではベタで書いてましたが、ジワジワと種類が増えてきました。 SORUCE: とか TIPS: とかw

(defun my-comment-todo()
	"TODO: 挿入"
  (interactive)
	(insert "TODO:"))

(defun my-comment-fixme()
	"FIXME: 挿入"
  (interactive)
	(insert "FIXME:"))

この調子で挿入する語句の種類が増えてきたら破綻するんじゃね? キーバインドの設定めんどくさくね? という事で格闘すること3時間。

できました!!



ではまた次回!!

dumb-jump で git grep がうまく動かない問題を解決

コード書いとる?

先日紹介した dumb-jump ですが、git grep での検索がうまくできない問題がありました。

その原因とwork aroundを共有します。


  1. git grepを使った検索だと「このファイルはリポジトリに含まれていないよ!!」というエラーになる。
  2. dumb-jump の最新リポジトリに dumb-jump-debug が追加されているので、これで git grep のコマンドラインを調べる。
  3. 対象パスに日本語が含まれているのに気づく。
  4. 試しにターミナルでgit grepしてみる→同様のエラーを再現。
  5. dumb-jump-generate-git-grep-command に少々手を入れる。
  6. 動いた!!
っていう流れで原因究明と問題解決。スッキリ!!

ではまた次回。

helm と dumb-jump に首ったけ

コード書いとる?

普段からemacsでコードを書いてますが、標準添付のimenuの使い勝手がそろそろ限界で難儀してました。

そこで調べてみたら helmdumb-jump という良さげなパッケージを見つけたのでシェア!!

ちなみに macOS での話です。

photo

dumb-jump は事前ファイルの生成なしに快適なタグジャンプを提供してくれるパッケージです。

dumb は「ばかな・愚かな」という意味の単語ですが、快適すぎて使う側の脳が劣化する感じですw

インストールはMELPA経由が一番簡単でしょう。

M-x package-install dumb-jump

おいら手動でなんとかするもんね!! という場合、まず以下のパッケージをGitHubから探して.elファイルを自分の環境にコピー。自分の場合は ~/.emacs.d/lisp に追加パッケージを置いています。
ripgrep を導入。無くても動作はします。

brew install rg

init.el に以下のように追加。

(require 'dumb-jump)
;; これをしないとホームディレクトリ以下が検索対象になる
(setq dumb-jump-default-project "")
;; 日本語を含むパスだとgit grepがちゃんと動かない…
(setq dumb-jump-force-searcher 'rg)
;; 標準キーバインドを有効にする
(dumb-jump-mode)
  • C-M-g ジャンプ
  • C-M-p 戻る
  • C-M-q チラ見
もう超快適です!! カーソル位置のキーワードをだいたい探してくれるんじゃなかろうかと。dumb-jump-force-searcherを変更しなければ検索手段は ag、rg、grep、git grep から最適なのを選んでくれるようです。


photo2

helm はこれまでのemacsでの操作を逆転して大幅に効率化を果たすパッケージ。

動作を決める→対象を決める
    ↓
対象を決める→動作を決める

これがねー、思った以上に操作が短縮化されて捗るのよねー。対象はインクリメンタルサーチで絞り込んでいくので、事前に検索文字列を考える手間が省けて素敵。

一番助かるのが関数の絞り込み。ちょっと間が空くと「どんな関数を実装したっけ…」ってなるんだよねw 助かる!!

helmもMELPA経由のインストールが一番楽なのですが、どうしても手動で!!という場合は、GitHubからダウンロードして、カレントディレクトリでmakeしてから.elを自分の環境へコピーします。 makeすると途中でエラーになりますが気にしない。makeで生成される helm-autoloads.el が必要なのだ。

あとはinit.elに

(require 'helm)
(require 'helm-config)

と追加して準備完了。この記事がめっちゃ参考になります!!


ではまた次回!!

拙著添付データのリンク切れに関して

コード書いとる?

拙著3冊の添付データが、dropboxの仕様変更に伴いリンク切れになっていました・・・
ですので、ここで告知しておきます。

「チュートリアル形式で始めるOpenGL[2D編]」
 
ibooks


「チュートリアル形式で始めるOpenAL」
title
 

「iPhoneアプリ『ういろう』のレシピ」
title


今後はサポートサイトなどを設置して対応しましょうそうしましょう。

ではまた次回!!

わんくま同盟 札幌勉強会 #2

IMG_4734

コード書いとる?

先日開催された わんくま同盟 札幌勉強会 #2 で喋ってきました。
ゲーム作ろうと思ったら今から20年くらい前のゲームを短い期間で目コピーすると、素材量や仕様の規模感的にちょうどいいよ!という内容。

著作権的に目コピーの成果物をGitHubなどで共有できないのはとても残念なのですが、資料に書いた「プログラムの行数」を見て、参加者の方々が「それくらいの規模で今日見たゲームが動いてるんだ!! すごい!!」と共感してくれたのが大きな収穫でした。楽しいよ目コピー楽しいよ。

個人的には
 
git checkout <commit時のhashタグ>

で過去のコミットを遡れ、
 
git checkout master

で最新のコミット状態にできるのが一番大きな収穫でした!楽しいよgit楽しいよ。

IMG_4737

3月に立ち寄った時とまた違った印象の旧本庁舎

IMG_4749

うにうにうに!!! 舌の上でとろける。

ではまた次回!!

VisualStudio プロジェクトのファイル名をサクッと変える

コード書いとる?

「VisualStudio プロジェクトのファイル名ってどうやって変更するんだ・・・?」
と疑問に思ってもう10年近くになります。

それがあっさり解決したのでメモ。

プロジェクトのファイル名はVisualStudio内で変更する手段がありません。エクスプローラーで変えるとソリューションを開いた時に読み込みエラー・・・

もうどうせいっちゅーねん!

ところが・・・エクスプローラーでプロジェクトのファイル名を変えた後、プロジェクトのファイルを開くと・・・なんという事でしょう。問題ありません(笑)

photo1


photo2


photo3



photo4

VisualStudio終了時に改めてソリューションを保存して完了!

1つのソリューションに複数のプロジェクトが含まれている場合にはこの手が使えませんが、1ソリューション1プロジェクトの場合はこれでいいよね。

ではまた次回!

Windowsアプリでprintfを気軽に使う

コード書いとる?

WindowsでGLFWを使ったアプリを作ろうとするとprintfやstd::coutの出力がどこにもされなくて、VisualStudioのデバッグ出力へバイパスするよう一工夫してました。

ところがひょんなことからprintfやstd::coutを使えつつもReleaseビルドでは封印できる方法を教えてもらったのでシェア!!

GLFWを使ったアプリの場合、main関数から実行が始まるようにしたいです。これをVisualStudioの場合はコンソールアプリケーションの雛形を使って実現。

すると、実行時にはコマンドプロンプトがまず起動し、そっからアプリ画面が開きます。

photo

実はprintfやstd::coutは、この時起動したコマンドプロンプトに対して出力されます。すいません、今まで知りませんでした…

ただこのままアプリ完成!! だとちょっとみっともないので、Releaseビルドの時はコマンドプロンプトが起動しないように細工します。

ソースファイルのどこかに以下のコードを追加。
 
#if !defined (DEBUG)
// Degub版のみコンソールを表示する設定
#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup")
#endif

Releaseビルド時にはリンカーの設定を上書きし、アプリが単体で起動します。メデタシメデタシ!!

ただし、printfやstd::coutの出力が確認できなくなりますけどね。これWindowsで何か方法があるのかしら…

今回の実装はGithubで公開してる簡易ライブラリで試してみたので、暇な人は試してみてください。

ではまた次回!!

org-mode の Agenda View で Deadline を知らせる日数を変更する

org-mode-unicorn-logo
コード書いとる??

org-mode の Agenda View で早めに Deadline の警告を表示して欲しかったのですが、サクッと解決しました。思い立った時に調べるのだいじ。

org-deadline-warning-days の値がその日数なので、これを変えればよろしい。便利!!

ではまた次回!!

org-mode がとっくに MathJax に対応していた件

photo

コード書いとる?

最近資料で数式を扱うことが増えたので MathJax 最高!ってなってます。 ところが人気が高まりすぎたのが、公式から「負荷が増えすぎてウチのサーバーが持たないので、他のサーバーを使ってね!」アナウンスがあって小慌て。

自分には特に影響がなかったんですが、ついでに org-mode の機能を調べてたらまさかの MathJax 対応済み! 前述のアナウンスにもしっかり対応。 orgで特に何も指定しなくてもええ感じに設定その他諸々HTMLに出力されていました。

変数 org-html-mathjax-options で細かな挙動を変更できるし、大変ありがたい。しかもorgファイルごとに設定を変えられる。

#+HTML_MATHJAX: font: STIX-Web

あとorg-modeから出力したHTMLファイルを眺めてたら標準スタイルシートが出力されててあれ?となった。これは orgファイル内で
 
#+OPTIONS html-style:nil

と書けば抑制できるんだとさ。


スッキリ!

jNetHack 3.6.0-0.8 を macOS 10.12.4 でビルドする

photo

コード書いとる?

ちょっと前に jNetHackをOSXでビルドする 記事を投稿していたのですが、気づいたらこの方法ではビルドできなくなっていました・・・

で、何とかビルドは成功するとこまで持っていったのでそのメモ。

これは stdio.h からインクルードされている Availability.h の文字コードが UTF-8 なのが原因です。前回の投稿では、cp932なソースファイルを一旦UTF-8に変換してからビルド、実行ファイル内の文字リテラルはcp932に再変換。というビルドオプションを指定していました。

これだと、文字コードがUTF-8のソースファイルを入力したらおかしくなるに決まってます。ぐぬぬぬ・・・

たどり着いた結論は「ソースファイルとヘッダファイルを事前にUTF-8に変換しておく」です。

以下その手順。
# HomebrewでGCCの最新版をゲット
brew install gcc
# iconvではファイルを上書きできないので、代行するツールをゲット
brew install moreutils

NetHack公式から nethack-360-src.tar をダウンロードして展開
jNetHack公式から jnethack-3.6.0-0.8.diff をダウンロード

# 日本語パッチを当てる
patch -p1 < ../jnethack-3.6.0-0.8.diff

# ソースファイルとヘッダファイルの文字コードをcp932に変換
find . -type f -name '*.c' -o -name '*.h' | xargs -I{} sh -c 'iconv -f cp932 -t UTF-8 {} | sponge {}'

・sys/unix/hints/macosx10.10 を修正
# 最新版のGCCを使うよう指示
CC=gcc-7
#ビルドオプションに付け足し
CFLAGS+= -fexec-charset=CP932

# ビルドスクリプトを生成
sh sys/unix/setup.sh sys/unix/hints/macosx10.10

# ビルド&インストール
make install

# プログラムの標準出力の文字コードをバイパスして変換してくれるプログラム
brew install cocot

# 実行!!
cocot -t UTF-8 -p cp932 -- ~/nethackdir/jnethack

ではまた次回!!

MacBook Pro の画面が白っぽいなと思ったら

コード書いとる?

自分は普段 MacBook Pro (Retina, 13-inchi, Early 2015) を使っております。

で、ちょっと前から画面が白っぽいのが妙に気になり始め、先日それが爆発しましたw

結論として「調整できた」のでメモ書き。


photo1

ColorSyncユーティリティーでプロファイルを開き、Appleディスプレイの製造および装置情報を見ると、末尾が2A。これが巷で「白っぽい!」と噂になっているLG製液晶・・・やったねアタリを引いた!

photo2

まぁ悲観する事でもなく、色味を調整すればよいだけなので、システム環境設定→ディスプレイ→カラー→補正...

photo3

あれ? 詳細設定が無い・・・

ここで慌てず、ディスプレイキャリブレーター・アシスタントを一旦閉じ、今度は option キーを押したまま補正をクリック。

photo4

出てきました! これって macOS Sierra からなの?まあいいや調整できたので・・・

というわけでいい感じに色味(コントラスト)を調整できましたとさ。スクリーンショット撮ってもわかんないけどね(笑)

スッキリ!

ではまた次回。

Emacs25で追加されたlisp構文の警告をscratchバッファでだけオフる

photo

Emacs 25.2 順調です!

順調なのですが・・・ いつの頃からか scratch バッファでこんな色付けが・・・・
 
photo

気になって scratch バッファにメモ書きできない! 今回はこれを何とかした話。

調べてみたら、Emacs 25 から追加されたらしい。一部の人が「ありがたいんだけど・・・ありがたいんだけど・・・」ってなってた。


init.el 編集中とかでコードの書き間違いを警告してくれるのはありがたいんだけど・・・ scratch バッファは主にメモ書きに使っているので、自分的には要らない・・・ということで、どーにかして scratch バッファでだけ警告をオフる方法を探す事30分・・・

みつけた!


init.el を開いてる時は Emacs-lisp モードで scratch バッファは Lisp-Interraction モード。これを使えばうまくいきそうだ!


できました!!
 

スッキリ!!!!

ではまた次回

記事検索
このブログを書いとる人
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
監修を担当しました

QRコード
QRコード
  • ライブドアブログ