みそみそりんりんblog

勉強したことを書いていきます

WSLgを使ってwindows terminal上では文字化けするサーバーの文字を解読する

windows terminal使ってますか?euc-jpとかのサーバーに入って文字化けに悩まされていませんか?
そんなときにはteratermとか使ってたんですけど、windowsじゃなくwslのほうからsshで入りたくなることもありますよね?
なんと今のwslはguiに対応しているのでlinuxのterminal emulatorが使えてしまいます。つまりわざわざgitbashとかを使う必要はないということです。linux側に入ってるソフトをわざわざwindows側に入れなおして環境を無駄に汚す必要はありません。
wslのubuntuから以下をたたけばOKです

sudo apt install xfce4-terminal
xfce4-terminal &

これでlinux側でターミナルが起動できるので設定から好きな文字コードに変更してxfce4-terminalを再起動すれば文字化けともおさらばです。
そもそもwindows terminalが文字コードの変更に対応してくれていればこんな手間をかけずに済むのですが…というか文字コード難しすぎるので全部utf8にしてくれ

参考

zenn.dev

Rubyの"graphql-client"使ってみた

前提

叩きたいAPIにGraphQLが用意されており、折角なので触ってみる

実装内容

Gemfileに以下を記述して、gemをinstall

gem "graphql-client"

APIのラッパーを作成する

require "graphql/client"
require "graphql/client/http"

module Api
  # GraphQLのエンドポイント、ヘッダー情報作成
  HTTP = GraphQL::Client::HTTP.new(ENV['END_POINT']) do
    def headers(context)
      { "#{ENV['HEADER_KEY']}": ENV['HEADER_VALUE'] }
    end
  end

  # 初期化で、最新のネットワーク取得 & リクエスト
  Schema = GraphQL::Client.load_schema(HTTP)
  Client = GraphQL::Client.new(schema: Schema, execute: HTTP)
end

実行してみる

Query = Api::Client.parse <<-'GRAPHQL'
  query {
    hero {
      name
    }
  }
GRAPHQL

result = Api::Client.query(Query)

p result

=begin
#<GraphQL::Client::Response:0x0000ffff9bc01408
@data=#<#<Module:0x0000ffffa0125e58>::Query viewer=...>,
@errors=#<GraphQL::Client::Errors @messages={} @details={}>,
@extensions=nil,
@original_hash={"xxxx"=>{"xxxxx"=>{"xxxxx"=>"xxxxx", "name"=>"xxxx"}}}>
=end

感想

GraphQL理解する良い機会になった.
APIサーバーの方も作ってみようかな

参考サイト

GitHub - github/graphql-client: A Ruby library for declaring, composing and executing GraphQL queries

RubyでCSVの文字コードをsjisにして出力する

前提

コード

csv_string = CSV.generate(encoding: Encoding::SJIS, force_quotes: true) do |csv|
   csv << ["ホゲホゲええ"]
end

csv_string.encoding

# =>  #<Encoding:Windows-31J>

感想

  • これからも使うことになりそうなのでメモ

参考文献

CSV.generateでUTF-8からShift−JISに変換したときの文字コード変換エラーを回避する - 行動すれば次の現実

class CSV (Ruby 3.1 リファレンスマニュアル)

UbuntuServerで、ファイルサーバ(NAS)立ち上げてみた

実行環境

経緯

やっぱり、サーバの勉強ついでにもなるし
プライベートなファイルを保存するのに、ファイルサーバ欲しいよな???

手順

アップデート(最新状態にする)

sudo apt update

アップグレードできるpackageがありますよと出たら、以下のコマンド実行

sudo apt upgrade

sambaのインストール(ファイルサーバーを実現するためのソフトウェア)

sudo apt install samba

sambaにユーザーを登録する(Ubuntuに登録されているアカウント)

sudo pdbedit -a [ユーザー名]

共有するディレクトリを作成

mkdir -p /home/ubuntu/share

アクセス権限設定

sudo chmod 0777 /home/ubuntu/share

sambaの設定

sudo vi /etc/samba/smb.conf

以下追記

[global]
  dos charset = CP932  # Windows側で利用されている文字コード指定
  unix charset = UTF-8  # UNIX上のファイルシステムに用いられている文字
  ...
  # 行の初めのセミコロンはずす
  # 自身のubuntuのIPアドレスを書き込む(ip adress showで見れる)
  interfaces = 192.168.XX.0/24 xxxx
  ...
  bind interfaces only = yes # 行の初めについていたセミコロンはずす
  map to guest = bad User  # 追記
  ...
[share] # 表示名 他のデバイスからアクセスする際に表示される
  path = /home/ubuntu/share
  writeable = yes
  guest ok = yes
  guest only = yes
  create mode = 0777
  directory mode = 0777

書き込み後

testparm

↑でsmb.confに誤りがないかチェック

sambaの実行

sudo systemctl restart smbd nmbd

↑smb.confの編集が反映される
sambaは、smbdとnmbdの2つのデーモンにより動いている
sbmd:クライアントにファイル共有と印刷サービスを提供するデーモン
nmbd:NetBIOSネームサービス(名前解決)とブラウジング機能を提供するデーモン

sudo systemctl enable smbd nmbd

Ubuntuの起動時に自動で実行される

これで、同じネットワーク内の他のデバイスなら
ファイルにアクセスできるようになる

iPhoneからアクセス

感想

次は、外部アクセスできるように、
設定できるようにしたいな
いっぱい画像保存するよ〜

参考文献

Ubuntu 20.04 でファイルサーバー(NAS)を作ろう! | Beightlyouch

users.miraclelinux.com

Rubyのメソッドの引数がHashの時、fetch使わんやつおる??

初期化の際の引数にハッシュを使う

「 | | 」を使った場合

def initialize(args)
  @id  = args[:id] || 1
  @name = args[:name] || "misomiso"
end

↑これだと、falseとnilの区別ができねえじゃねえか!

「fetch」を使うと...

def initialize(args)
  @id = args.fetch(:id, 1)
  @name = args.fetch(:name, "misomiso")
  @flag = args.fetch(:flag, true)
end

fetchでええやん

参考文献

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 | Sandi Metz, 髙山泰基 | 工学 | Kindleストア | Amazon

rmagickの使い方まとめ

rmagic使い方

### ファイルを読み込む
image_data = Magick::Image.read(img.path).first

### ファイルのフォーマット(PNG, JPG etc...)
image_data.format

### ファイルのサイズ
image_data.filesize

疑問点

最初は↓

Magick::Image.from_blob(buffer).shift

でファイルを読み込んでいたのだが、 「ai」ファイルが「pdf」判定されていた
.readを使うことによってちゃんと判定してくれたよん
原因わかったら、書き足します

CentOS8 で ruby gem "rmagick" インストール

Linuxに"Image Magic" をインストール

$ yum install -y libwebp libwebp-devel

$ wget https://imagemagick.org/download/ImageMagick.tar.gz

$ tar zxvf ImageMagick.tar.gz

# makefileにルールが追加される
$ ./configure

# コンパイル
$ make

# コンパイルしたプログラムをインストール
$ sudo make install

"rmagic"をインストール

#  MagickCore.pcがあるディレクトリを環境変数に入れる
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

$ bundle install

感想

クソ時間かかったのでメモ

参考文献

RMagick をレンタルサーバーにインストールするのではまった | EasyRamble

ImageMagick – Install from Source

Amazon Linux 2 に ImageMagick をインストールする - Qiita