mysql2 gemインストールしようとしてld: library not found for -lsslが出たときのメモ

まえがき

bundle installでmysql2がインストールできなかったときのメモ。
以下のログはbrew install mariadbした後だが、元々はbrew install mysql-connector-c+ mysql mysql-clientとかしたあとの状況だった。
ログの中身としてはldでライブラリが見つからん系っぽくて、色々調べたらmysql由来っぽかったので、諦めてmariadbを使うことにしたらうまくいった。

やったこと

  • brew uninstall mysql mysql-client
  • brew install mariadb
  • brew install mariadb-connector-c
    • 初回はこけて、brew unlink mariadbしてから再度brew install mariadb-connector-cをした
  • bundle install

ログ

% bundle
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using ast 2.4.2
Using aws-eventstream 1.1.1
Using aws-partitions 1.482.0
Using jmespath 1.4.0
Using bundler 2.2.15
Using regexp_parser 2.1.1
Using rainbow 3.0.0
Using parallel 1.20.1
Using rexml 3.2.5
Using ruby-progressbar 1.11.0
Using unicode-display_width 2.0.0
Using aws-sigv4 1.2.4
Fetching mysql2 0.5.3
Using aws-sdk-core 3.119.0
Using parser 3.0.2.0
Using aws-sdk-secretsmanager 1.48.0
Using rubocop-ast 1.8.0
Using thor 1.1.0
Using rubocop 1.18.4
Using aws-sdk-rds 1.124.0
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
/Users/ito.shota/.rbenv/versions/3.0.1/bin/ruby -I /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/3.0.0 -r ./siteconf20210818-19563-z2isns.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... no
checking for MYSQL_OPT_SSL_ENFORCE in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... no
checking for MYSQL.net.pvio in mysql.h... yes
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mariadb/10.6.4/lib
-----
creating Makefile

current directory: /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
make DESTDIR\= clean

current directory: /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
make DESTDIR\=
compiling client.c
client.c:787:14: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long
(*)(unsigned long)') [-Wincompatible-pointer-types]
  rb_rescue2(do_send_query, (VALUE)&args, disconnect_and_raise, self, rb_eException, (VALUE)0);
             ^~~~~~~~~~~~~
/Users/ito.shota/.rbenv/versions/3.0.1/include/ruby-3.0.0/ruby/internal/iterator.h:51:25: note: passing argument to parameter here
VALUE rb_rescue2(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE,VALUE),VALUE,...);
                        ^
client.c:795:16: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long
(*)(unsigned long)') [-Wincompatible-pointer-types]
    rb_rescue2(do_query, (VALUE)&async_args, disconnect_and_raise, self, rb_eException, (VALUE)0);
               ^~~~~~~~
/Users/ito.shota/.rbenv/versions/3.0.1/include/ruby-3.0.0/ruby/internal/iterator.h:51:25: note: passing argument to parameter here
VALUE rb_rescue2(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE,VALUE),VALUE,...);
                        ^
2 warnings generated.
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/ito.shota/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/extensions/x86_64-darwin-19/3.0.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
% 

にたようなやつ

github.com www.st1t.com github.com

Webエンジニアが東京都から群馬県前橋市に引っ越したおはなし

まえがき

私はSREとしてフルリモートワークで働いています。
元々は東京都の中野区に住んでいたのですが、縁もゆかりもない群馬県前橋市に引っ越しました。
なぜ群馬県?って聞かれることが多かったり、 グンマー帝国とかネタにされることが多いけど、本当は良いところだよってことを伝えるために書いていきます!!
※ここで記載している私の東京都のイメージは今まで居住、勤務地だった調布、初台、恵比寿、馬込、大崎、品川シーサイド、原宿、六本木、中野、高円寺辺りです。

なぜ東京都から引っ越したかったのか

特別な理由があったわけではないですが、
一番大きな理由はコロナによってフルリモートワーク勤務になったのが一番の理由です。
ただ、コロナの前から以下の理由で東京から離れたいなーとは常々思っていた感じです。

  • 通勤電車がほんとうにほんとうにほんとうにほんとうにつらつらつらつらつらい
    • 大江戸線とか新しめの地下鉄はどうしても地下深くなので上下移動がつらい上に、ピーク時だと山手線より混雑しててアレすぎた
  • 人が多くて道が狭い
    • 自分は元々人混みが嫌いだったが、ここ1、2年で何度も轢かれそうになったことからUber Eatsのイメージがとにかく悪い
    • ただ、冗談半分でよく言われる東京に住んでて著しく治安が悪いと感じることはほとんどなかったように思います
      • 歩いてて怖いなーと思ったのは新宿歌舞伎町近辺くらいですねぇ、夜にTOHOシネマで映画見て間違えて東新宿方面彷徨ってた時は怖かったですw
  • 家賃が高い
    • 高円寺駅から徒歩15分くらいでしたが、1LDKで13万ちょっとしてました
      • これは、オートロックや鉄筋コンクリートといったものが関係してたと思います
  • 飲食代が高い割には微妙なところが多かった
    • 個人的には恵比寿ガーデンプレイス近辺はしんどかったです。恵比寿駅の東口だとそうでもないお店も点在してるのですが、ガーデンプレイスからだと地味に遠くて大変でした。ただ、石川亭、とりなご、ちょろりのチャーハンは良かった。ちょろりとか深夜メンテ明けの客がいない時間帯でも常に複数人体制で素晴らしいなと思ってました
      • 一方、六本木ヒルズ近辺は幸楽苑や真希みたいに比較的安価なお店や、お値段そこそこで美味しい柿之木や黒猫夜、高くて美味しいところもあってピンキリを選べて良かった。
  • スーパーがまいばすけっとに支配されがち
    • 東中野辺りだとライフがあったので良かったけど、都内はどうしても土地が不足してるせいかまいばすけっとに支配されがち
  • 駅から家まで1kmちょっとはあったので歩くとなんだかんだ15分はかかって駅まで近いわけでもないので不便でもないが便利というわけでもなかった
    • 駅に隣接する駐輪場は、駅から遠い割には1日数百円するところが多いし
    • 当然スーパーや薬局の類も自宅から行くと15分くらいはかかる
  • 仕事以外で東京を満喫するようなタイプでもないので家賃の高い東京にいる意味もほとんどなかった
    • 週末は映画や洋服を買ったり、クラブに行ったりみたりな陽キャでもないので
      • 家電は基本的には通販
        • 実店舗は実物を見に行きたい時くらい
      • 飲み会は月に1回行くかどうかくらい
      • 週末はネトフリや漫画、テックブログや技術書を読んで試すことが多い
      • 外に行くのは、スーパー・薬局・本屋くらい

なぜ群馬県前橋市にしたのか

  • 日照時間が日本の中でも過去30年間で3位になるくらい長い。四方八方が高い建物に囲まれて日当たり不良はもう嫌
  • 下仁田ネギが好きで、時期にもよるがスーパーで手に入りやすい。すき焼きに入れるとトロトロで最高
  • 優劣つけがたかったが、群馬の中でも前橋が自然と街の調和具合が自分の中でしっくりきた

というのは(後付けでしたが)良かったところですね。
今でもとても良い選択だったなと思っていて、
将来仕事の都合で引っ越したとしてもずっと忘れたくないし、またいつか来たいなーとは思っています。

前橋にした決め手は、
せっかくなら全く知らない土地のほうが面白そうということが決め手だったりしています元も子もないですね
ざっくり検討した流れを書いておくと

  • 神奈川県:出身で見知った土地なので、家を買う時には戻ると思うけど今じゃない
  • 埼玉県:人が多い、湘南新宿ライン沿いは荒川と利根川に挟まれてハザードマップ的に避けておきたかった
  • 千葉県:房総エリアは検討したけど、海ほたるエリアでよく遭遇した暴走族のイメージがあったので千葉県自体を避けた
  • 群馬県高崎駅:新幹線が止まるだけあって人が多い、イメージ的には神奈川県の小田原駅に近いかも

前橋駅近辺ってどんなところ?

前橋市全体を紹介していきたいですが、
今回は前橋駅近辺に住むことを前提に駅の近辺の施設を紹介していきます。

前橋駅から1km圏内(徒歩15分/自転車5分)

f:id:st1t:20210501203745p:plain

無料の駐輪場

駅の東側で、駅から歩いて3分くらいのところにあります。

https://www.city.maebashi.gunma.jp/kurashi_tetsuzuki/5/4/1/10671.html

けやきウォーク

いわゆる大型のショッピングモール。広すぎて引っ越し当初来た時は車を止めた場所がわからずに40分くらい彷徨った
大型なのに駅から歩いても10分程度で着く高立地なショッピングモール。
映画館、ゲームセンター、紀伊国屋書店、100均(Seria)、無印良品、飲食店等々が入っているのでウィンドウショッピングとかに丁度よいです。

www.keyaki-walk.com

ただし、以下の店舗は意外と品目が少ない印象。

  • LOFT
  • マツモトキヨシ
  • ケーズデンキ

最近、けやきウォークにガチャガチャ専門店が出来たみたいなので、地味に楽しみにしています!

maebashi.goguynet.jp

TSUTAYA BOOKSTORE アクエル前橋

昨年末に前橋駅の目の前にオープンしたお店。
レンタルは一切ないですが、店内は広々したお店で本、文房具の扱いがメイン。
面白いのは、おしゃれな雑貨や、地方の名産品を扱ってる点。

prtimes.jp

カーシェア@タイムズカー

私は未だに車を持たずに、電動自転車をそのまま使って生活してます。
それでほとんどの場合は済むのですが、ニトリに行ったりドライブするときはカーシェアを使うようにしています。
車社会とはいえ、意外と前橋駅近辺は観光客向けなのか数箇所あるので今のところは困ることもないです。

f:id:st1t:20210501222105p:plain


前橋駅近辺ってどんなところ?@飲食店編

前橋近辺は一見お店が全く無いように見えるのですが、
よくよく調べるとちらほらあって、クオリティが高いお店が多くて、これが一番私は嬉しいポイントでした。

リバーズミート

量と値段が一致してない凄いお店。
メニューを見ると唐揚げ弁当とか4つくらいしか入ってないように見えますが、実物は鶏もも1枚がっつり使ってるんじゃないのかというくらい大きいです。
それに加えてサラダもきちんと付いてきてワンコインで美味いのは本当に凄いです。
f:id:st1t:20210502115724p:plain

もちろん他の炭火焼きローストポークとか、上州牛 炭火焼サーロインステーキ弁当とか高めのやつも美味いのでオススメ。

https://rivers-meat-deli.com/wp-content/uploads/tirashi.pdf

以下は、上州牛 炭火焼サーロインステーキ弁当とオニオンリング、おいしい f:id:st1t:20210501221224j:plain

ピッツェリア・ペスカ

テレビでドレッシングが紹介されて有名なお店ですが、
ドレッシングよりピザがうまいのでぜひ食べてみてほしいやつです。
オススメはジェノベーゼで、ランチセットで1,500円近くするので少しお高め。
セットで頼まなくてもピザだけなら1,000円くらいだったのでそれで良いかも。

f:id:st1t:20210501210440j:plain

焼肉 千味庭 前橋五差路

タイミングにもよりますが、自分がよく行ってた時は上州牛かどこだったかの切り落としセットがランチで1,000円くらいで食べれたのがめちゃくちゃお得でした、うまい。 f:id:st1t:20210501204711j:plain

親方ホルモン

甘めのタレで、焼肉にしては比較的リーズナブルでクオリティ高めのお弁当を買えるお店。

f:id:st1t:20210501221517j:plain

以下は、はみ出る 赤城牛カルビ弁当 f:id:st1t:20210501221428j:plain

登利平

https://www.torihei.co.jp/store_detail01/

群馬県民だと言わずと知れたお店。
群馬県内の会議や運動会のときはかなりの高確率で鳥めしが出るとか。
もちろん私も何度か食べたことはありますが、鳥めしより、この写真の唐揚げと鳥のフライっぽいやつをソースに付けて食べる鳥合わせ定食を頼んでほしい、まじで。
唐揚げはシンプルな味付けながら肉汁があふれるし、鶏皮もパリパリだし、フライっぽいやつもソースに付けて食べるとほんとうまい、まじでうまい。

f:id:st1t:20210501221748j:plain

これは鶏の唐揚のお弁当。
このときはお試しで鶏皮の唐揚げが付いてきた、黒胡椒を強めに効かせたらうまかった。 f:id:st1t:20210501222658j:plain

そして、うちからだと登利平のホームページは403エラーになってしまったり。
多分、IPを管理してる国情報がEUになってるからGeoIP辺りを使って弾いてるんだと思うんだけど、地味に困ってます。。。
自宅のネット環境がtransix使ってるっぽいからインターリンク経由でインターネットマルチフィード社にWHOIS修正してってお願いするのが筋なのかなぁ、めんどい。
前に登利平の社長室直行お手紙に書いたけど変わらないってことは国別でアクセス禁止は変えるつもりがなさそうな気もしてる。
GDPRとか意識してるんだろうか、それならそれはそれで凄い。

f:id:st1t:20210502004230p:plain

その他

  • マクドナルド
  • プロント
  • 横浜家系ラーメン 湘家
  • ローソン
  • セブンイレブン

前橋駅から離れるけどオススメのお店

角上魚類(かくじょうぎょるい)

海なし県どころか、海を売りにしてる市場並か、それ以上に鮮魚の扱いがめちゃくちゃ多いです。
Googleの画像検索が一番手っ取り早い感じがしたのでぜひ一度見てもらいたい、本当すごい。

www.google.com

公式サイト。私は知らなかったですが東京や埼玉にもいくつか店舗があるみたいですね。 www.kakujoe.co.jp

ベイシア

map.beisia.co.jp

大型のスーパー、東京・神奈川だとライフやサミットみたいなイメージ。
店舗面積広めで、常食するときに良さそうなお値ごろな海外産のお肉とか、不安になるくらい安いスーパーのお弁当とか売ってたりする。
たいめいけんと協力してるデミグラスハンバーグ弁当がなぜか380円くらいで売ってる、もうちょい値上げしてもええんやで?と不安になるけど普通に食べられる。

麦と米

tabelog.com

伊勢うどんのお店で申し訳ないのだけど、ここは兎にも角にも梅の鶏天がめちゃくちゃうまいので食べてみてほしい。
ぶっちゃけ大分で食べたときより全然うまかった。
値段も比較的リーズナブル。
ただ、持ち帰りにすると蓋がガバガバで伊勢うどんのタレがほぼ100%溢れて、付いてくる割り箸が使えなくなりがち。
いつか溢れないように持ち帰るスキルを身につけたい。

f:id:st1t:20210501223052j:plain f:id:st1t:20210501222945j:plain

白虎

tabelog.com

大友町にあるお店。
※県庁の隣りにある県警本部の地下でも食べられるみたいだけど、そっちはまだ行ったことない
ここはそば粉が信州か会津か選べる上にお値段も比較的リーズナブル。
写真のやつは鴨南そばで1,000円ちょっとして高めだったけど、もりで680円、ざるで730円。
人気のお店なので行くなら平日であっても開店ダッシュしないと待つことになるから注意。

f:id:st1t:20210501224532j:plain

WEBエンジニアから見たときの前橋

専門書がほしい

自分の場合は大きく分けて2店舗で見て回ってます。

紀伊国屋書店@けやきウォーク

オライリー棚や、この写真以外にも1列分くらいはPHP/Ruby/C++と言った言語の書籍がちらほらおいてあるので新刊やメジャーな本だとおいてあったりします。

f:id:st1t:20210501211830j:plain

ブックマンズアカデミー

前橋駅からは少し離れているものの、店舗面積の割に紀伊国屋書店に近い程度にWEB系の書籍を取り扱っているお店。

www.e-hon.ne.jp

ネットの速度どんな感じ

自宅はマンションですが、Radish Network Speed Testingで計測するとブログ執筆時点(2021年5月1日 21時29分)で無線LANを使って以下の通り。
平日昼間だと220Mbpsとか出てたと思うので、docker pullとかしても困らない程度には早いです。

netspeed.studio-radish.com

f:id:st1t:20210501213120p:plain

参考までにNW環境は以下の通り。

  • NTT フレッツ 光ネクスト ギガマンション・スマートタイプ
  • インターリンク ZOOT NATIVE
  • NEC Aterm WX3000HP

5G対応予定

Docomoのahamoを使ってますが、当たり前ですが、通常利用の電波は問題ないです。
では今後5G対応予定がどうかというと、Docomoだと6月末で駅前と県庁周辺地域は対応していくようですね。

f:id:st1t:20210501214431p:plain

個人的には都内のほうがお店が地下にありがちだったりするので、そっちのほうが携帯の電波が繋がりにくかったりするということが多かったですね。

後述しますが、前橋市はスーパーシティ構想の特区申請を行っており、その中でローカルな5Gネットワーク構築して自動運転等に活用することや、
選挙のオンライン投票を計画していたりとデジタル面で進んでいる印象があります。

都内に出る時はどんな感じ

フルリモートとはいえ、都心に出ることがまったくないわけではありません。
私は神奈川県の小田原市の会社に所属しているので、前橋から出社する時は新幹線利用であっても2時間近くかかります。
ただ、コロナの影響もあって今は数ヶ月に1回程度、コロナが終わっても月に1、2回ほど交流目的で出社するくらいで、逆に言うとこれ以上の頻度だと新幹線が止まる高崎でもギリギリだと思います。

f:id:st1t:20210501215138p:plain

新宿や品川だとこんな感じ。
新幹線を使うので実は小田原も新宿も品川も時間的にはあまり変わらない、というかむしろ新幹線のほうが設備的に小田原のほうが楽ですねw

f:id:st1t:20210501215357p:plain f:id:st1t:20210501215440p:plain

twitterでフォローしておくと良さそうな方々

ぐんまちゃん

本当可愛い、お布施したい、ツイートのメッセージが純粋で可愛らしくて心が洗われる。 twitter.com

高崎前橋経済新聞

新しいものが出る時は大体ここから情報を仕入れている。恵比寿新聞的なイメージ。 twitter.com

前橋市シティプロモーション

お得な情報や、へーこんな場所あるのかーと前橋を知れるので結構ありがたい。
twitter.com

直近だとバラ園が見頃で、しかも無料というわけわからない状態になってるのを初めて知れたありがたい

群馬のクチコミ情報サイト「ぐんラボ!」

前橋市シティプロモーションの群馬県版みたいなイメージ。 twitter.com

前橋市の良いところ

土地が平坦

前に大田区の東馬込に住んでたのですが、地味に結構な山を登らないと大崎駅や品川シーサイド駅にたどり着かなくて大変でした。
前橋駅というか、群馬県は山にでもいかない限り市街地はびっくりするほど平坦なので、自転車族としてはとてもありがたい土地です。

自然が多い

前橋駅から歩くと少し距離がありますが、ヤマダグリーンドームの方面までいくとむちゃくちゃ広くて人が少ない公園があります。
この地図でいうと、左上の緑色の部分が公園なのですが、見ての通り、駅やショッピングモールのけやきウォークよりでかいです。
この近辺を走ってるのですが、風が死ぬほど強いけど周りに人も何もないので走りやすくてめちゃくちゃ良いです。 f:id:st1t:20210501231352p:plain

右側の建物がヤマダグリーンドームで、利根川沿いに走る道も整備されてます。 f:id:st1t:20210502105804j:plain f:id:st1t:20210502110120j:plain

野菜が新鮮・安いものが多い

これはAコープ JAファーマーズというお店なのですが、
生産者の方が直接卸していて野菜が新鮮だったり、ものによってはめちゃくちゃ安かったり、クオリティが高かったりして好きなスーパーです。
イメージとしては道の駅のスーパー版みたいなものです。

www.acoop-east-t.jp

f:id:st1t:20210502110209j:plain f:id:st1t:20210502110228j:plain

ソフトクリームも売っていた

今まで全く気が付かなかったのですが、
神津牧場のソフトクリームがAコープに売ってて、280円なのに牧場で食べるやつ並にうまくて大きいし、めちゃくちゃオススメでした!!!
食べた後に写真取ってないこと気が付きました・・・

ちなみに、神津牧場さんは発酵バターを作られてることでも有名なところで、今度試してみたいですね。

www.kouzubokujyo.or.jp

f:id:st1t:20210504195155j:plain

(前橋駅近辺なら)車がなくても意外となんとかなる

ここまでで色々紹介してきました通り、意外と歩ける距離に飲食店やショッピングモール、スーパーがあったりします。
もちろん車があればさらに良いのは言うまでもないですが、車がなくても自転車さえあれば都内に住んでてスーパーに行くのに片道15分かけて行くときと何も変わらないくらいの温度感で過ごせています。

(良くも悪くも)歩いてる人がほぼいない

車社会なので、基本的に歩いている人は県庁周辺ですら通勤時間帯を除けば皆無です。
これは県庁近くの国道17号線にある群馬大橋ですが、見ての通り視界に人が皆無です。 個人的にはメリットなのですが、女性だと夜に一人は怖いというのはあると思います。

f:id:st1t:20210502110332j:plain

家賃が安い

後述しますが、都内と比較すると賃貸のマンションの設備はイマイチかもしれません。
ただし、そこを除けばオートロック付き2LDKで8万円とか、場所や設備条件を緩くすればもっと安いところも多数あります。

前橋市の不便なところ

歩道と車道の段差が激しい

歩道が整備されてないとかではないのですが、
歩道と車道の境目の段差がどこいっても4、5cmあるんじゃないかというくらいガッタンガッタンするので、気をつけないと自転車はパンクすると思います。

風が台風並みに強い

これは恐らく前橋市特有っぽいのですが、本当、もうむちゃくちゃ風強いです、まじで。
今は慣れましたが、冬場の夜にランニングしてるときは全力疾走しないと汗が風で乾いていきますw
天気予報とか見ていても比較的風が落ち着いてきた今の時期でも割とカジュアルに6m、7mとか出てくるので風の街ですね。

気軽に魚を食べる場所が少ない

そもそも海なし県だし、都内でも割とそうだったのですが、
美味しいお魚をカジュアルに定食で食べられるお店が少ないかなーとは思っています。
ただ、前橋駅の近くにみやたやという有名なお店もあって、そこが評判よさそうなので近いうちにお邪魔してみたいです。

tabelog.com

ちなみに、海なし県ではあるのですが、都内で魚を食べるよりなぜか群馬のほうがクオリティ高い傾向にあります。。。
飲食店はともかく、都内のお高めのスーパーでマグロや鯛、ブリ等々のお刺し身を買って食べるけど、ハズレを引くことが多かったです。
ベイシアでお魚を買っても今の所、臭くて食べられないという経験はしてないです。

賃貸のマンションの設備が整ってるところが少ない

今の家を探す時に、高崎も一応見てみたものの、

  • オートロック
  • 鉄筋コンクリート
  • 24時間ゴミ出し
  • 宅配ボックス

この条件を満たす物件は賃貸だと壊滅的でした。
特に、24時間ゴミ出し、宅配ボックスは需要がないのか見当たらなかったので両方共諦めました。
オートロックもかなり少なかったです。

1店舗あたりの敷地面積や品揃えは良いけど、店舗同士が散らばってて行きづらい

けやきウォークは例外として、スーパーと薬局がドラゴンボールのごとく四方八方にちらばってるので行きづらい。
ただ、これは地方あるあるで車社会だとそもそも離れててもそんなに気にならないというのがあるんだと思ってます。

スーパーシティ構想

多分これを読んでる人のほとんどは知らないと思いますが、前橋市は国が公募している「スーパーシティ型国家戦略特別区域」に応募しています。
www.city.maebashi.gunma.jp

資料を見ているといくつか具体的にやりたいことが記載されていますが、
目玉になりそうなのは選挙のオンライン投票かなと思っています。

資料としてはこの資料がよく出来ているので、興味ある方は一読されてみると良いかなと思います。

https://www.city.maebashi.gunma.jp/material/files/group/8/gaiyouban_SCteiansyo.pdf

全体を通して

住んでみた感想としては、

  • 人が多いことのストレスがなくなった
  • 運動しやすい環境にいることによって通勤時代よりむしろ運動できるようになった
  • 意外と車がなくても生活できる
    • たまに聞いてたけど、車社会じゃない都民のほうが歩く習慣があるだけに、場所を選べば車がなくても都内より快適に生活できる
  • 高崎のパスタは最近テレビで見るようになったけど、群馬は温泉以外にも充実してるよというのがアピールしきれてないのはもったいないなと思った
    • グンマー帝国はネタにはなったけど、むしろあれのせいで群馬の過剰な田舎のイメージがついて回ってる気がする
  • 流石にそろそろブログ書くのが疲れたので紹介しきれなかったけど、
    • 他にも良い飲食店はまだまだある。高崎のはらっぱ、シャンゴ等々
    • スキー場まで車で1時間でサクッといける。それも複数ある
    • 新潟県の南魚沼まで車で1時間でサクッといける
    • 長野方面も軽井沢まで1時間ちょっとでいける

MySQL接続でSSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocolが出たときの対応

まえがき

MySQLへの接続で、ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol というエラーが出たときのメモ書き。
エラーの内容はssl_choose_client_version:unsupported protocolって書いてあるので、恐らくクライアント側で選択されているTLSのバージョンが新しい or 古くて許容されてないだけっぽい。
ぐぐると、update-crypto-policies --set LEGACY で解決した方もいたみたいだが、自分は解決しなかった。

環境

  • Ubuntu:20.04
  • mysql-client: mysql Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 *1
  • DB側の設定やバージョンは省略

ログ

$ mysql -u db_user -h db_host -p
ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
$

対応

そもそも手元の開発ではtlsにしなくて良い&してないので、--ssl-mode=DISABLED ででなくなった。

$ mysql -u db_user -h db_host -p --ssl-mode=DISABLED
Enter password:
ERROR 1045 (28000): Access denied for user 'db_user'@'X.X.X.X' (using password: YES)
$

参考

*1:Ubuntu

ImageMagickとmulticropコマンドで1枚の画像を空白区切りで分割してみる

まえがき

友人から複数枚の画像を1枚の画像としてスキャンしたものをいい感じに分割する方法がなさそうか困っていそうだった。
見てググって出てきた内容は今後使う時がありそうな気がしたのでメモを残しておく。

やりたいこと

こういう1枚のスキャン画像に複数枚の画像がまとめられている。
これを1枚ずつ分割して保存したい。
以下の例でいうと、4分割してimage-1.png, image-2.png, image-3.png, image-4.pngといった具合に分割保存したい。

f:id:st1t:20200604223202p:plain

調べた結果

ImageMagickをラップしたmulticropというスクリプトを使うと良さそう。

www.fmwconcepts.com

インストール方法

ImageMagick

imagemagick.org

multicrop

以下公式サイトの Download Script からダウンロードして実行権限と付与しておく。
Fred's ImageMagick Scripts: MULTICROP

multicrop依存のもの

REQUIREMENTS: If using unrotate method 2, then my script, unrotate, is required. If using innertrim, then my script, autotrim is required.

作者の別のスクリプトも必要みたいなのでダウンロードして実行権限とpathを通しておく。
今回はunrotateだけあれば動いたのでそれだけ紹介。

Fred's ImageMagick Scripts: UNROTATE

実行コマンド

f:id:st1t:20200604223202p:plain

↑の画像をtest-image.pngとして実行。

$ ./multicrop -b white test-image.png image.png

Processing Image 0
Initial Crop Box: 220x188+37+41

convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `image-000.png' @ warning/png.c/MagickPNGWarningHandler/1748.
Processing Image 1
Initial Crop Box: 220x188+309+41

convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `image-001.png' @ warning/png.c/MagickPNGWarningHandler/1748.
Processing Image 2
Initial Crop Box: 220x188+37+279

convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `image-002.png' @ warning/png.c/MagickPNGWarningHandler/1748.
Processing Image 3
Initial Crop Box: 220x188+309+279

convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `image-003.png' @ warning/png.c/MagickPNGWarningHandler/1748.

$ 

実行結果

以下のように4分割されて出力された。
ただ、実際はスキャン画像の解像度や色によって画像と画像の間の部分を認識する精度がそのままだとでなさそうだった。
この辺はmulticropのパラメータを調整してみる必要がありそう。

f:id:st1t:20200604225226p:plain

SlackでLegacy BotでRTM APIを使うためのSlack Appの追加の仕方

まえがき

SlackでReal Time Messaging API(RTM API)を使いたい時があったが、
今(2020/05/28現在)だと通常のSlack APPだと動かないため、Classic Slack Appを作ってRTM APIを使えるようにするためのメモを残しておきます。

RTM APIとEvents APIについて

今はRTM APIと似た挙動をするAPIとしてEvents APIというものがあります。

RTM APIについて

api.slack.com

Events APIについて

api.slack.com

RTM APIとEvents APIの使い分けについて

以下リンク先の When should I use the Events API and when should I use the RTM API? を見ると良さそうです。

api.slack.com

Classic Slack Appの作成

以下リンク先から作成できます。

api.slack.com

legacy bot userの追加について

Features -> App Home -> Add Legacy Bot Userから追加 f:id:st1t:20200528130611p:plain

tokenについて

f:id:st1t:20200528131641p:plain

f:id:st1t:20200528131819p:plain

tcpdumpの使い方

まえがき

tcpdumpの使い方、TCPヘッダフラグの位置、その他雑多なものをメモしておく。

tcpdumpのよく使うやつ

やる前に気をつけたほうが良いこと

  • 何のため、どういう状態であると仮定してを意識してから取得する
    • 闇雲にとってもパケットおじさんじゃないと多分難しい
    • ex. トラブル対応で特定のリクエストのコネクションの状態を確認するため
      • APPサーバの処理時間は短かかった。WEBサーバのアクセスログの処理時間は長い
      • sarの毎分の状況からWEBサーバのログ。システム負荷状況は問題なさそう(秒単位では待ちがある可能性はある)
      • LB - WEBサーバ / WEBサーバ - APPサーバのコネクション確立から閉じるまでで待ちが発生していると仮定
      • そのため、KeepAliveを切った上で、LB - WEB / WEB - APPの2つのコネクションの処理状況を調査する
      • NW的に問題がなさそうであれば、LinuxKernel/Middlewareの設定やバグが疑われるため、straceを用いてコール状況を確認する
  • 負荷に要注意
    • アクセスログの処理時間/ステータスコード
      • 基本的にはインターネットに一番近いところのログを確認する
      • AWSのELBログならElasticのfilebeatで突っ込むのが非常に楽で良い
      • www.elastic.co
    • システム負荷: dstat -af
  • KeepAliveを使ってると後でパケットを眺めるときにしんどいから、デバッグするときはリクエスト数を薄めて切ったほうが良い

コマンド

# 80ポートを60秒ごとに、ファイル名にタイムスタンプ入りで取得。-Zはローテートしたときにファイルのユーザーを指定
$ tcpdump -s0 -i any -A port 80 -G 60 -w tcpdump_%Y%m%d_%H%M.cap -Z root

# ↑のやつをバックグラウンドで回し続ける
$ tcpdump -s0 -i any -A port 80 -G 60 -w tcpdump_%Y%m%d_%H%M.cap -Z root > /dev/null 2>&1 &

tcpdumpでflagを指定する

f:id:st1t:20200520005831p:plain

↑の例でいうと

Ack: 16
Push: 8
なので、16 + 8 = 24
$ tcpdump 'tcp[13] = 24'

tcpdumpで色んなtcpヘッダーを指定するときの早見表

f:id:st1t:20200525224637p:plain

Wiresharkの使い方

filter

# Warning or Errorパケットを探す
_ws.expert.severity == "Warning" or _ws.expert.severity == "Error"
# 

URLとかでざっくり検索する

Command + Fで検索画面を出して、ドロップボックスをStringにしてキーワード検索できる

f:id:st1t:20200520002752p:plain

multipart/form-dataのデータを確認する

デフォルトの設定だとエンコードされてるので、右クリックして設定すると見えるようにする ※基本的には暗号化されてるので開発環境等でのデバッグ用 f:id:st1t:20200520000026p:plain

参考

TCPヘッダオフセットについて

serverfault.com www.packetlevel.ch

コピペするときによく使うやつ

blog.livedoor.jp

ELBアクセスログをElasticsearchに突っ込んだ後にPainlessでクエリストリングを除外したフィールドを追加する

まえがき

https://hoge.com?hoge=hogehoge&fuga=fugafuga みたいなアクセスログをそのまま集計するとクエリストリングが邪魔でほぼユニークなリクエストになる。
そのため、Painlessを使って https://hoge.com として表示するフィールドを追加する。

ELBアクセスログのElasticsearchへの投入

www.elastic.co

betaなのでクリティカルなところでは考えたほうが良いが、これ使っておけば間違いない。
ELBアクセスログを集約していれば大体2,30分もあれば慣れてる人ならサクッと導入できる。
しかもELBアクセスログ発行 -> S3 -> SQSの流れは全てAWSがやってくれるからいちいち細かいことを気にしなくて良い。
filebeatはSQSにデータを取得&Elasticsearchにpushするだけだし、本当に便利。

最初はLogstashのpatterns-coreにあるからそれでよいかと思ったが、 パターンが古くて駄目っぽい。
また、PRの反応も最近は薄そうなのでそのへんも加味して使うのを辞めた。

github.com

画面

f:id:st1t:20200522125242p:plain

実際のコード

def v_size = doc['http.request.referrer.keyword'].size();
if (v_size == 0) {
    return "path size is 0";
} else {
    def path = doc['http.request.referrer.keyword'].value;
    if (path != null) {
        int lastSlashIndex = path.lastIndexOf('?');
        if (lastSlashIndex > 0) {
            return path.substring(0, lastSlashIndex);
        } else {
            return path;
        }
    }
    return "path is null";
}