さわらブログ

さわら(@xhiroga)の技術ブログ

mac(BSD)とLinuxでcpコマンドの動作が違うのにハマった → core utilsをGNUに総取り替え

f:id:hiroga_cc:20200115072013p:plain
cp (BSD)

TL;DR

apple.stackexchange.com

やったこと

  • Brewfilecoreutils ほかutilityを追加
  • $PATH$MANPATH を修正
brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep

export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gawk/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnutls/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-indent/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-getopt/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"

export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/findutils/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gnu-sed/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gawk/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gnutls/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gnu-indent/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/gnu-getopt/libexec/gnuman:$MANPATH"
export MANPATH="/usr/local/opt/grep/libexec/gnuman:$MANPATH"

どうしてやったのか

dotfilesを $HOME に展開する上で、cpコマンドの-lオプションが便利だからです。
このオプション、BSDのcpコマンドにはなかったので...

github.com

結果

f:id:hiroga_cc:20200115073106p:plain
cp (GNU)

無事にGNUベースに置き換え成功しました!

Intellij の Convert Code From Java は文法にエラーがあると動かない

TL;DR

このように、 ... でコードを省略するなど、Java的に正しくないコードの場合は動かないので注意。

String expected = "EXPECTED";
...
Assert.assertEquals(expected, test());

むむ?と思ったら、一行づつコピペして試すべし。

文法的にエラーがない場合

設定で機能をオフにしている可能性もあるので要チェック

stackoverflow.com

mysql-connector-pythonはSQLのSyntax Errorを拾ってくれない(ように見える)

いずれPR送って直したい。公式ライブラリのエラーハンドリングを疑ったことはなかったので...

TL;DR

connectionクラスでせっかく例外を投げているのに、
github.com

cursorクラスで雑なキャッチをして台無しにしている。

github.com

詳細

例えば、date型とdatetime文字列を比較しているSQLがあったとする。
クエリはprepared_statementとして処理されるので(Pythonが検証するわけでない)、MySQLからのSyntax Errorが返ってくる。

prepared_statementの生成は一応try-exceptされているが、レスポンスはサーバーから返ってきた文字列次第であるせいか?キャッチの仕方が極めて雑。
ライブラリなので標準出力もしていない。

            try:
                self._prepared = self._connection.cmd_stmt_prepare(operation)
            except errors.Error:
                self._executed = None
                raise

結果、呼び出し側でtry-exceptを忘れてしまい困ることがありました。備忘。

Adobe Acrobat Readerからキーボードショートカットで日英辞書をサッと開く

f:id:hiroga_cc:20191119071440g:plain
英文を辞書で検索

macAdobe Acrobat Readerで、任意のショートカットキー(私の場合はCtrl + M)で日英辞書を開けるようにしました。 参考にしたのはこちら。

apple.stackexchange.com

手順

  1. brew cask install bettertouchtool でBetter Touch Toolをインストール
  2. スクリーンショットのようにショートカットを設定

f:id:hiroga_cc:20191119071751p:plain
Better Touch Tool ショートカット

StackOverFlowで紹介されている設定にプラスして、ショートカットを使ってもカーソルが辞書に持っていかれないような設定を工夫しました。
お役に立てば幸いです。

ホウエン生まれホウエン育ち目線で #ポケモン剣盾 の良さを語る(ネタバレなし)

f:id:hiroga_cc:20191117090739j:plain
はー楽しい。

金曜日に発作的に購入した剣盾をクリアしました。

ストーリー・キャラクター・音楽・システム・ハードの全てが最高で、ポケモン世界にしっかり没入できました。
良さをメモしておきます。

ストーリー

ガラル地方の背景の設定の作り込みを感じました。大筋のストーリーはチャンピオンを目指すものですが、街の人の声がフキダシとして見られるシステム(ブラック・ホワイトにもありましたね)も相まって、ジムを勝ち抜くごとに自分自身が注目されているのが分かってよい。しかも気持ちいい。
ポケモンリーグに集中しているので、これまでのシリーズのように(なんで世界の危機に大人が動かないんだ?主人公は主人公でジム戦やってないで世界の危機に立ち向かうべきじゃないか?)みたいな引っ掛かり、ご都合主義もありません。もちろんガラル地方にもとんでもない危機が迫っていて、主人公も立ち向かって行きますよ!

すべての演出が最後のバトルに向けられていて、最後のバトルは歴代で一番緊張したバトルでした。

キャラクター

サン・ムーンと同じくらい、ちょっと笑えたり、イタかったり、応援したくなるキャラがいて良いです。
それから、子ども世代と大人世代が明確に意識されているのを感じました。主人公やライバルのホップ、マリィ、ビートが10代のプレイヤー目線と同世代です。一方、チャンピオンのダンデ、博士を目指すソニア、ジムリーダーのルリナやキバナは赤・緑〜ブラック・ホワイト世代(20代~30代)に合わせてます。

個人的にクスッとしたのはビートです。勘違い若手コンサルみたいなキャラで、サン・ムーンのグラシオが中二病でウケたのに味をしめたのかなと思いました。
カブさんも好きだなぁ...ホウエン出身って書いてあるけど、アスナと関係あるのかな?

音楽

ジム戦(スタジアム戦と言ったほうがいいかも知れない)の音楽がマジで最高です。ループするだけBGMではなく、戦いの状況に応じてダイナミックにBGMが変化します。これがスタジアムの観客の盛り上がりを反映しているようで最高。

普通のBGMだとライバル戦が好きです。 街のBGMも好きですね。ナックルシティの久石譲みたいな音楽とか。クリア後のToby Fox作曲のBGMはまだ聴けていません。

システム

ひでんわざの廃止は前作からですが、今回は更に進んでます。 まず、そらをとぶの演出(サン・ムーンならリザードンを呼び出す)がありません。単にマップから行きたい場所を選ぶだけ。
しかも冒険の超序盤(1時間位)で呼び出せるのでストレスがない。フィールドの行き来をいわくだきやかいりきで制限していたご都合主義のシリーズとは違って、ジム戦を順番にクリアするという軸があるから成立してるシステムとも言えるかもしれません。
波乗りもなくて、自転車が変形して海を走ります。これが超シームレスでストレスが無くて良い。

ポケモンシンボルエンカウントになってるのも良いです(ピカブイからかな?)
スプレーがなくてもポケモンをよければ無駄な野生バトルがないので、ストレスなくマップを移動できました。

オートセーブも良いですね。ただ、特別なイーブイを厳選なしで受け取ったのは迂闊だった... ストーリー上どうしても捕まえなければいけないポケモンは存在するので、気になる人は終盤はオートセーブをオフにして進めてもいいかも知れません。

ハード

大画面でプレイできるのいいなぁ!!!
あとは要所要所でコントローラーが振動するのも良い。それから、Switchの機能でいつでもスクショ撮れるのも良いです。

まとめ

予約してなかったんですが周りの盛り上がりを見てまんまと購入しました。大変良かった。
サントラ発売を心待ちにします。

dotfilesをアップデートしました(zsh導入/ 複数シェル対応/ raspbian対応)

f:id:hiroga_cc:20191110095246p:plain
dotfiles (2019-11-10)

インフラの冪等性に少しこだわりがあるので、開発環境はdotfilesで管理しています。
この度Raspberry Piで作業するのと、あとCatalinaになって標準シェルをzshに切り替えた関係で、dotfilesを大幅に改良しました。

github.com

アドバイスなどいただければ嬉しいです。

zsh対応

zshに対応しました。プラグインは正直調べきれていない。

~/.bash_profile~/.zshrc~/.profile を読み込むことでパスの設定を共有しています。
ファイル名は ~/.common_profile とかでも良かったんだけど、shで利用されている ~/.profile にしておけばシンタックスハイライトが効いて都合がいい。

raspbian対応

ラズパイ用の設定をしています。パッケージ一覧を packages ファイルに書き込み、cat→grep→apt install で導入するのがお気に入り。

macと共通なのはvimVSCodeの設定くらい。シェル設定も共有しようかと思ったけど、共通点より違いが大きい(そもそもインストールしてるソフトウェアが違うし)でパス。

LinuxBrew(HomeBrew)に対応するかは検討中。aptで事足りなくなったら使うくらいでいいと思う。Linuxは(特に普段使いとしては)初心者なので!

#1人目のデザイナー = やりきり力

f:id:hiroga_cc:20191024090058p:plain

スタートアップで未経験から1人目のデザイナーになった方々のパネルディスカッションがあり、デザイナーさんが普段何をしているのか気になったので参加してみました。 beuidesigner.peatix.com

TL;DR

  • スタートアップの1人目デザイナーはやりきり力が大事
  • 自走できて、自分からフィードバックをもらいに行ける人
  • 半年〜1年後にフルスタックデザイナーとして活躍していそうな人を採用したい

フルスタックデザイナーって言葉があるか知りませんが、グラフィック・CI・ロゴ・Web・UI/UX全部、ってことです)

イベントの様子

f:id:hiroga_cc:20191024091020j:plain

CocodaとTomoshibiが主催している初学者デザイナー向けのイベントで、会場はだいたい50人くらい参加者がいました。6割くらいが女性で、ITエンジニア向けのイベントとは雰囲気が違いました。

イベントは前半と後半に分かれており、前半では未経験から(みんな初めは未経験だと思いますが...)スタートアップの1人目デザイナーになった人たちのパネルでした。いくつか気になったこと。

  • 自走力だけでなく、フィードバックをもらう力も大事。DailyCocodaのフィードバックを自分からもらう人は、就職しても周囲(ときには社外)の人に意見を求められる。
  • @623px さんが「実際に仕事を請けるのが一番勉強になる」(要約)とおっしゃっていたが、これはITエンジニアでも同じだと思う。
  • @maima_1107 さんはDailyCocoda経由で初めてのオファーをもらい、それから転職活動に踏み切ったそう。採用側としては、DailyCocodaやDailyUIをウォッチしない手はないと思う。

それから後半の懇親会では、Cocodaの @greatest_hiroki さんとお話し。「メッセージもらえれば、いつでもデザインのフィードバックしますよ!褒めて、気になるところがあれば言って、最後は褒めで締めます」(要約)とおっしゃっていたのが印象的でした。 Cocodaの方々はコミュニティへの意識が強いのかな?素敵だなぁ...!

その他

イベントに触発されてサムネイルをGIMPで作ってみたんですが、パスで絵を書くのを諦めてフリー素材のアイコンを使いました。
本業じゃなくても、こういうちょっとしたところでデザインができるといいよね!