BLOGTIMES
«Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 ·... | | Next»
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 

                  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 |

                    CentOS 7 の Postfix に DKIM を導入する

                    antispam  postfix  tutorial 

                    CentOS 7 のメールサーバに DKIM を導入してみました。
                    以前、同じ手順を行なったはずなのですが、メモを取っていなかったので時間がかかってしまいました。

                    epel が有効になっていれば、yum を使うことで一撃でインストールができます。

                    yum install opendkim

                    OpenDKIM の設定

                    以下の手順で DKIM の署名に使う秘密鍵を作成します。

                    DKIM_DOMAIN=example.jp DKIM_SELECTOR=default mkdir -p /etc/opendkim/keys/${DKIM_DOMAIN} opendkim-genkey -D /etc/opendkim/keys/${DKIM_DOMAIN}/ -d $MAIL_DOMAIN -s $DKIM_SELECTOR chown -R opendkim:opendkim /etc/opendkim/keys/${DKIM_DOMAIN}

                    以下の設定情報を元に、DNS サーバに DKIM の情報を登録しておきます。

                    cat /etc/opendkim/keys/$MAIL_DOMAIN/$DKIM_SELECTOR.txt

                    OpenDKIM の設定ファイルを以下のように書き換えます。

                    cp -a /etc/opendkim.conf{,.org} patch <<'EOF' --- /etc/opendkim.conf.org 2016-12-21 12:32:17.000000000 +0900 +++ /etc/opendkim.conf 2019-10-26 15:20:06.291743471 +0900 @@ -36,7 +36,7 @@ ## Selects operating modes. Valid modes are s (sign) and v (verify). Default is v. ## Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing ## messages. -Mode v +Mode sv ## Log activity to the system log. Syslog yes @@ -95,24 +95,24 @@ ## Gives the location of a private key to be used for signing ALL messages. This ## directive is ignored if KeyTable is enabled. -KeyFile /etc/opendkim/keys/default.private +#KeyFile /etc/opendkim/keys/default.private ## Gives the location of a file mapping key names to signing keys. In simple terms, ## this tells OpenDKIM where to find your keys. If present, overrides any KeyFile ## directive in the configuration file. Requires SigningTable be enabled. -# KeyTable /etc/opendkim/KeyTable +KeyTable refile:/etc/opendkim/KeyTable ## Defines a table used to select one or more signatures to apply to a message based ## on the address found in the From: header field. In simple terms, this tells ## OpenDKIM how to use your keys. Requires KeyTable be enabled. -# SigningTable refile:/etc/opendkim/SigningTable +SigningTable refile:/etc/opendkim/SigningTable ## Identifies a set of "external" hosts that may send mail through the server as one ## of the signing domains without credentials as such. -# ExternalIgnoreList refile:/etc/opendkim/TrustedHosts +ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ## Identifies a set "internal" hosts whose mail should be signed rather than verified. -# InternalHosts refile:/etc/opendkim/TrustedHosts +InternalHosts refile:/etc/opendkim/TrustedHosts ## Contains a list of IP addresses, CIDR blocks, hostnames or domain names ## whose mail should be neither signed nor verified by this filter. See man EOF echo "${DKIM_SELECTOR}._domainkey.${DKIM_DOMAIN} ${DKIM_DOMAIN}:${DKIM_SELECTOR}:/etc/opendkim/keys/${DKIM_DOMAIN}/${DKIM_SELECTOR}.private" >> /etc/opendkim/KeyTable echo "*@${DKIM_DOMAIN} ${DKIM_SELECTOR}._domainkey.${DKIM_DOMAIN}" >> /etc/opendkim/SigningTable

                    設定が終わったら OpenDKIM を有効化して、デーモンを起動します。

                    systemctl enable opendkim systemctl start opendkim

                    Postfix の設定

                    Postfix 側には OpenDKIM は milter として登録します。

                    cp -a /etc/postfix/main.cf{,.bak} cat <<EOF >>/etc/postfix/main.cf #DKIM Settings smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = inet:localhost:8891 milter_default_action = accept EOF

                    設定が完了したら、Postfix を再起動します。

                    systemctl restart postfix

                    あとはサーバからメールを送信してみて、メールに DKIM ヘッダがついていれば設定は完了です。


                      at 15:55 |
                      «Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 ·... | | Next»