日付から曜日を求めるワンライナーを awkで
ウェブサイトにイベントの告知記事を書くときに、過去の記事を書き換えて流用しようとすると、日付は書き換えたけど曜日を書き換え忘れていたり、あるいは間違えて書いてしまったり、ということがあります。そういう間違いをチェックするのに日付とカレンダーを付き合わせても良いのだけれど、どうせなら何かのロジックで処理したい。
さて、曜日の計算を汎用的に行うにはツェラーの公式を使うのが基本ですけど、それだと処理が冗長になります。そんなことをせずとも、指定した日付に対応する曜日を取得する処理をカレンダー関連のコマンドや関数で取得する方がシンプルです。
そこで awk で日付文字列をパースしつつ、mktimeで内部形式(unix秒)に変換したのち、strftime で曜日だけ取得するように書いてみました。
awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
そうするとこんなふうに利用できます。
$ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }' Thu $ echo '2017年5月18日' | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }' Thu $ awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }' 2017年 5月 18日 Thu 2017/5/18 Thu
日本語で表示してほしいなら LANG=ja_JP.UTF8 しておけばOKですね。
$ export LANG=ja_JP.UTF8 $ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }' 木
Windows10でスタートメニューが出ない場合の解決方法として良く紹介される手順の意味を確認する
自分自身はWindows10でスタートメニューが出ない不具合に遭遇したことは無いけれど、世の中的には割とあるらしい。
さて、そういう場合の対処方法として良く紹介される手順にはこういうものがある。これを管理者権限で実行するらしい。
dism /online /cleanup-image /restorehealth sfc /scannow powershell Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}
これを単にコピペしてもよいのだけど、エンジニア的には内容を理解しておくほうが良さげ。
そこでこれらのコマンドの意味を確認しつつ、もっと切りつけ可能な部分はないかと考えてみる。
個々の処理の意味
dism.exe
dismはWindowsのイメージを操作するツール。
パラメータ | 意味 |
---|---|
/online | 現在実行中のOSイメージに対して操作を行う |
/cleanup-image | イメージに対してクリーンアップおよび回復を試みる |
/restorehealth | コンポーネントストアの破損の有無をスキャンし、必要に応じて修復を試みる |
sfc.exe
ファイルシステムの整合性をスキャンして、間違ったバージョンを正しい Windows バージョンに置換する
パラメータ | 意味 |
---|---|
/scannow | 整合性をスキャンすると同時に、問題のあるファイルの修復も行う |
Get-AppXPackage -AllUsers
すべてのユーザ向けのインストール済みストアアプリの情報を取得する
powershell
cmd.exe から PowerShell を起動する。
Where-Object {$_.InstallLocation -like “SystemApps”}
インストール先のフルパスに SystemApps を含むアプリだけを抽出する。
Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}
抽出されたストアアプリについて、DisableDevelopmentMode でアプリを再登録する(サイドローディングする)
処理の最適化?
最適化、というほどでもないけれど、今回の作業はそもそも「PowerShellを管理者権限で実行」し、PowerShell上から下記3点を実行すればよさげ。特に Windows10 Creators Update ではコマンドプロンプトから PowerShell への置換が進みつつあるので、わざわざコマンドプロンプトから powershell を実行する意味がない。
dism /online /cleanup-image /restorehealth sfc /scannow Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}
sedで日本語表記の日付から年月日の漢字を消して/に置き換える
2017年 4月 19日や2017年4月19日のような日付形式をsedで置換しようとしたら意外にハマったのでメモ。
ポイントは以下の通り。 - ( や ) はエスケープ必要 - blankspace もエスケープ必要? - + や ? もエスケープ必要 - { や } もエスケープ必要
やりたいパターンマッチはこういう内容。
だけど sed ではエスケープせねばならない部分が多いので、結果的にこういう処理になる。
$ echo '2017年 4月 19日' | sed 's/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g' 2017/4/19
上記の内容を踏まえたうえで日本語の日付時刻から漢字を抜く処理をこんなふうに書いてみた。
#!/bin/sed -f s/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g s/\([0-9]\+\)時\ \?\([0-9]\+\)分\ \?\([0-9]\+\)秒/\1:\2:\3/g s/曜日//g s/日/Sun/g s/月/Mon/g s/火/Tue/g s/水/Wed/g s/木/Thu/g s/金/Fri/g s/土/Sat/g
Windows10でタスクバーから時計を消す
アプリの操作デモを静止画や動画キャプチャーする場合に、タスクバーの時計が出ていると不都合な場合があるのですが、めったにやらない作業だけに忘れてしまいがちなのでメモしておく。
設定アプリから「システム」で検索すると「システムアイコンのオン/オフの切り替え」という項目が出るので、これを選ぶ。
すると「時計」という項目があるので、これをオフにすれば、タスクバーから時計が消える。
縦1200ピクセルの液晶モニタを縦向きで使ったらとても便利だった
職場の自分のデスクには3台のディスプレイがある。
1280x1024
1920x1080
1920x1200
いままではこれを次のような配置で使っていました。横置きと縦置きを組み合わせるのは、とても独特な配置だと自分でも思います。だけど、この配置は案外使いやすいんですよ。
まず、右側のディスプレイを縦配置にしているのは、縦長の文書を読むのにちょうどよいからです。また、上下を半分に使い分けることでアプリのウィンドウ表示が横長のものを上下に2枚配置できます。ただしWindows10のショートカットキーではウィンドウを上下にキレイに配置する方法がないので、それを補填するために Sizer
http://www.brianapps.net/sizer/ というツールを使っています。
そして左側のディスプレイは閲覧頻度が低いけれど常時表示したいものを出しておく。
中央がメインの作業場なので、ここには最も広いディスプレイをアサインしてみました。。
そしてこれらのディスプレイは一度に支給されたものではなく、余っているものを順次徴用した結果、このような配置になっています。
今から新規にすべて買い揃えるならば、センターのディスプレイは4Kにするかも。
でも、ふと気づきました。
右のディスプレイを上下半分で使うと、上半分、下半分の大きさは 1024x768 に毛が生えた程度の広さでしかなく、微妙に狭いことに。
なのでこんなふうに変えてみることにしました。
正直なところ、中央のディスプレイの縦が120ピクセル減っても大勢に影響はありません。
でも右のディスプレイの上半分、下半分がそれぞれ1200x960になるわけで、これはつまり1280x800に近い大きさが確保されていることになります。
些細な違いでしかないけれど、その違いが自分にとっては案外大きい違いだと気づきました。
ここまで書いていて、さらにふと思い出した。昨年3月までの勤務先ではこんな配置で使っていたことを。
実は今回の構成とおなじく、縦1200ピクセルのモニタを縦置きで使っていたのです。そうすると1280x800のノートパソコンの液晶を上下に2枚並べているのと同様の使い勝手になるので、みやすさが全然違います。
たとえば、パワポの資料を上下に並べて片方を見ながらもう片方を編集、とか、動画をどちらかの半分で再生しながらもう半分で別のアプリを表示、などの使い方をやってみると、とても良い感じに使えることに気づくはずです。
というわけで、マルチモニタ構成の中に縦1200ピクセルのモニタがあるならば、一度縦向きで使ってみることをオススメいたします。
画面の縦横比が720pや1080p相当の組み合わせのメモ
アプリの画面スクリーンショットを取る際に、できるかぎり720pや1080p相当の縦横の比率(アスペクト比)= 16:9 で取りたいと思った。
そこで手持ちの環境で設定可能な組み合わせを忘備録としてメモしておく。
横 | 縦 |
1280 | 720 |
1366 | 768 |
1600 | 900 |
1920 | 1080 |
2560 | 1440 |
なお、1280x720と1920x1080は1.5倍の差があるけど、1920x1080で150%のスケーリングを行ってもアプリによっては1280x720と同じ表示にならない場合がある。ここらへんは目的によって使い分けるとよいかもしれない。
また 1366x768 や 2560x1440 は厳密に言えば 16:9 とはほんの少しだけ違うので、それが気になる方は使わないほうがよさげ。自分は気にしないけど。
Windows10 Creators Update にしたら色々躓いたのでメモしておく
少々出遅れた感があるけれど、今日からWindows10 Creators Updateを使い始めました。するといろいろ違うので、対処すべき内容の一覧の忘備録として記録を残しておくことにします。
スタートメニューの右クリックにコントロールパネルがない。
Cortanaで「コントロールパネル」で検索すると検索一覧に出てくる。これを右クリックして「スタートにピン止め」や「タスクバーにピン止め」しておく。
日本語キーボードが英語で認識される
手元のキーボードはマイクロソフト製だったので、マイクロソフトのサイトからドライバをダウンロードして再インストール。
その他の場合は、デバイスマネージャでドライバを明示的に指定してなんとかする。
VMware Workstation でブリッジネットワークが使えない
VMware Workstaion の修復インストールを実施して復旧完了。
VMware 経由でのホストマシン側ストレージ参照が行えない
VMware Tools を最新版にアップデートする。