wafuの技術

技術習得の努力メモです。

Rubyでファイル一覧の取得

Rubyでファイル一覧を取得する基本です。

■ファイル一覧

Dir.glob('*') do | item |
      puts item
end

■ファイル一覧(拡張子を指定)

Dir.glob('*.jpg') do |item|
      puts item
end

■ファイル一覧(下位ディレクトリを含める)

Dir.glob('**/*') do |tem|
     puts item
end

■ファイル一覧(下位ディレクトリを含め、拡張子を指定)

Dir.glob('**/*.jpg') do |item|
     puts item
end

UbuntuのIPアドレスの設定

UbuntuIPアドレスを変更する方法です。


UbuntuIPアドレスの設定等
IPアドレスの一時変更
>sudo ip addr add 192.168.2.50/24

ゲートウェイの設定
>sudo ip route add default via 192.168.2.1

動的DNSの一時中止
>systemctl stop systemd-resolved
 恒久的な停止
  systemctl disable systemd-resolvd

DNSの一時的な書き換え
> sudo vi /etc/resolv.conf
内容を変えても、systemd-resolvedで書き換わる。


IPアドレスの恒久的な変更
/etc/netplan/99-config.yaml

network:
        versiion: 2
        renderer: networkd
        ethernets:
                 enp0s22
                       dhcp4: false
                       dhcp6: false
                       addressed: [192.168.1.20/24]
                       gateway4: 192.168.1.1
                       nameservers:
                                   addresses: [192.168.1.1]

反映は、
> sudo netplan apply


ubuntuのアップデート
sudo apt update
sudo apt install update-manager
sudo apt dist-upgrade
sudo do-release-upgrade

Rubyの配列

Rubyで配列を扱います。

■配列の作り方
a = Array.new
a = Array.new(5)  5個のnil
a = Array.new(5,0) 5個の0

lang = %w(Ruby Python C++)
lang = %i(“Ruby”,”Perl”,”Python”)

■文字列のsplitメソッドを使う
a = “This is a Ruby
b = a.split(‘,’)

■要素の置換
a[n] = 200

■2次元配列の作成
a = Array.new(3){Array.new(3,0)}

■主なメソッド
a.unshit(値) 配列の先頭に要素を追加
a.push(値)配列の末尾に要素を追加
a<<値 配列の末尾に要素を追加

1. concat(b配列) aの配列にb配列を追加
a+b 配列を結合する

a[n] = 値 配列の部分置換
a[n..m] = 値 配列の部分置換
a[n.len] = 値 配列の部分置換

a.compact 配列からnilを除く
a.delete(x) 配列から要素xを除く
a.delete_at(n) 配列の位置の要素を除く

今日はここまで

Rubyのメモ(編集中)

Rubyのメモですが、おかしい気がします。

Rubyのコメント

■1行のコメント
#a = 1

■まとまったコメント
=begin
コメントアウトされた内容
=end

■変数の種類
・ローカル変数
 通常使用する変数、小文字から始まる
グローバル変数
 $で始まる
インスタンス変数
 @から始まる
・定数
 大文字から始まる


$! もっとも近い例外
$〜 最後のパターンマッチに関するデータ
$& 最後のパターンマッチした文字列
$. 最後に読んだファイルの行番号
$< コマンドライン引数や標準入力の仮想ハンドル
$> 標準出力

■組み込みメソッド
・chop 最後の文字を取り除く
・chomp 最後の改行を取り除く
・exec(str) 文字列のコマンドを実行する
・fork() プロセスのフォーク
・gets
・sub()

Realforce修理(追記)

最初に疑問 Realfoceのキーが次第に重くなっていると感じるのは私だけ?

 

以前にも書きましたが、Realforceのキータッチが重くなった気がしています。

 

おそらく、経年劣化でラバーカップが硬化したようです。

どこかのサイトでHHKBの対処法で行っているのが、

「ラバープロテクタント」を使用した軟化処理です。

 

これは、10年前に使ってラバー部分が伸びた気がします。

 

どうせ固いのでいいやと「ラバープロテクタント」950円ぐらいです。

試してみました。

軽くなりましたが、まだまだです。

分解大変なのですが、もう一度やり直します。

今度は、まんべんなく行います。

 

どこかのサイトに吸っていくとあったので、ゆっくり吸わせます。

確かに吸っているようになくなります。

 

伸びたゴムが邪魔して蓋が閉まらない。(写真はなし・・)

伸びて収まりが悪そうなところは、あっさり、ゴムをはさみで切ります。

(切るのは、カップの部分ではなく、うすいところです。)

 

うまく入りました。

多少、キーの部分で重さが異なっている気もしますが、

軽くなりました。これです。

 

■効果

修復したRealforceはカタカタ感が戻りました。

軽いです。

安物キーボードにはない感覚です。

今後は安物キーボードを使い回そうと思いましたが、感覚が全然違います。

でもやらないほうがいい

 

■疑問

Realforceは経年劣化でキーが重たくなる?

・ラバープロテクタントで、キーは柔らかくなる。

Realforceの寿命は6年ぐらい?

 

・2024年3月、RealforceのR3を購入しました。

 これです。買い換えをおすすめします。

 やっぱりRealforceは最高です。

Rubyでfiddle(2) オリジナルのDLLを使う

Rubyのfiddleを使って、DLLを使ってみました。

思わぬところではまりました。

 

最初にC++でメインとDLLを作り確認しました。

そのDLLをRubyで呼び出しましたが、エラーになります。

 

・エラー内容1

in `import_function': cannot find the function: dllfunc() (Fiddle::DLError)

これは、関数が発見できないようです。

dumpbin /exports dlltest.dll

・・・・

        1    0 00001000 ?dllfunc@@YAHH@Z

・・・・

原因はわかりません。

C言語では、DLLの呼び出しに問題がありません。

結論は、

__declspec(dllexport) int dllfunc(int);

では、だめで、

/extern "C" {
    __declspec(dllexport) int __stdcall dllfunc (int a);
}

と書く必要があったようです。

これは、C++でCの記述方法を指定するようです。

 

・エラー内容2

in `initialize': No such file or directory (Fiddle::DLError)

これは、DLLの場所が発見できなかったものです。

RubyInstaller::Runtime.add_dll_directory("./")

を追加して、DLLの場所を追加することで対応できます。

 

完成品です。

C(C++)で呼び出す場合

■メイン関数

#define UNICODE
#include <windows.h>
#pragma comment(lib,"user32.lib")


extern "C" {
        __declspec(dllexport) int __stdcall dllfunc (int a);
}

BOOL WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{

        dllfunc(100);

        return TRUE;
}

 

■DLL側

#define UNICODE
#include <windows.h>
#pragma comment(lib,"user32.lib")

extern "C" {
        __declspec(dllexport) int __stdcall dllfunc (int a);
}

 

BOOL WINAPI DllMain(HINSTANCE,DWORD,LPVOID)
{
        return TRUE;
}

__declspec(dllexport) int dllfunc(int x)
{
        wchar_t aa[512];
        wsprintf(aa,L"%d",x);

        MessageBox(NULL,aa,L"info",MB_OK);
        return TRUE;
}

 

Rubyで上記のDLL(dlltest.dll)を呼び出す。

Rubyのメイン

require 'fiddle'
require 'fiddle/import'
RubyInstaller::Runtime.add_dll_directory("./")

module Dlltest
    extend Fiddle::Importer
    dlload "./dlltest.dll"
        extern 'int dllfunc(int)'

end

 

require 'pp'

Dlltest::dllfunc(20)