BLOGTIMES
«Prev || ... 253 · 254 · 255 · 256 · 257 · 258 · 259 · 260 · 261 ·... | | Next»
2019/10/31

首里城で火災

okinawa  worldheritage  castle 

沖縄のシンボル首里城が火災で焼失してしまったようです。

30 年かけた復元が 1 月に完了したばかりで、僕もその雄姿を 3 月に見学したばかりなだけにショックです。


    at 12:45 |
    2019/10/30

    WSL の apt が遅いときの対策方法

    wsl  ubuntu1804 

    WSL の apt のダウンロード速度が 500kB/s を切っていたので、ちょっと何でも遅すぎるだろと思って調べてみたら、リポジトリが海外になっていました。
    こんな感じで url に jp. をつけてあげると劇的に速度が改善されると思います。

    sudo sed -i.org -e "s/\/\/archive\.ubuntu\.com/\/\/jp\.archive\.ubuntu\.com/g" /etc/apt/sources.list

      at 22:59 |
      2019/10/30

      Fedex のインターナショナル・プライオリティは予想以上に速い

      delivery 
      Fedex 配送状況 - Fedex のインターナショナル・プライオリティは予想以上に速い

      海外からの通販はよく使っていますが、今回はちょっと急ぎだったので少し高い配送サービスを使ってみました。

      10 月 28 日に米国サンノゼから発送されたものが、10 月 30 日の昼過ぎには都内に配送されたのにはびっくり。普段はエコノミー航空(SAL)便などが多いので、米国からは10日以上かかりますが、それとは完全に別次元。ほぼほぼ国内の通販と同じような感覚ですね。

      金額的には小さなものでも1万円くらいかかるので、決して安くないんですけどね。


        at 12:55 |
        2019/10/29

        gem mysql から mysql2 に移行してみる

        ruby  mysql 

        昔書いた Ruby のプログラムを CentOS 7 上で動かそうとしたのですが、MariaDB が 10.4 と比較的新しいバージョンだったので gem で mysql がインストールできないので困ってしまいました。

        mysqlを見ると、最終アップデート日が 2013 年になっていて、最近はメンテナンスされていないようです。このまま粘っても解決の見込みも立たないので、mysql2 に移行してしまうことにしました。

        ソースの書き換えは大きく3箇所

        基本的には以下の3箇所を変更してやれば、基本的な動作はするようです。
        Date などの部分を自動的に cast する機能がついたようですが、これは :cast => false でオフにしてあります。

        # モジュールの読み込み require 'mysql' require 'mysql2' # 接続 @db = Mysql::connect('localhost', 'user_name', 'pass', 'db_name') @db = Mysql2::Client.new(:host => 'localhost', :username => 'user_name', :password=> 'pass', :database => 'db_name', :cast => false) # 結果の取得 rows.each_hash rows.each
        [gem mysql から mysql2 に移行してみる の続きを読む]

          at 22:24 |
          2019/10/29

          clang-query を使って cpp の AST を解析する

          cpp  c  clang  softwareengineering 

          C/C++ のソースコードの AST を使って簡単に解析する方法がないか調べていたら、clang-query というのが使えそうだったのでメモ。
          clang-tools に入っているので Ubuntu 18.04 では apt install clang clang-tools で使えるようになりました。

          実行例

          例えば以下ような簡単なプログラムの構造を見てみます。

          sample.c

          #include <stdio.h> int main(void){ printf("Hello World"); return 0; }

          コマンドラインから以下のようなコマンドを入力すると、出力を得ることができます。
          クエリの内容を変更することで自在にカスタマイズができるので便利ですね。

          cat <<EOS | clang-query example.c -- set output dump match functionDecl(hasName("main")) EOS

          Match #1:

          Binding for "root":
          FunctionDecl 0x7fffd94a0d78 </home/hsur/example.c:3:1, line:6:1> line:3:5 main 'int (void)'
          `-CompoundStmt 0x7fffd94a0f88 <col:15, line:6:1>
          |-CallExpr 0x7fffd94a0ef0 <line:4:2, col:22> 'int'
          | |-ImplicitCastExpr 0x7fffd94a0ed8 <col:2> 'int (*)(const char *, ...)' <FunctionToPointerDecay>
          | | `-DeclRefExpr 0x7fffd94a0e18 <col:2> 'int (const char *, ...)' Function 0x7fffd948fe08 'printf' 'int (const char *, ...)'
          | `-ImplicitCastExpr 0x7fffd94a0f38 <col:9> 'const char *' <BitCast>
          | `-ImplicitCastExpr 0x7fffd94a0f20 <col:9> 'char *' <ArrayToPointerDecay>
          | `-StringLiteral 0x7fffd94a0e78 <col:9> 'char [12]' lvalue "Hello World"
          `-ReturnStmt 0x7fffd94a0f70 <line:5:2, col:9>
          `-IntegerLiteral 0x7fffd94a0f50 <col:9> 'int' 0

          1 match.

          参考

          以下の MS による解説がわかりやすいです。


            at 08:48 |
            2019/10/28

            git で変更を半分だけコミットする

            git 

            git を使ってソースコードを管理していると、1 コミットで 1 Issue になるように履歴もきれいに保ちたいということがあります。

            始める前はそうは思っていても、作業中に別のことが気になって、そちらもついでに直してしまったような場合(例えばバグ修正中に typo を見つけたような場合)、コミットする段階になってから困ることがあります。そのような場合には add や commit 時に -p をつけてやれば、hunk ごとに(場合によっては hunk の中をさらに分割して)ステージすることができます

            Git - git-commit Documentation

            -p
            --patch
            Use the interactive patch selection interface to chose which changes to commit. See git-add[1] for details.

            実際に add/commit しようとすると、プロンプトがこんな感じになるので種類が多くて驚くかもしれません。

            Stage this hunk [y,n,q,a,d,/,e,?]

            基本的には y/n で答えればよく、さらに分割する必要があるときは e を選ぶという感じでしょうか。
            e を選んだときにはエディタが立ち上がるので、そこで add/commit に含めたい変更(先頭が +/- で始まっている行)だけを残すようにすればよいだけです。

            これについての詳細な説明は Git - git-add Documentation にあります。

            y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help

              at 22:44 |

              WiFi 設定用の QR コードを作る

              barcode  hotspot 
              WiFi 設定用の QR コード - WiFi 設定用の QR コードを作る

              WiFi の手動設定を周知するのは面倒なので、なにか上手い方法がないかと思って探してみたら、スマホに関しては QR コードを使うという方法があることが分かったのでメモ。

              例えば SSID:hoge, パスワード:fuga, セキュリティ:WPA/WPA2 の QR コードを作りたい場合、以下のような文字列の QR コードを作ればいいみたいです。

              WIFI:S:hoge;T:WPA;P:fuga;;

              ちなみにこれがどこで定められているのか、いろいろと規格を調べてみたのですが、残念ながら見つけることができませんでした。

              参考


                at 12:37 |
                2019/10/27

                Laravel でパスワードを忘れたときの再設定方法

                php  laravel 

                Laravel の Auth を使うとパスワードは DB にハッシュ化された状態で格納されます。
                これはこれでセキュリティのために必要な挙動なので、これに文句を言うつもりはありません。

                しかしながら、例えば管理者用のパスワードを忘れてしまい、DBを強制的に上書きしてログインしたいような場合、このハッシュがどのように作られているのか分からないとお手上げです。今日はまさにそんな状態に陥ってしまったので、解決方法を調べてみました。結論から言うと、以下のようにインタラクティブな php (artisan の tinker)を起動して、プログラムで DB を書き換えることができます

                $ php artisan tinker Psy Shell v0.9.9 (PHP 7.1.33 ― cli) by Justin Hileman >>> \App\User::where('UserId','1')->update(['password' => strtoupper(\Hash::make('hoge'))])

                これだと一撃で実行できるので、楽ちんです。

                [Laravel でパスワードを忘れたときの再設定方法 の続きを読む]

                  at 14:11 |

                  名前のローマ字の表記は、来年1月から姓名順に

                  english 

                  名前のローマ字の表記が国の公文書では、来年1月から姓名順になることが決まったようなのでメモ。
                  変えると混乱を招くと思うので、どの程度普及するかは未知数ですね。

                  ローマ字、来年から「姓・名」順 文科相表明、民間に周知へ | 共同通信

                  国の公文書にローマ字で日本人の名前を表記する際、来年1月1日からは特別な事情がない限り「姓・名」の順とし、姓を明確にする場合は全て大文字にすると関係する中央省庁で申し合わせたと明らかにした。各省庁が関係業界に通知を出すなどして、民間にも周知を始めるという。


                    at 12:06 |
                    2019/10/26

                    git で branch を間違えてプログラムを書き始めてしまったときの修正方法

                    git  humanerror 

                    Git で うっかり新しいブランチを切らずにプログラムを書き始めてしまって、コミットするときに気づいて困るということがあります。
                    そのようなときの修正方法をいつも忘れていて調べ直すのでやり方をメモ。

                    基本的にには

                    1. stash で変更を待避
                    2. checkout で新しいブランチを切る
                    3. 変更の commit と push
                    4. branch で元のブランチに復帰

                    の4ステップでできます。

                    具体的な操作

                    # ステータスを確認(いろいろと変更があるはず) git status # 変更を stash git stash # ステータスを確認(stash 後なので、変更はなくなっている) git status # 新しいブランチを切って切り替える git checkout -b feature/hogehoge # 現在のブランチを確認 git branch # stash しておいた変更を現在のブランチに適用 git stash pop # 変更を新しいブランチにコミット git commit -m "fugafuga" path/to/file.ext # ブランチをリモートに push git push origin feature/hogehoge # ブランチを master に切り替え git checkout master

                      at 17:59 |
                      «Prev || ... 253 · 254 · 255 · 256 · 257 · 258 · 259 · 260 · 261 ·... | | Next»