- blogs:
- cles::blog
Ruby 3.0.0 がリリースされてた
ruby しばらくウォッチしていないうちに Ruby 3.0.0 がリリースされていました。
Ruby 2.7 からの変更がいろいろとある*1ので、時間をとって確認する必要がありそうです。
Ruby 3.0系初のリリースである、Ruby 3.0.0 が公開されました。
php + MariaDB で Malformed communication packet というエラーが出るときは
mysql
php
centos7 今日は朝から php + MariaDB の環境で以下のエラーが発生して困ってしまいました。
Malformed communication packet というエラーは初めて見たかもしれません。
† MariaDB をダウングレードして暫定対処
原因としては MariaDB のバージョンアップに起因するようなので、以下のように MariaDB をダウングレードして暫定対象しました。
† 同じ話題が Stack Overflow にも
以下の Stack Overflow のエントリににもあるように、意外と同じところでハマった人は多いようです。
これを見ると PHP 7.3 では発生しないという話も出ているので PHP 7.1 と最新版の Maria DB の問題みたいですね。
mysql2 をスレッドセーフに
ruby gem mysql2 をマルチスレッドで使っていたら、以下のようなエラーがでて困ってしまいました。
どうやら mysql2 はスレッドセーフではないことが原因の模様。
いろいろと調べてみたら、MutexLockedQuerying*1というモジュールを書いている人を見つけたので、ちょっと改造して取り込んでみました。元の実装だとクラス変数を使っているのでロックがインスタンス単位ではなく、グローバルにかかってしまうので、インスタンス変数に変更してあります。ロックの粒度的にはこちらの方が望ましいはずです。
gem mysql から mysql2 に移行してみる
ruby
mysql 昔書いた Ruby のプログラムを CentOS 7 上で動かそうとしたのですが、MariaDB が 10.4 と比較的新しいバージョンだったので gem で mysql がインストールできないので困ってしまいました。
mysqlを見ると、最終アップデート日が 2013 年になっていて、最近はメンテナンスされていないようです。このまま粘っても解決の見込みも立たないので、mysql2 に移行してしまうことにしました。
† ソースの書き換えは大きく3箇所
基本的には以下の3箇所を変更してやれば、基本的な動作はするようです。
Date などの部分を自動的に cast する機能がついたようですが、これは :cast => false でオフにしてあります。
Laravel でパスワードを忘れたときの再設定方法
php
laravel Laravel の Auth を使うとパスワードは DB にハッシュ化された状態で格納されます。
これはこれでセキュリティのために必要な挙動なので、これに文句を言うつもりはありません。
しかしながら、例えば管理者用のパスワードを忘れてしまい、DBを強制的に上書きしてログインしたいような場合、このハッシュがどのように作られているのか分からないとお手上げです。今日はまさにそんな状態に陥ってしまったので、解決方法を調べてみました。結論から言うと、以下のようにインタラクティブな php (artisan の tinker)を起動して、プログラムで DB を書き換えることができます。
これだと一撃で実行できるので、楽ちんです。
[Laravel でパスワードを忘れたときの再設定方法 の続きを読む]
CentOS 7 + MariaDB の組み合わせで gem mysql2 がエラーになるときは
ruby
centos7
mysql CentOS 7 に MariaDB をインストールして、Ruby の gem mysql2 実行したらエラーになってしまって困ってしまいました。
エラーメッセージを読む限りリンカのエラーのようなので、もう一度良く MariaDB のインストールを確認したら MariaDB-shared が入っていないのが原因だったようで、以下のコマンド1行で解決でした。MariaDB-devel だけでいけると思っていたのが、勘違いでしたね。
† CentOS 7 への MariaDB のインストール
ハマらないように次回からは以下のような感じでインストールすることにしようと思います。
PHP の内容を AST で解析する
php
softwareengineering
tutorial PHP のファイルが静的解析したくなったので、ソースから AST を得る方法を調べてみました。
以前、Eclipse の ASTParser を使う話を書いたことがありましたが、それの PHP 版になります。
今回の作業にあたって、以下のスライドがとても参考になりました。
PHP は 7 になってから内部的に AST が利用されているため、以前よりも AST を得るのは簡単になっています。
既に以下のような extension が提供されているので、いずれかをインストールすれば大丈夫です。
- nikic/php-ast: Extension exposing PHP 7 abstract syntax tree
- sgolemon/astkit: Parser kit for PHP7 ASTs
今回はマニュアルが充実している前者の nikic/php-ast を入れてみることにしました。
以下、構築メモになります。
IPアドレスのリストからCIDR表現を作る(Ruby編)
ruby
networking 大量の IP アドレスの始点と終点の組(例えば 192.168.0.0~192.168.0.255 のようなもの)組を上手に纏めて CIDR 表現を作る必要があったので、Ruby でスクリプトを書いてみました。
IP アドレスの範囲を扱うのに altmetric/ip_ranger 、IP アドレスの集約に ipaddress-gem/ipaddress を使っているので、あらかじめ gem install ip_ranger ipaddress でインストールをしておきます。
コード的にはこんな感じでしょうか。
ip_summarize.rb
実際の実行してみると、こんな感じになります。
IP の範囲は標準入力から1行毎にカンマ区切りで開始,終了のような感じで与えています。
Ruby 2.6 から JIT コンパイルが可能に
ruby JIT コンパイラが搭載された Ruby 2.6.0 の Preview 版が公開されました。
Java やその他の言語と違って、C 言語のソースコードを生成してコンパイルする方法を取るようです。
ちょっとどんな感じで動作するのか気になりますね。
[ruby-dev:50555] Ruby 2.6.0-preview2 Released
Ruby 2.6ではJIT (Just-in-time) コンパイラが導入されました。 JITコンパイラはあらゆるRubyプログラムの実行を高速化することを目的としています。 他言語の一般的なJITコンパイラと異なり、RubyのJITコンパイラはC言語のソースコードをファイルとしてディスクに書き、通常のCコンパイラを用いてネイティブコードに変換することでJITコンパイルを行うという手法を用いています。(参考: https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch#mjit-organization)
ActiveRecord で ROW_FORMAT=DYNAMIC を自動でつけるようにするには
ruby
mysql ActiveRecord でテーブルが CREATE TABLE されるときに、ROW_FORMAT=DYNAMIC を自動的に追加する方法を見つけたのでメモ。
とりあえず RAILS_ROOT で以下のシェルスクリプトを流せば OK です。
† 参考
- sadpkv
- CACHEMANAGER.phpというのはどうだろうかと
- pairb1m
- Lightning のToDoリストを複数のPCで共有できるアドオン
- majodca
- 九州旅行から帰ってきました
- majodca
- 九州旅行から帰ってきました
- hot534
- yum を使って OpenVPN をインストールする
- dresssu3
- NP_Trackbackを騙るトラックバックspamについて
- zippern7o
- NP_SpamBayesJP jp1b
- park81o
- Google Docs をメールフォームとして使う
- fogmpl
- なんで官庁の文章はPDFなんだろうか
- cutjw9
- 即席スライドショーを作る
- frightenlho
- 添付ファイルの容量を表示する「Attachment Sizes」
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(5063)
3 . GitHub が全ての公開リポジトリへのシークレットスキャンを有効に(4199)
4 . 年次の人間ドックへ(4130)
5 . 2023 年分の確定申告完了!(1つめ)(3988)
Academic[574]
Book[155]
Diary[522]
Disaster[101]
Foodlogue[1425]
Game[284]
Goods[805]
Healthcare[341]
Hobby[32]
IT[1195]
Military[343]
misc.[1570]
Mobile[510]
Music[38]
Neta[106]
News[95]
Photo[391]
RealEstate[120]
Security[1178]
SEO Contest[36]
Software[634]
Tips[1886]
Travelogue[1238]
Web[675]
Work[193]