目次: ALSA
先日送ったalsa-libへのパッチ(2022年4月29日の日記参照)がマージされました(該当するコミットへのリンク)。3週間くらい何も反応が無かったので、送り先を間違ったかな……?と思い始めたところでした。やー良かった良かった。
バグの発見(2014年7月9日の日記参照)から直るまでに8年も空きました。ALSAのような有名なOSSだと利用者数も半端ないので、バグを年単位で放っておくと他の人が同じバグに気づいて直すことが多いです。ところが、このバグは割と発生条件が変わっているのもあり、誰もバグに気づかなかったか、わざわざ直す価値を感じなかったのでしょう。有名OSSでは割と珍しいケースですよね。
目次: プロバイダ
携帯に突然BIGLOBE光から電話が掛かってきて、ドコモ光から切り替えないか?と勧誘されました。KDDIはどこから私の電話番号と、ドコモ光を契約していることを知ったのでしょうか……?
勧誘の人は1,000円/月くらい安くなるはず、今なら工事費を無料で切り替えられる、キャッシュバックの分だけ得、とまくし立ててきます。しかし過去に電話勧誘で契約して良かったことがない(ドコモ光に変えた時とか)ので、契約しませんでした。
料金を確認すると今使っているドコモ光(タイプA)は4,400円/月、BIGLOBE光は4,378円/月で、ほとんど変わりません。しかもBIGLOBE光は3年縛りで、解約の機会がさらに限られます(違約金は11,900円も取られる)。ドコモ光の2年縛りだって最悪なのに3年縛り……悪化させてどうするんでしょう。
適当ばっかり言いやがって、これだから電話勧誘は嫌いなんだ。
海外から日本語がおかしいスパムやフィッシング詐欺のメールが来ることは多いですが、今回来たメールは桁違いに単語がおかしいです。
一例を挙げれば、
わざとやっているのではないか?と思うほどにおかしいです。
メールヘッダを見るとContent-Typeがtext/htmlとなっていたので、これはもしかしてHTML表示の場合のみまともに見えるタイプなのでは?と疑って、普段使っているテキスト表示から、HTML表示に変更したところ、
割とまともに表示されました。日本語としてはイマイチですが、完全におかしい単語はなりを潜めています。
テキスト表示の際に多数出てきたおかしな単語の役割もわかりましたね。表示されないようにした意味の無い文字を紛れ込ませ、テキストしか見ないメールクライアントのスパムフィルターに引っかかる事態を回避していると思われます。うまくやっているつもりなんでしょうけど、普段からHTML表示を無効にしている人には、意味の無い文字が全て見えて逆に不審度がMaxになる諸刃の剣です。
余計なことばかり工夫する暇があるなら、その頭をもっと役に立つことに使えば良いのにね……。
楽天モバイルが有料化するというニュースが話題になっていました。無料攻勢を続けていましたが、シェアは2%程度でかなり苦戦しているそうです。
携帯電話と言えば今も昔もドコモが強いイメージですが、果たしてその認識は合っているのでしょうか?電気通信事業者協会のデータを元に1996年〜2014年までの契約者数をグラフにしてみました(グラフとまとめたデータはGoogleスプレッドシートにしておきました)。ウィルコムとアステルのデータはなぜか1996/06からしか取れないため、グラフがやや変になっています。ご了承ください。
見事にドコモが強いです。ドコモが絶対王者なのはずっと変わらないんですが、
という具合でしょうか。
たしか国際電信電話(KDD)、第二電電(DDI)、日本移動通信(IDO)の三社合併でKDDIとなったのが2000年で、ブランドスローガンau by KDDIを言い始めたのが2000年か2001年だった気がします。KDDIがドコモを撃ち落とす覚悟の表れだったのかもしれません。
ソフトバンクに目を向けると、ソフトバンクがVodafoneを買収したのが2006年で、ソフトバンクの猛追はそこから始まったんだろうな〜などと想像するとなかなか面白いグラフですね。
目次: 射的
新たな趣味でスピードシューティングを始めました。いくつか大会があるそうですが、私が通い始めたTARGET-1というお店(サイトへのリンク)では「JTSAアンリミテッド」という大会(サイトへのリンク)のルールを使っています。5月末にアンリミテッドの大会があるそうで、大会が終わった6月からはリミテッドという大会(サイトへのリンク)のルールにするとも言っていました。
全コースの合計タイムがスコアとなり(スコアが少ない=早い方が良い成績)ます。銃によりスピードシューティング向き、不向き(※)はあるものの、基本的には好きな銃+ホルスターで参加して構わないです。
個人競技ですから、タイムが遅くても早くても特に誰も迷惑しないのです。個人競技万歳。
(※)いただいたアドバイスによれば、
とのこと。
メモ: 技術系の話はFacebookから転記しておくことにした。いくつか追記。
目次: ゲーム
SteamとEpic GamesとNintendo Switchで買ったゲームプレイ時間の振り返りです。ゲーム名の左端にある数字は「何時間遊んだか?」、その右はゲームプラットフォームを示します。
23個買って、コンプやクリアは7つ、相当遊んだ(ゲームプレイ時間100時間超)と言えるのは4つ(Cities, Dyson, the Hunter, スプラトゥーン2)です。買って半数は最後まで遊ばず、3割は放置同然です。
子供の時はゲーム機が壊れるまで遊んでましたけど、PlayStation 2以降はハードが壊れるより新機種が出る方が早くなりました。もうこの時点でゲーマーから陥落してたのかなあ。
今やゲームを買うが遊ばないという、子供時代の自分が聞いたら「もったいない!」と憤死しそうな、悪い大人になりました。自分の金だから得とか損とかそういう問題は気にしなくて良いんですけど、ゲームを作った人には申し訳ない……。
傾向として、PCゲームのアクション系(Battlefield, DAEMON X MACHINA)、Switchのシミュレーションゲーム(A列車、コロニスト)は諦め率が高いです。アクションはそもそも得意ではないし目が痛くなって疲れるので……諦め率は高めです。むしろ一番苦手なジャンルといえる対戦アクションのスプラトゥーン2を100時間近く遊んだことが奇跡的でした。
Switchのシミュレーションゲームは面白いんですが、画面が狭すぎ&操作しづらいなどゲームとして基本的な部分の出来の悪さに耐えられず嫌になってしまいました。
終わった(実績100%, コンプorクリアなど)
たくさん遊んだ、明確なクリア条件がない、など。
未クリア、飽きた、など。
買ったけどほぼ遊んでいない。
箱庭シミュレーション系が多いのは好みの問題です。
メモ: 技術系の話はFacebookから転記しておくことにした。Switchのゲームを集計に追加。
Twitterで見かけた神奈川から「独立」目指す3政令市、黒岩知事「正直ピンとこない」…初の4者同席協議 - 読売新聞という記事を読んで。
もし3政令指定都市(横浜市&川崎市&相模原市)が抜けたとすると、神奈川県の人口と面積は下記のようになります。
面積もそこそこ減ります(相模原市が人口の割に広いため)が人口も激減します。記事にもある通り神奈川県は横浜市に離脱されると県税が激減するので、賛成する理由は皆無です。
記事にある「特別自治市」構想を知らなかったのでWikipediaを(特別自治市 - Wikipedia)見ると、最近言い始めたことではなくて2010年から何度も出ては消えしていた議論のようです。
さらに古くは1947年制定の地方自治法に定められた「特別市」制度(特別市 日本の場合 - Wikipedia、1956年に削除され、政令指定都市制度に変更)の頃から、大都市は県から独立したがっていました。お互いの言い分は色々ありましょうが、ざっくり言って「税金の取り合い」です。
市と県の言い分は完全に対立しており、何らかの強硬手段を用いない限り永遠に合意されることはありません。今回の神奈川県の場合も、話し合いだけならば流れて終わりでしょう……。お金持ちな都市と貧乏な地方の再配分問題が根底にあって、対立は根深いですね。
大都市圏の地方自治にあたって、国 - 県 - 市という3段ピラミッドのうち、1段抜かして2段に変えるアイデア自体はさほど珍しくありません。やり方としては2種類あるみたいです。
特別区協議会の資料(諸外国の首都の比較 - 公益財団法人 特別区協議会)によると、特別区はロンドンが近い考え方で、ベルリンは1県1市で県と市が合併してますね。特別市はパリが近い考え方でしょう。ワシントンD.C. は他のどの地域とも違いますね。国直轄の特別地域かな……?
他の国を調査したまとまった資料を見つける気力が無かったんですが、東京(特別区)は割と珍しい構造に見えます。特別市タイプを目指す「特別自治市」構想のやりたいことは世界や時流にも合っているのでしょう。たぶん。
目次: ALSA
一覧が欲しくなったので作りました。
厳密にいうとALSA関係ないですが、PulseAudioやmplayerの話もまとめます。
目次: 車
例年であればGWは実家に帰省していて、GWの首都高の様子なんて興味もなければ知りもしませんでしたが、今年のGWは珍しく実家に帰らなかったんです。
しかもGWの初日の今日、間違えて湾岸線の「下り」に乗ってしまいました。当然ながらエラい渋滞にはまりましたが、併走する下道は空いているようで不思議でした。
ちょっと訳あって朝、昼の2回(高速上り、下り&高速上り、下道の下り)走ったためか、渋滞の傾向が良く見えました。首都高1号と湾岸高速の下りだけ1日中ずっと渋滞していました。湾岸線は北関東ナンバーの車で埋め尽くされていましたが、高速の上りや下道のR357、R15(第一京浜)は空いていました。
別の道、中央道と甲州街道を思い浮かべると、高速も下道もどちらも渋滞しそうなものです。たとえばR15(第一京浜)だって、首都高1号や横羽線とほぼずっと併走していますし、渋滞していそうなものですがめちゃ空いていて意外でした。まあ、大田区から向こうは知らないですけど……。なぜ首都高だけ例外なんでしょう、不思議ですね。
どこから来るかにもよりますが、C2や湾岸線下りの混雑を回避するなら、足立区辺りで降りてR4 → 都内 → R15が下道ルートでしょうか?そうするとですね、
自分がもし北関東から来たお父さんホリデードライバーだとしたら、わざわざ降りるか?というと……まず降りませんね!普段運転しないならなおさら嫌です。都内の道なんか考えたくない、もし迷おうものなら家族のブーイングは必至。面倒です。
というわけで「GW初日の湾岸高速は下りのみ2時間以上の渋滞、上りと、下りに併走する下道はがら空き」という役に立たないクソ知識を体得しました。
超どうでも良い!もう二度と使わなさそう!!
目次: ALSA
はるか昔、もう8年も前に見つけたalsa-libのバグ(2014年7月9日の日記参照)、今日見てもまだ直ってなかったっぽいです。激しくノイズが載ってしまう割と致命的なバグですが、発生条件が珍しくてあまり使われないコードのため、未だに誰も直すモチベーションがないと推測されます。せっかく思い出したので、パッチをぶん投げておきました。
パッチの投稿先がわからなくて困ったのですが、どうもalsa-libはGitHubを(リポジトリへのリンク)使っていて、IssueやPull Request管理しているようです。GitHub使ってるんですね。へー。
ALSAはユーザ空間のalsa-libの他に、カーネル空間のコードもあります。カーネル空間のコードはLinux Kernelの一部として開発されています。Linux KernelはGitHubをコード管理に使っておらず、ミラーだけしています(つまりGitHubのPull RequestやIssueは使わない)。
当然ながらLinux Kernelメンテナ達のリポジトリもGitHubではなくgit.kernel.orgに置かれていることが多いです。ALSAのカーネル側コードも例外ではなくgit.kernel.orgの下に置かれて(リポジトリへのリンク)います。
メモ: 技術系の話はFacebookから転記しておくことにした。合併と加筆。
目次: C言語とlibc
前回はtp(スレッドポインタ)レジスタの初期化を調べました。今回はTLSの初期化を見たいと思います。起動時に値が設定されている変数の初期化に関わる部分です。
初期化関数 __libc_setup_tls() ではtpの指す先(__sbrk() で確保したメモリ領域)も初期化しています。しかしこちらは結構複雑です。大雑把に言うと、
このような処理が行われます。コードも見ておきましょう。
// glibc/csu/libc-start.c
STATIC int
LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
int argc, char **argv,
#ifdef LIBC_START_MAIN_AUXVEC_ARG
ElfW(auxv_t) *auxvec,
#endif
__typeof (main) init,
void (*fini) (void),
void (*rtld_fini) (void), void *stack_end)
{
//...
# ifdef HAVE_AUX_VECTOR
/* First process the auxiliary vector since we need to find the
program header to locate an eventually present PT_TLS entry. */
# ifndef LIBC_START_MAIN_AUXVEC_ARG
ElfW(auxv_t) *auxvec;
{
char **evp = ev;
while (*evp++ != NULL)
;
auxvec = (ElfW(auxv_t) *) evp;
}
# endif
_dl_aux_init (auxvec); //★これ★
if (GL(dl_phdr) == NULL)
# endif
// glibc/elf/dl-support.c
void
_dl_aux_init (ElfW(auxv_t) *av)
{
//...
_dl_auxv = av;
for (; av->a_type != AT_NULL; ++av)
switch (av->a_type)
{
case AT_PAGESZ:
if (av->a_un.a_val != 0)
GLRO(dl_pagesize) = av->a_un.a_val;
break;
case AT_CLKTCK:
GLRO(dl_clktck) = av->a_un.a_val;
break;
case AT_PHDR:
GL(dl_phdr) = (const void *) av->a_un.a_val; //★これ★
break;
case AT_PHNUM:
GL(dl_phnum) = av->a_un.a_val;
break;
// glibc/csu/libc-tls.c
void
__libc_setup_tls (void)
{
//...
/* Look through the TLS segment if there is any. */
if (_dl_phdr != NULL)
for (phdr = _dl_phdr; phdr < &_dl_phdr[_dl_phnum]; ++phdr)
if (phdr->p_type == PT_TLS)
{
/* Remember the values we need. */
memsz = phdr->p_memsz;
filesz = phdr->p_filesz;
initimage = (void *) phdr->p_vaddr + main_map->l_addr;
align = phdr->p_align;
if (phdr->p_align > max_align)
max_align = phdr->p_align;
break;
}
//...
/* Initialize the TLS block. */
#if TLS_TCB_AT_TP
//...
#elif TLS_DTV_AT_TP //★★RISC-Vではこちらのコードが使われる★★
_dl_static_dtv[2].pointer.val = (char *) tlsblock + tcb_offset; //★★TLSのアドレス★★
main_map->l_tls_offset = tcb_offset;
#else
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
#endif
_dl_static_dtv[2].pointer.to_free = NULL;
/* sbrk gives us zero'd memory, so we don't need to clear the remainder. */
memcpy (_dl_static_dtv[2].pointer.val, initimage, filesz); //★★TLSに初期データをコピー★★
PT_TLSタイプのプログラムヘッダーがどこに配置されているか?など調べたい場合は、実行ファイルをreadelfで見るとわかりやすいです。該当するヘッダがある場合は、Type欄がTLSとなるはずです。
Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000000000 0x0000000000010000 0x0000000000010000 0x000000000005d944 0x000000000005d944 R E 0x1000 LOAD 0x000000000005e4d0 0x000000000006f4d0 0x000000000006f4d0 0x0000000000002500 0x0000000000007938 RW 0x1000 NOTE 0x0000000000000190 0x0000000000010190 0x0000000000010190 0x0000000000000020 0x0000000000000020 R 0x4 TLS 0x000000000005e4d0 0x000000000006f4d0 0x000000000006f4d0 ★★TLS初期化に使われるセグメント★★ 0x0000000000000020 0x0000000000000068 R 0x8 GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000 RW 0x10 GNU_RELRO 0x000000000005e4d0 0x000000000006f4d0 0x000000000006f4d0 0x0000000000000b30 0x0000000000000b30 R 0x1
PT_TLSが2つある場合はどうなるでしょう?実はPT_TLSは実行ファイルに1つまでなので気にしなくて良いです。プログラムヘッダは同属性のセクションをまとめて1つのセグメントにします。PT_TLSセグメントを1つだけにするには、TLSに関わるセクションを連続して配置する必要があります。
もしTLS関係のセクションを分散させて配置するとリンク時エラーになります。試しにリンカースクリプトを書き換えTLS関係の .tdataと .tbssセクションの間に、TLSと無関係の .dataセクションを挟む形にすると、
riscv64-unknown-linux-gnu/bin/ld: hello: TLS sections are not adjacent: riscv64-unknown-linux-gnu/bin/ld: TLS: .tdata riscv64-unknown-linux-gnu/bin/ld: non-TLS: .data riscv64-unknown-linux-gnu/bin/ld: TLS: .tbss riscv64-unknown-linux-gnu/bin/ld: map sections to segments failed: bad value collect2: error: ld returned 1 exit status make: *** [Makefile:22: hello] エラー1
リンカーに "TLS sections are not adjacent" と怒られました。
SNSの利用者層を語るときTwitterはオジサンばかり、若者はInstagramなどと言われますが、SNSの利用率は総務省が調査していて、情報通信メディアの利用時間と情報行動に関する調査 - 総務省から見ることができます。
令和2年のデータだけを抜き出してグラフにしてみました。結構世代で違うもんですね。
今のところの傾向としてはこんなもんでしょうか。大体イメージ通りの結果でしたが、個人的に意外だったのはニコニコ動画です。ここまで利用者層が若返っているのは意外でした。
私は日本語圏のゲーム系動画を見るならなんだかんだでニコ動が一番面白いと思うので、いまだにプレミアム会員のまま使っていますが、利用者の私ですらもうニコ動には懐ゲー好きのオジサンしかいないのかな?と思っていたくらいでした……。
一昔前、ニコ動のプレミアム会員数が減り始めたくらいから「オワコン」呼ばわりする人達が増えた記憶がありますが、復活したんですね。以前のように皆が戻って来ると良いですねえ。
< | 2022 | > | ||||
<< | < | 05 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | - | - | - | - |
合計:
本日: