Windows Update 20H2 が適用できない件

  • このエントリーをはてなブックマークに追加

LG gram 13Z980-GA56JというノートPCを使っています。こちらの機種ですが、バージョン1909のまま次のアップデート(2004(20H1))が来ないで、つい先日20H2が来るようになりました。
20H2はConexant Audio関連の不具合が多く、BSoDが出るというIssueが上がっていて、それが更新のBlockerになっていましたが、ようやくこのPCにも適用できる状態になりました。

さっそく更新をポチッとしても、61%で止まります。調べてみると、同じような症状が出ている人が多いです。絶望。

対策1

「設定」の「トラブルシューティング」で「Windows Update」のトラブルシューティングツールの実行を選択します。これで何個か修正がされました。

再度Windows Updadeを行うも、61%で停止するので改善はありませんでした。

対策2

Conexant Audioを一度削除してからWindows Updadeをします。
デバイスマネージャから「Conexant HD Audio」を選択し、デバイスのアンインストールを行います。この後、ハードウェアの変更スキャンを行うと再度デバイスを認識してしまうため、そういった操作は行わないようにします。

この状態でWindows Updadeを行うと、更新が無事にできました。

適用後

デバイスをアンインストールしたConexant HD Audioを復活してました。
特に問題なく音は鳴っています。BSoDは今のところ発生していません。

テーマの設定方法が変わったみたいなので、設定がリセットされてました。
他にはATOKなどの一部のソフトウェアのライセンスが再度認証に必要になりました。

気になったのはそれくらいです。

注意

私の環境では問題が発生していませんが、同じ手順でBSoDが発生しても責任は取れませんです。自己責任で。

参考

弥生会計がエラーで起動できない件について

  • このエントリーをはてなブックマークに追加

オンライン版じゃないパッケージ製品の弥生会計を購入しました。
さっそく起動できない。

エラーログはC:\Users\{ユーザー名}\Documents\Yayoi\SystemLog\Common\YKaikei21にあります。

エラーログ
2021/01/07 13:07:40 [ERROR] (1_2909)
- [10099] 弥生 ライセンス認証管理内で不正終了しました。
【例外メッセージ】
場所 Void .ctor(System.Windows.Media.FontFamily, System.Windows.FontStyle, System.Windows.FontWeight, System.Windows.FontStretch)
System.TypeInitializationException :
'System.Windows.Media.FontFamily' のタイプ初期化子が例外をスローしました。
【内部例外メッセージ】
場所 Void Win32Error(Int32, System.String)
System.IO.IOException :
データがさらにあります。

【スタックトレース】
場所 System.Windows.Media.Typeface..ctor(FontFamily fontFamily, FontStyle style, FontWeight weight, FontStretch stretch)
場所 MS.Internal.Text.DynamicPropertyReader.GetTypeface(DependencyObject element)
場所 MS.Internal.Text.TextProperties.InitCommon(DependencyObject target)
場所 MS.Internal.Text.TextProperties..ctor(FrameworkElement target, Boolean isTypographyDefaultValue)
場所 System.Windows.Controls.TextBlock.GetLineProperties()
場所 System.Windows.Controls.TextBlock.EnsureTextBlockCache()
場所 System.Windows.Controls.TextBlock.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.Grid.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.Border.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.StackPanel.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
場所 System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
場所 System.Windows.Controls.Grid.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
場所 System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
場所 System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Controls.Border.MeasureOverride(Size constraint)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Window.MeasureOverrideHelper(Size constraint)
場所 System.Windows.Window.MeasureOverride(Size availableSize)
場所 System.Windows.FrameworkElement.MeasureCore(Size availableSize)
場所 System.Windows.UIElement.Measure(Size availableSize)
場所 System.Windows.Interop.HwndSource.SetLayoutSize()
場所 System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
場所 System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
場所 System.Windows.Window.SetRootVisual()
場所 System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
場所 System.Windows.Window.CreateSourceWindowImpl()
場所 System.Windows.Window.SafeCreateWindow()
場所 System.Windows.Window.ShowHelper(Object booleanBox)
場所 System.Windows.Window.Show()
場所 System.Windows.Window.ShowDialog()
場所 Yayoi.YmActivate.Wizard.Model.UIStartupProcess.RunByProduct(ActivationMode mode, ProductInfo product, Boolean& isModeModified)
場所 Yayoi.YmActivate.ProxyEntryPoint.TryStartupProduct()
場所 Yayoi.YmActivate.ProxyEntryPoint.DoLicenseAuth(String args)


2021/01/07 13:07:42 [INFO ] (1_4550)
- [10022] ステータスを返却します。(Error)

良くないフォントがあるとエラーになるらしい。参考サイトを元に、SourceHanCodeJPを削除しました。これはこれで使ってるから、消すのは嫌なんだけど、起動しないから仕方ない。

参考

2020年のまとめ

  • このエントリーをはてなブックマークに追加

2020年は2021年に向けての準備の年としてギアをあまり入れない形で過ごしました。

会社を作りました

合同会社を作りました。
今住んでいる賃貸物件は法人登記には使えないので、バーチャルオフィスを借りました。

大学に行きました

2020年4月から大学に通っています。院ではなく、心理学系の学部です。4年間通うことはなく、過去の単位を認定してもらって編入しています。
もともとはCSの学部卒なので、CSの院に行ってると多くの人が思っているみたいですが、私の生存戦略はちょっと違うのです。なぜ心理学をという話は、聞かれた人には教えているのですが、わざわざここで書くような話ではないので、知りたい人は直接聞いてください。

成績は現役(CS)の時は、GPAが3.93だったのですが、今回は4.0を目指してます。
心理学系の学問は学修の目安として、認定心理士、臨床心理士、公認心理師の3つがあります。後者2つのどちらかがないと、専門職としては弱いのですが、エンジニアを辞めるつもりはないので後者2つはターゲットにしていません。

  • 認定心理士 ▶ 大学で所定の単位を取って申請するだけのもの
  • 臨床心理士 ▶ 国家資格ではない。院に行く必要がある。
  • 公認心理師 ▶ 最近できた国家資格。院に行く必要がある。

簿記の資格を取りました

理由は2つあり、1つは大学への入学が決まり授業が始まるまでの間暇だったこと、もう1つは会社設立にあたり自分で事務処理をするために覚えた方が良いだろうと思ったことです。

無事に合格しています。一般的な知識は身につきました。1級は要らないかな..

DIYはじめました

テレビの壁掛けは以前にやっていたのですが、ちゃんとした工具を買って本棚や作業台を作るようになりました。

買ったもの

勉強のノートテイキングのために初めてのiPadを買いました。とても使いやすい・・。
4Kディスプレイを買いました。外部ディスプレイはこれ1つあれば十分かな。
インクジェットの複合機を買いました。スキャナを主に利用するのですが、毎回コンビニに行く必要がなくなり便利。
リゲッタの靴がとても良いです。自由が丘のお店で毎回買っているのですが、ショートブーツがとても良く、今年は4足も買いました。

技術的なこと

あまりアウトプットしていませんが、何個かサービスを作ったりしてます。
殆どが効率的に勉強をするためのものが多いですけども。

もう1つ人格を作ってみた

裏アカとかではなく、まっさらな状態での別名義のSNSアカウントを作りました。
趣味アカウントではなく、技術系のアカウントです。実験に近いのですが、今のご時世、個人の信用パラメータがゼロの状態で始めると、どれくらい大変なのかなと。
成果が分散しちゃうのでちょっと嫌なのですが、いくつかのサービスはそっちで公開しました。

なかなか大変ですね。

フードデリバリーや宅配弁当を利用するように

UberEatsなどのサービスを使ったことがないのですが、今年から必要に応じて使うようになりました。
またNoshというお弁当のサービスを一時期利用していました。

Instagramの毎日投稿

5月から毎日投稿をしていました。
毎日1つ何か違う事をすることによって、記憶の圧縮を防いだり、だらだら過ごさないようにするためにやっていました。

ふるさと納税で良かったもの履歴

  • このエントリーをはてなブックマークに追加

年末で迷っている人もいると思うので、2015年から2019年までの履歴で良かったものを列挙します(※2020年はこれといった収入がないため、ふるさと納税をしていません)。良くなかったものは書きません。
基本的に1万円~3万円のものが多いです。

参考までに、わたしの直近の寄付控除額です。※寄付控除額なので、ふるさと納税以外の寄付控除も含まれています。なので、これを参考に所得を計算しても近似値にはなりません。悪しからず..

年度 寄付控除額
H27 228,000
H28 303,000
H29 380,000
H30 424,000
R1 2,368,513

Tojiro-Pro DPコバルト合金鋼割込 包丁2点セット

包丁と言えば新潟県燕市と岐阜県関市。
普段の生活では高い包丁を買わない人も、こういう機会に入手するのは有りだと思います。
私は上記写真のTojiro Proのセットとパン(ケーキ)切り包丁を貰いました。

包丁は他にも色々あります色々2

ビール各種




私はもうお酒は飲まないのですが、お酒をたくさん飲む人はビールも良いと思います。24缶で1.6万円~2万円くらいのレンジです。泉佐野市が問題になる前は、24缶で1万円でした。

インドの青鬼、水曜日の猫、よなよなエール、エビス、プレモルなどがあります。
消費できない分は会社に持っていきました。

お肉 / 陣中の牛タン厚切り塩麹熟成

陣中の牛タン厚切り塩麹熟成。何度もリピートしました。すっっっっごい美味しいです!!

静岡県の藤枝市が3万円で7個(銀色がパッケージが4つ、金色のパッケージが3つだったかな?)のものがあったのですが、還元率が高すぎたのか無くなりました。

今は宮城県名取市が陣中の牛タンを出しています。

生活用品 / ティッシュ

これのおかげで、今年の謎のティッシュ買い占めの難を逃れることができました。このティッシュは水分が凄い含まれているので、花粉症で鼻水をかみまくっても痛くなりません。
※メイクの時に使うとか、ねっとりしたものを拭き取る場合とかは、安めのティッシュの方が良いです。

赤ちゃんがいる場合は、おむつなんかもあります。

静岡県富士宮市の場合は、エリエールの贅沢保湿が30箱パックで20,000円。

北海道赤平市はエリエールの+WATERが50箱で22,000円。

生活用品 / トイレットペッパー

エリエールのトイレットペーパー各種、72ロールで14,000円くらいです。

私はエリエール消臭+を使っています。

上記ティッシュと同様、エリエールなら静岡県富士宮市と北海道赤平市がオススメです。
でっかい箱で届くので、置き場所注意。

お米

最近は白米を食べないで玄米なのですが、過去に以下のお米を貰いました。平均値として10kgで1万円の返礼品が多いです。

山形県村山市/つや姫 パックご飯 パックライス 200g 36食入 16,000円。

北海道沼田町/雪中米食べ比べセット(ゆめぴりか5㎏・ななつぼし5㎏) 13,000円。

雪中米美味しいです。何回かリピートしました。

お菓子 / ポテチ

このあたりのポテチを頼みました。食べきれない分は会社に持っていきました。なお、これだけ食べれば当然太るので注意です。
私が申し込みをした時は8,000円から10,000円でしたが、今はちょっと高くなっています。

24袋にびびりますが、まぁポテチは美味しいです。
もしくは、じゃがポックルもあります。

冷凍食品 / つくね

山形県鮭川村 / 鮭川村産 「やまがた最上どり」つくね串 50本 50本で15,000円です。

冷凍庫に余裕がある人向けです。段ボールのまま保存できない場合は、ジップロックとかに小分けにして保存すると良いです。
魚焼きグリルで焼くと、もちもちした食感で美味しいです。

冷凍食品 / 餃子

餃子はいろいろな種類を試したのですが、長崎のひとくち餃子が満足度高いです。

長崎県 佐世保市が10,000円で162個。無くなってました…。
餃子で探すと、他にも色々あります。

冷凍食品 / 唐揚げ

レンチンする唐揚げ、味付けしてあって自分で油で揚げるものなどを試しました。

この冷凍食品の大量セットが岐阜県 富加町にあったのですが、無くなってました。

スイーツ / いちご

甘くて美味しい淡雪という白イチゴです。複数の市町村が出してます。冷凍品もあるので間違えないように注意。

いちごは、福岡県 八女市のあまおうも良きです。

インスタントの味噌汁

(furusato-taxから無くなっていたので、楽天の方をリンク)


朝に味噌汁作るの面倒ですし。タニタの茄子のお味噌汁が特に美味しいです。

鎌田のだし醤油

香川県坂出市 / 鎌田醤油 だし醤油500ml【4本入】 2㍑で6,000円。4㍑で11,000円もありますが、調味料なので全然減らないです。大容量は計画的に..。

鎌田のだし醤油シリーズはいろいろあるので、いろんな種類を試したいという人は詰め合わせもあります。

カップヌードル

北海道千歳市 / 日清ヌードル3種セット 各1箱(20食)合計3箱 36,000円。

カップヌードルが好きな人向け。ご飯を作るのが面倒な時に便利です。
味別のものもありますし、どん兵衛もあります。

味付うずら卵

北海道室蘭市 / 味付うずら卵ヤヤン昆布だし燻製うずら卵セット 10,000円。

すっごい美味しいです。お酒のおつまみや、サラダのお供に。

高千穂のカフェオレ、ヨーグルト

宮城県都城市 / 高千穂牧場ヨーグルト&ドリンクファミリーセット 20,000円。

コンビニでよく見るカフェオレです。このセット意外にもいろいろな組み合わせがあります。ヨーグルトもめっちゃ美味しいです。

※賞味期限が早いので量に注意。

その他

  • 生活用品として洗剤やトイレクイックル、入浴剤など
  • はちみつ (良い蜂蜜は高いですからね。パンやヨーグルトにどうぞ.)
  • オリーブオイル
  • 飲み物
    • ミネラルウォーター
    • ペットボトルのお茶
      • 紅茶花伝
      • すこやか茶
      • 綾鷹
      • 胡麻麦茶
  • いくら (ある程度小分けになっているものが良いです)
  • フルーツ
    • メロン
    • いちご
    • シャインマスカット (めちゃくちゃ美味い)
    • みかん
    • もも
  • うなぎ

お正月向けにお餅をもらった事がありますが、量が多くて消費できなくて詰みました。
フルーツや野菜は定期便が良かったです。
冷凍の魚は1種類で量が多いのは飽きるので数種類セットのが良いです。
お肉は色々と食べてみたのですが、良いお肉は油が多くて胃につらかったので省略。

参考になれば。

rubyのleveldbを使うとwarningが出るようになった

  • このエントリーをはてなブックマークに追加

RubyのLevelDBのGemは有名なものが2つあります。私は前者の方をよく利用していました。

Ruby2.7で利用してみると大量のWarningが出るようになりました。キーワード引数の代わりにハッシュを渡すと出るようです。

leveldbfiddlerに依存しており、fiddlerが原因でした。

1
/var/lib/gems/2.7.0/gems/fiddler-rb-0.1.2/lib/fiddler.rb:51: warning: Using the last argument as keyword parameters is deprecated

これを対応するのもあれなので、せっかくなのでRocksDBを利用するようにしてみます。

参考

sequelのafter_commit

  • このエントリーをはてなブックマークに追加

DBのライブラリとしてsequelを良く使います。使い勝手が好みです。

Modelを利用しないでトランザクションを利用する時は次のような処理を書きます。

1
2
3
4
5
db = Sequel.connect(...)
db.transaction do
db[:xxx].insert(...)
db[:xxx].where(...).update(...)
end # commit

何を寝ぼけていたのか、こんな処理を書いてしまっていました。
commit前に更新通知の送信をしているので、受信側はcommit前にメッセージを受け取り更新前の情報を参照してしまいます。

1
2
3
4
5
6
7
8
9
db.transaction do
cond = db[:xxx].where(...).select(...).first
if cond
db[:xxx].insert(...)
else
db[:xxx].where().update(...)
mq.publish(...) # 更新通知をMessageQueueに送信する
end
end # ここでcommit

もちろんtransactionブロックを抜けたところにロジックを書いても良いですが、それだと上記のように複雑な条件文の中にあると、一律実行する事はできずにフラグを用意する必要があります。

そこでafter_commitもしくはafter_rollbackを使います。

1
2
3
4
5
6
7
8
9
10
11
db.transaction do
cond = db[:xxx].where(...).select(...).first
if cond
db[:xxx].insert(...)
else
db[:xxx].where().update(...)
db.after_commit do
mq.publish(...) # 更新通知をMessageQueueに送信する
end
end
end

注意点は、after_commitで変数を参照している場合、ブロックの最後の値になるという事です。threadのようにその時の変数の値を渡すことができません。以下の例ではafter_commitのブロック中ではx=10ではなくx=11になります。

1
2
3
4
5
db.transaction do 
x = 10
db.after_commit { puts x } # x = 11
x = 11
end

MySQL(InnoDB)の空振りDeleteでデッドロック

  • このエントリーをはてなブックマークに追加

delete-insertパターンを処理しているところでデッドロックが発生しました。

1
#<Sequel::SerializationFailure: Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction>

ネクストキーロックやギャップロックは分かっていたのですが、横着して書いたせいか件数チェックをしないでレコードが無い場合でもDELETEを行っていたのが原因です。トランザクション分離レベルはInnoDBデフォルトの「Repeatable Read」です。

トランザクション分離レベルを変更しろという記事を結構見るのですが、トランザクション分離レベルの変更はアプリケーションの設計に大きな影響を与えるため、気軽に変更するのは反対です。今回は、件数を確認して削除対象レコードが存在する場合のみDeleteを実行するようにしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 駄目
db.transaction do
db[:xxx].where(...).delete
db[:xxx].insert
end

# 空振りdeleteを回避する
db.transaction do
if db[:xxx].where(...).count > 0 # for_updateもした方が良い
db[:xxx].where(...).delete
end
db[:xxx].insert
end

参考

今回の件とは直接関係はないけど、分離レベルとロストアップデートの話

国勢調査2020

  • このエントリーをはてなブックマークに追加

渋谷区に住んでいます。
渋谷区の知人の皆が配布期間が始まってから早々に封書が届いている中、一向に届きませんでした。渋谷区は対面での配布は行っておらず封書が投函される事になっています。

Twitterで「国勢調査 来ない」「国勢調査 届かない」で検索すると、届かない人はそれなりに居るみたいです。

時系列

  • 9月28日にコールセンターに電話。区役所に電話して欲しいとのこと。(このコールセンター何のためにあるんだ..)
  • 9月28日に区役所に電話。9月30日まで配布期間が延長されているので待って欲しいとのこと。
  • 9月30日。封書の投函が無いので区役所に電話。住所を伝えたところ、まだこの地区は配布がされていないので、明日、明後日まで待って欲しいとの事。
  • 10月2日。封書が投函されていないので区役所に電話。住所を伝えたところ、まだこの地区は配布されていないとの事。土日に配るからそれでも来ない場合はもう一度電話して欲しいとのこと。
  • 10月5日。封書が投函されていないので、区役所に電話。住所を伝える。週末に配布はしたが住居だと思わなくて投函しなかったとのこと。(何度も住所を伝えてる意味はいったい…)
    • この一連の流れも伝えて、郵送で送って欲しい旨を伝える。明日には届くとの事。
    • ※なお私が住んでいるところは見た目はどう見ても会社ではなく住居です。
  • 10月6日。届かなかった。
  • 10月7日。夕方に封書が届いた。

オンラインで回答するにしても、封書が必要なのが辛い。
自分が住んでいる地区が、配布がまだなのか、配布したが投函されなかったのかをオンラインで確認できるようにして欲しい。まだ配布がされていないのであれば区役所に電話はしないし、スキップされているなら、電話して配布要求できるからです。

5年後の国勢調査は、マイナンバーカードあたりを使って配布物が不要になっている事を望みます。
今回、オンラインで回答できる点は良かったです。

rubyでjavaのoptionalのようなことをしたい

  • このエントリーをはてなブックマークに追加

以下のようなことをもっとスマートに書きたい。

1
2
3
4
5
6
h = {}
node = doc.at_css(".title")
unless node.nil?
h[:title] = node.text
h[:href] = node.attr("href")
end

Ruby2.6にはthenというメソッドが追加されました。これと2.3で追加されたsafe operation nagigatorを利用します。

thenはselfを引数としたブロックを評価し、ブロックの結果を返します。

1
2
ret_val = obj.then{ |x| val } # obj == x
# ret_val == val

&.と組み合わせる事でjavaのoptionalみたいな事ができます。orElseみたいな事はできません。

1
2
3
4
5
6
7
8
9
10
11
12
h = {}
doc.at_css(".title")&.then{ |node|
# doc.at_css(".title")の結果がnot nilの場合、nodeに値が入ってこのブロックが実行される
h[:title] = node.text
h[:href] = node.attr("href")
}
# もしくはきちんと戻り値を使ってハッシュを作る
# ただしdoc.at_css(".title")がnilの場合、hがnilになる.
h = doc.at_css(".title")&.then{ |node|
h[:title] = node.text
[ :title, node.text, :href, node.attr("href") ]
}.to_h

DOM操作をするとき、unless nil判定が多くなるので、省略できて便利!

1
title = node.at_css(".title")&.text

参考

RubyでHashの分割代入をしたい

  • このエントリーをはてなブックマークに追加

Rubyで分割代入をしたい。values_atを使えば出来そう。

1
2
3
4
5
6
h = { :a => 1, :c => 2 }
a, b, c = h.values_at(:a, :b, :c)

# a = 1
# b = nil
# c = 2

さらにRuby2.7では pattern match を使ってNestしたHashもいけるみたい。
ただ、pattern matchは試験実装なので使うとwarningが出ます。

1
2
3
4
5
6
7
8
9
h = { :a => 1, :b => 10 }
h in {a:, b:}
# a = 1
# b = 10

h = { :a => { :b => 100 }}
h in {a:{b:}}
# a => undefined
# b = 100

参考