いつの間にやらプチバズっていたので

過去にLunar-KがVBA大過去に作って、ウンコード供養として上げたGistのコードがあったのですが、なんか1年弱程前にプチバズった時期があるようで…とてもお恥ずかしい限りでございます。

togetter.com

何がプチバズったのか

VBAマクロ向け関数。GenderEstimate。漢字の名前とふりがなから、性別を推定する関数 · GitHub

このコードです。GenderEstimate関数といって、Excel VBA環境上で2012年頃に作ったもので、名前から性別を推定する関数です。
同じ頃、連続した住所のStringから市区町村名を切り出す関数をFileMakerProから移植できていい気になっていた20代のLunar-Kが調子こいて「できねえなりになんか作ってみよう」としたものになります。

なんで作ったのか

当時、前職の会社で記名アンケート統計の仕事が定期的にあったのですが、性別を5%ぐらいの方が記載せずに回答するもので、まあできねえなりに推定を試みようとして、残り5%の性別を埋めるために開発したものになります。従って、全員が全員性別書いてないような(名前だけ書いてあるような)名簿への性別の推定を目的としてはおらず、まぁ手慰み程度にとおもって半ばギャグで作ったものになります。ヒューリスティックの塊でどこまで人間の行う「推定」に近づけられるのかという課題にチャレンジしたようなものになります。

実際作って動かしてみての乾燥ですが、若い子の性別判定とかアニメキャラではもうボロボロなものの、案外キラキラネームじゃない世代の性別推定には善戦していた印象があります。すぐに使わなくなりましたが。

当時考えていたアイディア

男女どっちにも当てはまる名前への対応
  • そもそもその個人の性別を「判定」する目的で作っているわけではないので、例えば可能性が半々なら、1/2の確率で男という結果を返したり女という結果を返したりするようにしよう
    • ただ、一度付けた値が固定してくれないと、Excel関数としては使いにくいよね…
  • もう少し発展的には、男女比に偏りのある苗字なら、男女の比率に重みを付けて結果を返せばなんとなくシステムっぽい?
    • まあ、でもその名前の男女比なんてわからんよねぇ…。

バズっている内容へのコメント

まぁ、性別推定なんてやるもんじゃないよ。やればやるほど血を見るのでお勧めしません。

思うところあって

思うところあって、最近QiitaとTeratailを始めました。Qiitaは主にTips関係、Teratailは回答を頑張ろうと思います。

何を思ったのか

エンベデッドデバイス(ハンディターミナル)向けの.NET Compact Frameworkプログラマを7年やりました。
一区切り、その仕事が10月よりメインでなくなるため、僕が7年間に得た知識をある程度アウトプットしておく必要があるとおもったのですが、とはいえ私も色々ググりながら解決してきました。
ただ、一点違うのは、そもそも、.NET Frameworkで出来ることが、.NET Compact Frameworkでは実装されていなくてハマる、というケースが何度か過去に起きていること。つまり、世の中には、.NET Frameworkの情報は十分に溢れていても、.NET Compact Frameworkに関する情報は極めて少ないのです。

そして近年のAndroidiOSの台頭により、.NET Compact Frameworkの主戦場となるべきOS、いわゆるWindows Phoneは早々に敗北宣言を出し、そのエンベデッドデバイス版OSであるWindows Embedded Compactも、恐らく2013を出したのが最終になるでしょう。恐らく、.NET Compact Frameworkに関する情報は今後もっともっと手に入りにくくなっていくはずです。

そこで、人類共有の財産として、Qiitaのような、ググラビリティの高いサイトにまとまった情報は残しておくべきではないかと考えるようになりました。というわけで、Compact Framework二関する、一般的なコーディングTIPSに関する情報は、可能な範囲で公開していきます。

VBAマクロを用いてテキストファイルを読み込むとき

VBAマクロを用いてテキストファイルをString型変数に入れるケースにおいて、UTF-8の場合のみADODB.Streamを使うように指示しているリファレンスサイトが多いのですが、実は文字コードを指定すればなんでも読めます。
よって、Shift-JISだからといって、FSOを用いたテキスト読み込みなどを用いる必要は特にありません。

 Dim pstrFN As String ’ファイル名フルパスを指定する
 Dim pMojiCode As String ’文字コードを指定する
 Dim buf As String ’ここに読み込んだテキストが格納される

    With CreateObject("ADODB.Stream")
        .CharSet = pMojiCode
        .Open
        .LoadFromFile pstrFN
        buf = .ReadText
        .Close
    End With

上記のようなコードの場合、pMojicode(すなわちADODB.Stream.Charset)には以下のような文字コードが指定できます。

Thinkpad T480購入→いじった場所記録

Thinkpad T480を買って半年ほどがたちますが、その記事です。いくつかいじった場所があるので共有します。

NVMe SSD換装

最初の構成でNVMe SSDを選択した場合、通常SATA HDDが載る位置に取り付くNVMeマウンタに取り付いて搭載されてやってきます。無い場合は以下のようにThinkFactoryさんとかで売ってます。
store.shopping.yahoo.co.jp

こちらの対応速度ですが、M Keyしか切っていないくせに。PCIe x2しか出ていないので、1500MB/s以上の速度は望めないことを注意しておく必要があります。
つまり、IOPS狙いでなければ、3000MB/s前後のRead速度を誇るようなNVMe SSDではその性能を発揮しきれないということを意味します。
この辺の情報を知らずにSSDを購入してしまったのは失策でした。

メモリ

発売当時は1枚32GBのDDR4メモリがなかったため、最大メモリ容量は32GB構成となっています。現在では1枚32GBのDDR4 SODIMMがありますので、そちら2枚で最大の64GBメモリとすることが出来ます。

WWANを入手するかしないかについて

WWANについては、Fibocom L850-GLというデバイスが付いてきます。このデバイスはAliexpressでもAmazonでも入手が難しいため、ルーター無しでWWANしたいなら付けておくべきです。
対応バンドは以下の通りです。W-CDMAは割愛します。
GSM携帯帯域のEDGEやGPRSみたいな2Gには対応しませんが、One World One SKUとFibocomが歌っている通り、その対応バンド幅は非常に幅広く、海外での利用にも至適とおもわれます。

LTE-FDD
1 2 3 4 5 6 7 8 11 12
13 17 18 19 20 21 25 26 28 29
30 38 39 40 41 42 66

ドコモ回線・・・バンド1、3、19
au回線・・・バンド1、18(26)
ソフトバンク回線・・・バンド1、3、8

LTE TDD
38 39 40 41

41番のWireless City Planning、UQコミュニケーションズが使用する領域が使えるようになっていますが、ここで本当に通信しているかは不明です。

通信速度は以下の通りです。Cat9で、キャリアアグリゲーションに対応しています。
LTE FDD(Mbps):450(DL)/50(UL) (Cat9)
LTE TDD(Mbps):347(DL)30(UL)(Cat9)
W-CDMA(kbps):384(DL)/384(UL)
DC-HSDPA+ (Mbps):42(DL)/5.76(UL)

ただし、携帯通信デバイスをONにするとき→接続までの安定性が悪いキャリアがあり(特にau系)、やや接続が確実とは言えない状況です。以下の内容が解決に導くかもしれません。
qwerty.work
ベースバンドチップはiPhone等と同じXMM7360-Pになります。

Thinkpad T480の液晶の張り替え

通常、Thinkpad T480の液晶はLP140WF6(SP)(B7)(FHD IPSを指定した場合)が付いてきます。LG製でグレードは悪くないのですが、問題はこの液晶の発色が悪く、26万色しか出ない液晶である、という点が気になります。
そこで、考えるのは1677万色出るディスプレイへの換装です。可能であれば消費電力が落ちますのでIGZOを選定したいところです。

ネジ穴の互換はなくなりますが、BOEから「NE140FHM-N61」というディスプレイが出ており、1677万色、AdobeRGBカバー率72%とのことなので、こちらに換装します。
www.panelook.com

愛車更新

ずっと更新してなかったのですが、愛車がスカイラインV36になりました。
f:id:lunark:20180708190531j:plain
すでに2万キロほど乗りましたが、燃費と、まぁスカイラインというクルマの性質上ですが、アイドリングストップみたいな省エネ的なものが装備していない、という問題以外は特になく快適に乗っています。後期型でリップスポイラーがかっこいい……。

いくつかメンテしているのでまたメンテ記事を書きます。

ATF交換

今回ATF交換は、47000km前後のところで行いました。SAB東雲改めAPIT東雲での交換です。V36はATFのゲージがないため、圧送式での交換となりました。
交換したATFは飛燕のエステルコンポジット。トルク伝達が前よりもずっとスムーズになりました。こうなってくると、そのうちNUTEC ZZ-51改とか入れたくなりますね。

エンジンオイル交換

前の愛車のようには年間走行距離が伸びなくなったので(前は37000km/年だった)、1.5ヶ月に1回オイル交換をするような珍奇なことはなくなりました。半年点検で入庫していると、ちょうどオイル交換になるため、ずっと純正のキャッスルでしたが、2,3回自力でもオイル交換をしています。可能な限り自分でいれるときは全合成を入れることにしています。

BARDAHL SynPulsar-N 5W-30

item.rakuten.co.jp
前のティーダの頃からずっと懇意にしているオイルです。いろいろ入れてみたけど、一番これがフリクションロスを感じないです。DNTフラーレンC60配合はダテではないですね。E-plusとかの添加剤で入れてる人も多いけど、やっぱり本筋はオイル自体に入っているほうが好いような気がします。僕の配合としては、これにプラスして、AAAから出ているECLという非ニュートンオイルの添加剤を入れるのが調子が良いです。シリンダーへのオイルのへばりつき効果が高くなり、特に冷間駆動時のエンジンノイズがなくなります。
欠点としては、4L缶+1L缶買いになってしまい、前のティーダで入れてたときよりも2000円近くコスト増になり、12000円前後となってしまうことです。いい物は高い!高いけどいい物!これをどう思うか、ですね。

Mortul J-01 Street 5W-40

review.kakaku.com
日産と言えばニスモニスモといえばMOTULということで、懇意の店でのバーダル終売のために入れたMOTULのオイル。可も無く不可も無く。シェルヒリックスのVHVIオイルとか、PAO+VHVIのカストロールエッジよりはまぁいいんじゃないでしょうか。わかりやすいショックとかばたつきの音とか無かったし(ただし5W-30ではなく5W-40を入れての評価なので、ちゃんとオイルが粘っていたという事でもあると思います)。

トリプルエー for V 2.5W-35

store.shopping.yahoo.co.jp
懇意にしているSAB八王子でSynPulsar-Nが終売になってしまったこと、仮にSynpulsar-Nを見つけたとして、V36のオイル充填量は実に4.7Lに達するため、4L缶だけでは足りなくなったことから、急遽ちょうどいいオイルはないかと思って入れたオイル。AAAの企画系オイルです。元々はホンダのVTECエンジンとか向けに作られている品ですが、エステル系かつ非ニュートン系で、5リットルで、1万円でおつりが来るので、バーダルはちょっと高いよ!という人にもいいんではないでしょうか。バーダル同様ふけ上がりは最高によいです。0W-20とかがいいなら普通のAAAのPAOオイルでも十分だと思います。

タイヤ

kakaku.com
最初がトーヨーの新車装着タイヤのままだったので、買い換えたいなあと思っていました。候補はコンチネンタルのContiPremiumContact5、BSのレグノでしたが、サイズが大きく両者8万近い中、ピレリのCinturato P7 225/55R17が安価だったので履き替えました。決して静かなタイヤではないですがちゃんとグリップしており、水はけもよいので、ハイドロプレーニング現象に陥ることがなく、安心感が断然違います。

QRCodeの生成 on Excel(なるべく無料で)

ExcelでのQRコードの生成については幾つか方法がありますが、それぞれ一長一短があります。

Microsoft Barcode Controlの場合

  • Microsoft Accessが含まれてないOfficeのエディションでは利用不能
  • 256文字以上生成出来ない
  • 漢字が変換できない

GAPIにxmlhttpする方法

  • 32/64bit不問。
  • 漢字が変換できない
  • 画像を1回ローカルに書き出さないといけない
  • 平文でリクエスト内容が流れる(URLで入力値を送る為)
  • インターネットに繋がっていないと使えない

Psytec様提供のQR Code Image for DOSをShellコマンドで叩く方法

  • 画像を1回ローカルに書き出さないといけない
  • QR生成プログラムをどこかに置く必要がある

今回はこの方法を紹介します。

gist.github.com

JAN(8桁、および13桁)⇒ITF(14桁)変換について

最近仕事で物流システムの開発をしているLunar-Kですが、とある事情から集合包装コードからJANコードへの変換を行う必要が出ました。
但し、JANコードにはGTIN-13(13桁のEAN/JANコード)とGTIN-8(8桁のEAN/JANコード)があります。
そうなるとその変換方法が問題になります。

ITF-14⇒GTIN-13(13桁JAN)への変換の場合ですが、これはGS1(一般財団法人流通システム開発センター)様のサイトにも記述がありますが、

1.先頭1桁目ののインジケータ(PI)を取り除く 
2.末尾のチェックデジットを取り除く
3.12桁となった状態で、13桁目をモジュラス10ウェイト3で再計算

となります。
…では、GTIN-8の場合、ITFコードはどうやって入ってくるのでしょうか?という問題があります。
やっぱり餅は餅屋だろ、ってことで本家に問い合わせてみました。

結論。
こう入ってきます。

「10000049968719」
(インジケータの後ろに、0が5つ付いた状態で入れる)

つまりITF-14からJAN-8への変換はこうなります。

1.先頭1桁目のインジケータ(PI)を取り除く
2.末尾のチェックデジットを取り除く
3.12桁となった状態で、13桁目をモジュラス10ウェイト3で再計算
4.このとき0が「5桁」以上続いているならば、最初の「0」5桁はフィラーなので取り除く*1

*1:参考:業界別標準化活動(食品軽包装・原材料・代理収納) | 標準化活動 | GS1 Japan(一般財団法人流通システム開発センター) 食品軽包装業界 バーコード(JAN シンボル・ITF シンボル) ソースマーキングガイド 第1版 P.51