墓地の写真を撮ったら
帰宅途中、信号待ちをしているとき、右手の墓地に気づいた。たそがれどきで、非日常的な風情があったので写真を撮ってみた。
写真が液晶でみると意外なほどに陰鬱で、怖くなったのですぐに消した。
ここでなにかスイッチっぽいのが入った。
顔を上げると、風景がどことなくいつもより不気味に見える。
なんとなく視線を感じる。
スマホの電池が切れた。写真撮ってすぐだ。
霊を怒らせてしまったか。
やっぱり墓場は写真に撮ってはいけなかったんだ。
一気に幽霊に敏感なモードになって、風景が怪談の世界になった。 前のトラックは、荷台と席のあいだの窓から腕だけがみえていて、不気味だった。
いつも通っている国道沿いだったが、普段は気づいていない建物があることにも気付いた。
古い歯医者が、ガラス張りの広い玄関があるビルにあった。となりは交番だった。
会社のモードはあらかた消え去り、不思議な世界感だった。
そして、世界の見え方というのは意外なあっさりと切り替わるものだとおもった。
いつも「本当」とか、「リアル」だとか思ってる現実は、実は絶対的なものではないかもしれない。そうでなく、自分の傾向とか周囲の環境などの影響でそういう「見え方」をしているだけかもしれない。幽霊はどちらかといえば「リアル」ではない。でもスイッチが入ると、身近に感じられる。
日常のモードと、そのモードのなかから見える景色だけが唯一ではないということが感じられた出来事だった。
仕事を自動化したい人
仕事は、時にはやりたくないこともやらなければならない。
そんなときは、やりたくないそれをやる意味をでっち上げる。
肯定的な意味づけをしたいからだ。
たとえば、それ自体はおもしろくないけど、自動化して自分でやらなく済むようにする。これなら、その仕事をつうじて自動化のスキルが上がる、そして自動化できれば次からはほとんど何もせずに仕事が終わる!という思考をよくする。
やりたくないけど、やらなくてはならないとき、この思考は役に立ってきた。
目指すべきものがあるから、何はともあれ始めることができるし、うまくいけばちゃんと成果が出るのだ。
意味づけの力は大きい。
しかし、ここ最近にきて自動化が追いつかなくなってきている。
仕事の範囲が変化すると同時に多少量が増えたからだ。
自動化すること自体、かなり時間がかかるので、自動化にかまけていると本業がおぼつかなくなる。
さすがにそれはイケナイから、せっせと地道にそれをこなすしか残る道はなさそうだ。
ということは、やりたくないそれと面と向かって立ち向かわなくてはならなくなる。
さて、こういう状態にあって、自分はどうしてこの仕事をしているのか、という根本的な疑問を持ってしまった。
自動化なしで取り組むことに気が向かない仕事とは、何なのか。
さらに、これまでは仕事そのものより、その仕事をどうやってラクにするか、それはマクロを組んだり、スクリプトを書いたりして自動化するということなのだが、そっちばかりが楽しかった、ということが自分の中でぼんやりとだが見過ごしがたく意識されてきた。
ところで、ちょっと前にどこかの外国のプログラマが、自分の仕事をすべて自動化してしまい、その後の10年位を何もせずに年収1000万そこらもらって人生を過ごしていたという話があった。自分の場合、全部自動化するのはぜったいムリだが、そのプログラマとはどこか気が合うかもしれないな、と思う。
安心してだらだらしたい
今日は午後から何かをすることを放棄して、ひたすらにだらだらしていた。
具体的には、1時から6時すぎまで、畳マットの上に横になっていた。
扇風機はつけていたが、クーラーは消えたままだったので、暑いことには変わりなかった。
そもそもなぜそうなったかといえば、目がずきずき痛んだからだ。
自分の場合、この症状はけっこうな疲れを意味しており、こうなったら優先して休むようにしている。
しかし、休むことは休むのだが、昼間にごろごろしているとなんとなく落ち着かない。
これは、変なことである、と思う。
ごろごろしているのだから、安心して休めばいいだけの話だ。
ここら辺の心情について、いま読んでいる『仕事なんか生きがいにするな』にヒントがありそうだ。
仕事なんか生きがいにするな 生きる意味を再び考える (幻冬舎新書)
- 作者: 泉谷閑示
- 出版社/メーカー: 幻冬舎
- 発売日: 2017/01/27
- メディア: Kindle版
- この商品を含むブログを見る
YAPC::Fukuokaに行ってきた
先週、7月1日(土)に福岡でYAPCというPerlのイベントがあり、参加してきました。今年3月にあったYAPC Kansaiにつづき、YAPCは2回目の参加です。 会場はLINE福岡。エントランスにはサリー、コニー、ブラウン(左から)。社内にカフェがあったり、おっしゃれなチェアー、ソファーがあったりして、ぴかぴかでした。
聞いたセッション抜粋
WEBセキュリティのお話(徳丸 浩さん)
WEBシェルというのをサーバーに設置するとなんでもできてしまう、というのがよくわかった。
分散ユニークID採番機katsubushiとWebアプリケーションへの応用例(fujiwaraさん)
巨大サービスではID採番のシステムもでかい。
はてなブログ最近の開発テクニックと最新の開発風景のご紹介(hitode909さん)
チーム開発でコミュニケーションをよくするため工夫されているのが伝わってきた。
未来のプログラマー達へ ~Perl入学式卒業生から~ (tomcha_さん)
「一歩踏み出す小さな勇気」が必要という言葉が印象的だった。
全体の感想
第一線で活躍されているプログラマの方々のなか、かなり素人感のある自分がまじっていて、恐れ多い感じでありましたが、ハイレベルな雰囲気が伝わってきて刺激になりました。 来年のOkinawaも楽しみです。
福岡観光してきた
人生ではじめて福岡にいきました。 都会でありながら、人がゆったりしている様子で「住みたい街」として評判なのも納得という感じ。 ぜひまた行ってみたいです。
夕暮れの博多駅
博多駅に展示されていた巨大な山笠
大濠公園のカモ
VBAを使ってOfficeからコマンドプロンプトであれこれやる
VBAからコマンドプロンプトにコマンドを渡して実行できる。 これはつまり、WordとかExcelとかから外部プログラムを実行できるということだ。
ためしに、Excelのシートにある文字列をKakashiを使ってわかち書きするということをやってみる。
ネタとして、夏目漱石『坊ちゃん』の冒頭部分を青空文庫からひろってきた。
坊ちゃんの文章を入れたとなりのセルにコマンドを実行するための関数をいれる。この関数は、ユーザー定義関数というやつで、ようは自分で書いた関数だ。
組み込み関数みたいにワークシートから実行できる関数は↓のようにして書ける。
Public Function wakachi_gaki(Cell As Range) Dim pipe As String: pipe = Chr(124) ' パイプ(|). ハードコードしたら失敗した Dim WSH As Object Set WSH = CreateObject("WScript.Shell") Dim sCmd As String sCmd = "echo " & Cell.Value & " " & pipe & " kakasi -w" ' コマンドのあいだにスペース必要 Dim wExec Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) '処理が終わるまでまつ Do While wExec.Status = 0 DoEvents Loop wakachi_gaki = wExec.StdOut.ReadAll Set wExec = Nothing Set WSH = Nothing End Function
関数を入力してエンター。 一瞬、コマンドプロンプトがちらっと表示される。
分かち書きできている。
コマンドプロンプトで実行できるということは、Perlもつかえるということだ。 ためしてみた。
かんたんに試すだけなので、Perlのバージョンを表示させてみた。
perl -v
ってやるだけ。
This is perl 5, version 24, subversion 0 (v5.24.0) built for MSWin32-x64-multi-thread Copyright 1987-2016, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using ""man perl"" or ""perldoc perl"". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.
ちゃんと返ってきた。
コードはこれ。
Public Function perl(cmd As String) Dim WSH As Object Set WSH = CreateObject("WScript.Shell") Dim wExec Set wExec = WSH.Exec("%ComSpec% /c " & cmd) '処理が終わるまでまつ Do While wExec.Status = 0 DoEvents Loop perl = wExec.StdOut.ReadAll Set wExec = Nothing Set WSH = Nothing End Function
書きためたVBAマクロをだす その1 Word 箇条書き番号テキスト化
職場でWordとかExcelとかをよくつかっていて、それなりにマクロを書きためている。のだが、管理がずさんなため、いつか一度かいたはずのコードがいざというときに出てこなくてあたふたすることがよくある。このままだと、この状況は一向によくならない。そこで、ブログに出すと同時にGithubのレポに上げるようにすれば、記憶とコードの整理が一挙にできてよいのではないかと思いいたった。
第一回は、Wordの箇条書き記号(・とか1. 2. 3..とか)を素のテキストに変換するマクロを紹介したい。紹介するというか、たくさんのところで使われている処理ではある。しかしこのコードは、テキスト変換処理を複数のドキュメントに適用できるようにじゃっかんの拡張をほどこしてある。これは章ごとにファイルが別けられているケースなので便利だと思う。たとえば20ファイルあったときに、20回マクロを実行するのは、それなりに骨が折れるのだ。
コード
メインルーチンとサブルーチンにわける。メインでどのサブルーチンを実行させるかを、ユーザーインプットに応じて分岐させる。サブルーチンの種類というのは、処理範囲を単独ないしはすべてのドキュメントのどちらにするかという選択にもとづいておこなう。
メインルーチン
かんたんにinputboxに1とか2とかを入力することで、範囲を指定できるようにする。
Sub 箇条書き番号テキスト化() Dim f f = InputBox("箇条書き番号をテキスト化します。処理範囲を指定してください。1=現在の文書、2=すべての文書") If f = "" Then MsgBox "キャンセルしました", vbOKOnly + vbInformation Exit Sub End If Select Case f Case 1 Call ConvertNumbersToTextSingleDocument Case 2 Call ConvertNumbersToTextAllDocuments End Select End Sub
サブルーチン
全ドキュメントを処理するばあいは、ドキュメントのオブジェクト変数をループさせる。それ以外は、どっちも同じで、単純にコピペしている。 Lst.ConvertNumbersToTextが箇条書き記号を素のテキストに変換するVBAの組み込みメソッドだ。
Private Sub ConvertNumbersToTextAllDocuments() Dim Lst As List Dim doc As Document For Each doc In Documents For Each Lst In doc.Lists Lst.ConvertNumbersToText Next Lst Next doc MsgBox "完了", vbOKOnly + vbInformation End Sub Private Sub ConvertNumbersToTextSingleDocument() Dim Lst As List For Each Lst In ActiveDocument.Lists Lst.ConvertNumbersToText Next Lst MsgBox "完了", vbOKOnly + vbInformation End Sub
基本的に、これでだいたいうまくいくはず。 Githubへのアップはまた今度やる。
「シャチ泳ぎ」という演算子の使い方を試してみた
Effective Perl第2版をKindleで読んでいる。
今日読んでいて「シャチ泳ぎ」というおもしろい名前の記法が紹介されていた。
たとえば、こういう感じのやつ。
my $hoge //= 'fugaa!';
ここではDifined-or演算子(//)の直後に代入演算子(=)が使われている。
感覚的に$hogeがundefなら右辺の値が代入されるのだな、という察しがつく。
# difined-or演算子 # 左辺がundefであれば右辺を代入する my $a = undef; $a //= 'un-undef'; print $a; # 'un-undef'
この書き方は||
を使ってもできる。
# 左辺が偽であれば右辺を代入する # Perlで偽となるのは、'', 0, '0', undefの4つ my @arr = ('', 0, '0', undef, 'True'); my @converted = map { $_ ||= 'hoge!' } @arr; print join ' ', @converted;
以上がシャチ泳ぎの中身だった。
Effective Perlには、上記ふたつの演算子を正しく使うために理解しておかなければならない、Perlで偽となる値についてもはっきりと書かれていてとてもいい。
- 作者: Joseph N. Hall,Joshua A. McAdams,brian d foy,吉川邦夫
- 出版社/メーカー: 翔泳社
- 発売日: 2015/02/17
- メディア: 大型本
- この商品を含むブログを見る
Kindleアプリ使える
ところでKindleアプリはよくできていて、スマホでもよみやすい。
ハイライトをタッチ操作できて、自動でインデックスが作成されるので、マークした箇所はあとからかんたんに見返すことができる。
コードブロックもマークできる。
紙の本ならふせんをつけるところだが、ふせんだとどれがどれだかわからなくなるので、検索性は電子本がすぐれていると実感した。
液晶で読むのが人によっては負担になる点はあるが、アプリで暖色にしたり色を反転できたりするうえ、フォントサイズ、行間、余白まで設定できるので、だいぶいい。
目に対するやさしさでは電子ペーパーに分があるが、応答性の良さではまだまだ液晶の圧勝なので、1時間の読書程度ならスマホで便利に読むのはアリという気がする。