練馬エンジニアメモ

日々のメモ代わりとして

Rust言語 事始め

とりあえず環境構築して動くようにはなったのでメモ。 Windows10 Pro 64bitにて動作を確認。 一応デバッガも動く状態まで。

※ scoopが導入されている事を前提とする。

  1. powershellを起動
  2. 以下のコマンドを実行し、rustupをインストール(gcc/gdb共にscoop経由でインストール可能だが、バージョンが低いせいか後々問題が発生するので別途用意する。)
    scoop install rustup
  1. こちらよりmingwをダウンロードし任意の場所に展開。binディレクトリのパスを通しておく。
  2. rustup install nightly-i686-pc-windows-gnu で32bit版開発toolchainsをインストール
  3. rustup default nightly-i686-pc-windows-gnu で32bit版開発toolchainsをデフォルトのtoolchainsに変更
  4. vscodeを起動し、「Native Debug」拡張及び「Rust(rls)」拡張をインストール
  5. powershellコマンドプロンプトでも良い)を開き、仮プロジェクトを作成したいルートディレクトリに移動しcargo new hello_worldと入力して仮プロジェクトを作成する。
  6. 作成したプロジェクトのディレクトリをvscodeで開く
  7. CTRL+SHIFT+Dでデバッグペインを表示し、歯車をクリックしてGDBを選択するとlaunch.jsonが生成される。
  8. launch.jsonの"target"の値を"./target/debug/hello_world"に変更し保存
  9. powershell上でカレントディレクトリをプロジェクトディレクトリに移動し、cargo buildを実行。正常に完了すると./target/debug/にhello_world.exeが生成される。
  10. src/main.rsの適当な場所にブレークポイントを設置。F5で実行してブレークポイントで停止する事を確認する。
  11. vscodeの右下ないしは右下のベルをクリックすると「RLS not installed, install?」とか聞かれるのでYesを選択して関連ツールをインストールする。言語サーバー(?)が動作するようになり、コード補完等が動くようになる。
  12. スクリプトとして実行出来るよう、cargo install cargo-scriptを実行してcargo scriptをインストールしておく。

verdaccio(npmプライベートリポジトリサーバー)導入メモ

npmのプライベートリポジトリサーバーを構築出来るみたい。
構築先のドメインをhogehoge.jpとして構築する際のメモ。

インストール

npm install -g verdaccio

起動

verdaccio

なんか表示されて起動する。

 warn --- config file  - /root/.config/verdaccio/config.yaml
 warn --- Plugin successfully loaded: htpasswd
 warn --- Plugin successfully loaded: audit
 warn --- http address - http://localhost:4873/ - verdaccio/3.11.6

クライアント側からユーザー登録を行う

npm adduser --registry http://hogehoge.jp:4873/

ここでなんかエラーが吐かれる

npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to http://hogehoge.jp:4873/-/v1/login failed, reason: connect ECONNREFUSED 192.168.0.13:4873
npm ERR!     at ClientRequest.req.on.err (C:\Users\hoge\scoop\persist\nvm\nodejs\v11.9.0\node_modules\npm\node_modules\node-fetch-npm\src\index.js:68:14)
npm ERR!     at ClientRequest.emit (events.js:197:13)
npm ERR!     at Socket.socketErrorListener (_http_client.js:399:9)
npm ERR!     at Socket.emit (events.js:197:13)
npm ERR!     at emitErrorNT (internal/streams/destroy.js:82:8)
npm ERR!     at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
npm ERR!     at processTicksAndRejections (internal/process/next_tick.js:76:17)
npm ERR!  { FetchError: request to http://hogehoge.jp:4873/-/v1/login failed, reason: connect ECONNREFUSED 192.168.0.100:4873
以下略

原因としてはverdaccioを以下のようにして起動する必要がある。

verdaccio -l hogehoge.jp:4873

もう一度ユーザー登録を試みると、ユーザー名とパスワードとEmailを聞かれて無事登録が出来る。 ブラウザも立ち上がったりする。

Username: hogeuser
Password:
Email: (this IS public) hoge@hogehoge.jp

リポジトリを登録する。

npm set registry http://hogehoge.jp:4873/

ちなみに登録リポジトリの内容等はユーザーディレクトリ以下の.npmrcに記述されているので、変更したい場合はこちらをいじると良さげ。

これでnpm installやらyarn addやらがプライベートリポジトリ経由で出来るようになる。

npm publish --registry http://hogehoge.jp:4873

買った物その2

以前、WindowsPC用としてXbox Oneコントローラーを買ったが、充電とか出来るのかと思ったら出来なかった。

blog.ex10ds.net

ggったら以下のアイテムを買えば充電出来るようになっちゃうらしいので、ビックカメラにて購入(リンク先はAmazonだが...)

Xbox One プレイ&チャージ キット

Xbox One プレイ&チャージ キット

 


www.amazon.co.jp

そんでもって普通に使えてたっちゃ使えていたが、Bluetooth接続⇔microUSB有線接続っていうのがスムーズに切り替え出来ず、毎回ペアリングしなおす面倒くさい状態に...これまた調べたらWindows10用のワイヤレスアダプターがありました。

Xbox ワイヤレス アダプター for Windows 10

Xbox ワイヤレス アダプター for Windows 10

 

これを使ったら有線と無線の切り替えがサクサク出来て非常に楽!Bluetoothなんていらねーって感じっすわ。

それと関係ないけど某平沢進おじさん関連の影響で、ユング心理学に興味が出てつい本を購入してしまいました。三日坊主にならないように微速ながら読み進めております。

ユング心理学入門

ユング心理学入門

 

 

あと、Origin版のAnthem買いました。
誰かやってる方が居たら一緒にやりませう。

www.ea.com

 

※ おまけ。買ったやつ
Google Photosにアップロードするようにしておくと、はてブで投稿する時くっそ楽。

よく使えそうなJavaScriptパッケージメモその1

n

node.js/io.jsのバージョン管理パッケージ。

npm -g install n

でインストール完了します。

n <使いたいnode.jsのバージョン>

でインストール&切り替えが出来ます。

複数バージョンをインストールしている場合は、単純に

n

だけ叩けばバージョン選択画面が表示されるので、カーソルで選択してEnterを押せばしばらくして切り替え完了となります。

extend

jQueryにあった(らしい)extendメソッドを移植したもの(らしい)。 初期値を上書きしてマージしたオブジェクトを生成出来る。

    const extend = require('extend');
    console.info(extend({
        a: 0,
        b: 1,
        c: 2,
    },{
        a: undefined,
        d: 3
    }));

結果

{ a: 0, b: 1, c: 2, d: 3 }

公式には「Object.assign ネイティブに同じ機能があります」と書かれているが、微妙に挙動が違っていてこちらの方が便利と自分は感じます。 extendの場合だと第二引数に指定したオブジェクトにundefinedのメンバーがあった場合、そのメンバーは無視されるからです。

nanoid

小さく安全でURLにやさしいユニークな文字列IDを生成してくれます。(公式から引用) UUIDとか詳しくはないけど、実体のサイズが小さい事とサクっとURLセーフなランダム文字列を生成してくれるので非常に重宝してます。

    const nanoid = require('nanoid');
    console.info(nanoid());

結果

pEDOKHTtjN9uX4lJW4PcI

qrcode-terminal

指定した文字列からターミナルに出力出来るQRコードを生成してくれるパッケージです。

const qrcode = require('qrcode-terminal');
console.info(qrcode.generate('https://www.google.co.jp'));

ってコードだと
f:id:ex10ds:20190219114454j:plain:w200
みたいに出力されます。

vscodeのタスク実行でもBash on Ubuntu on Windows

vscodebash on ubuntu on windowsをターミナルとして使いたかった。
だけどタスクの実行を行うと何故か分からないが.bashrcが読み込まれないらしく、
nvm経由でインストールしたnode.jsへのパスが通っていない。

vscodeのsettings.jsonに以下を追記
v11.9.0の部分及びhomeパス等は自分の環境に合わせて。

"terminal.integrated.env.windows": {
  "PATH": "${env:PATH}:/root/.nvm/versions/node/v11.9.0/bin"
}

現行バージョンのディレクトリへのシンボリックリンクを作成してパスを通せば
後からvscodeの設定をいじる必要がなくなる

cd /root/.nvm/versions/node
ln -s v11.9.0 current

これで一応タスク実行もちゃんと動くように

windows用パッケージマネージャ(?)scoop+PHP5.3.3を導入

下手こいてSurface Laptopを初期化するハメになってしまいました。 開発環境としてPHP5.3.3の環境が必要だったのと、バイナリ探してきたりするのも面倒だったので scoopというコマンドラインインストーラー(と公式には書いてある)を導入して、それ経由でインストールしてみます。 scoop.sh 実行環境はpowershell3+.NET Framework 4.5以降

  1. powershellを起動

    Win+Rでファイル名を指定して実行を開き、powershellと打てばpowershellが起動します。

  2. powershellの実行ポリシーを変更

    これやらないと初期状態のpowershellではスクリプト等の実行権限が厳しいみたいです。 以下を入力します。
    Set-ExecutionPolicy RemoteSigned -scope CurrentUser

  3. scoopをインストールする

    以下をpowershell上にコピペしてEnterで大丈夫なはずです。
    iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

  4. scoopをアップデート

    scoop自体を更新されます。
    scoop update

  5. phpバケットの追加

    過去バージョンから現バージョンまで様々なバージョンのPHPがインストール出来るようになります。 バケットというのは保管先みたいなもので、この場合PHPの保管先を追加するイメージです。 (yum等パッケージマネージャで言う所のリポジトリみたいな所だと思います。)

    scoop bucket add php

  6. php5.3.3インストール

    scoop search php
    でインストール出来るPHPパッケージ一覧が表示される。
    scoop install php5.3.3
    でPHP5.3.3がインストール出来る。

SFTPでシンボリックリンクが辿れない場合の対処

SFTP使う案件で、chrootディレクトリより上位ディレクトリをシンボリックリンクしていて そのリンクが辿れないという問題が発生しました。

/mnt/watchme -> シンボリックリンクしたいディレクト
/sftp/watchme -> シンボリックリンク先、chrootディレクト

的な感じです。

結論としては以下のようにmountコマンドの--bindオプションを使って解決しました。

mkdir /sftp/watchme
mount --bind /mnt/watchme /sftp/watchme

老舗インターネットラジオ

いつも作業用BGMを探すのに苦労するが、somafmという海外のインターネットラジオが良い感じ。 複数チャンネル存在し、自分にあった好きな音楽を24時間聞くことが出来る。 寄付だけで運営を賄っているみたいなので気に入ったら是非寄付しよう! ちなみに自分はThe Tripしか聞いてないです...。

somafm.com

サブクエリを使った絞り込み

user_name_table

user_idname
1ほげ
2ふが
3うは

user_type_table

user_idtype
13
22
31

っていうテーブルがあった場合、user_type_tableのtypeが3のユーザーの名前だけ抽出したいというケース。 ggった結果、以下のようにサブクエリを使うと良いみたいです。(SQL詳しい人が聞いたら当たり前なんだろうけど...)

select name from user_name_table where user_id in(
    select user_id from user_type_table where type=3
);

買った物その1

Xbox One ワイヤレスコントローラー(ブラック)

warframeをコントローラーでやりたくで購入。 PS4のコントローラーみたいにバッテリー内蔵ではなく単三2本で動作する。 bluetoothで難なくPCと接続して使えるのはGood。 f:id:ex10ds:20190117004133j:plain

Amazon Basic USB3.0 延長ケーブル(2m)

ヨド〇シ見たけど良さげ(?)なケーブルが無くて注文。 ケーブルがLANケーブルばりに太く丈夫そうではある。 f:id:ex10ds:20190117004139j:plain