GolangでString型を逆順にする

概要

GolangでString型を逆順に出力したい

解決策

stackoverflow.com

上記でGolangでは、逆順にする方法がないので関数を改めて定義する必要があるみたい。
なので、

func Reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

と書く。

string型とrune

rune型について調べてみた。

qiita.com

上記のサイトによると、

  1. Golangではcode point(Unicodeの表を元に文字を16進数に変換したID)の符号化にUTF-8を採用。

  2. 1.のためにstring型はbyte単位で処理するので、数字や英語などは処理できる(1byteで表現されるため)。

  3. しかし、日本語などの2byte ~ 4byteで処理される単語ではstringで処理ができない。

  4. だから、rune型でcode pointとして処理した方が都合が良い。

参考

qiita.com

GeneXusの用語のまとめ【備忘録】

概要

最近、GeneXusについて勉強する機会がありました。
そこで、学んだことをまとめてみようと思います。(随時更新)

GeneXusについて

公式ページ

www.genexus.jp

大きな特徴として

  1. 短期間でWeb、スマートフォンのアプリケーションを作成できる。

  2. プログラムを自動生成してくれるので、DBやUIの作成に時間がかからない。

  3. GeneXus特有の用語が使われている。

そのためにGeneXusを使いこなすには、GeneXusの用語を先に覚える必要がある。
ただし、用語についてはそこまで難しい意味もないので「GeneXusでは、こういう用語で使われているんだな」程度でもいいかも。

用語

ナレッジベース(Knowledge Base、KB)

GeneXusにおけるプロジェクトの名前。
githubであればリポジトリにあたる。

ベーステーブルと拡張テーブル

f:id:seven_901:20210530195913p:plain 例えば、1対nのデータベースを図のように作成し、顧客名(CustomerName)請求書ID(InvoiceID)の2つをUI上に表示。
このとき、n側のデータベースをベーステーブルという。
f:id:seven_901:20210530195944p:plain そして、ベーステーブルと1側のデータベースを拡張テーブルという。
f:id:seven_901:20210530195808p:plain 注意点として拡張テーブルは対象以外のテーブルも含まれる。

オブジェクト

トランザクションオブジェクト

GeneXusでDBを作成するときに使われるオブジェクト。
大きな特徴としてユーザが付けた名前をそのままUI上に表示することができる。
例えば、顧客のテーブルを作成するときに名前をCustomerとして、UIで表示するときには顧客と使い分けることもできる。

プロシージャ

GeneXusでサブルーチンを作成するときに使われる。
外部から呼び出すときには、parmRulesで定義することで、外部のプロシージャやWebパネルから呼び出すことができる。
使用例として

  • ファイル処理(ファイルの読み込み、ファイルで出力)

  • PDF化

など

Webパネル

UIの作成を行うオブジェクト。
作成方法はGUIで作成することができる。

JavaのScannerクラスのcloseメソッドについて

概要

Javaについて学んでいると、Scannerクラスがあった。

docs.oracle.com

上記の公式APIや他のブログによると、Javaで標準入出力をするときに利用されるクラス。
そして、Scannerクラスはcloseメソッドが存在する。
何故、closeメソッドが存在するのか簡単に調べてみた。

結論

単純にScannerクラスは、ファイル処理もできるためにcloseメソッドがあるみたい。

余談

Scannerクラスのcloseメソッドについて調べているときに見つけたブログ記事。

www.delftstack.com

上記のブログによると、closeメソッドを明記するタイミングが紹介されている。

qiita.com

上記のブログでは、Scannerのcloseメソッドが暗黙的に宣言されるみたい。

docker-composeでポートを使用したい

概要

docker-composeで、MLflowの実験結果を確認するために

mlflow_server:
        build: ./docker_mlflow_server
        ports:
            - "0.0.0.0:8888:8888"
        volumes:
            - 実行している環境:/work
        working_dir: /work
        command: mlflow server -h 0.0.0.0 -p 8888 --backend-store-uri mlruns

docker-compose.ymlに書いておき、MLflowのサーバを立ち上げる準備をする。
書いた後は

docker-compose run mlflow_server

を実行。
しかし、開放されているポート(ここでは、8888)に接続しても確認することができない。

環境

docker-compse

解決策

docs.docker.jp

公式ドキュメントによると、docker-compose runコマンドに--service-portsをオプションに追加する必要があるみたい。
上記のコマンドを例にすると、

docker-compose run --service-ports mlflow_server

となる。
これで、8888に接続できた。

参考

qiita.com

blog.ikedaosushi.com

Kedroでpipeline.pyがない

概要

zenn.dev

qiita.com

上記の通りKedro機械学習のパイプラインを構築していると、pipeline.pyを編集することが書かれている。
しかし、kedro newでプロジェクトを作成したところpipeline.pyが見つからない。

環境

Kedro v0.17

解決策

試した手順として、

  1. 試しにkedro new --starter pyspark-irisを実行し、irisのサンプルプロジェクトを構築。

  2. src/プロジェクト名直下のそれぞれのファイルの中身とpipeline.pyの中身を見比べる。

  3. すると、hooks.pyというファイルの中身がpipeline.pyの中身と合致していた。

恐らく、hooks.pyという名前に変更されたみたい。

Kedroでcatalog.yamlからファイル保存

概要

Kedroで作成される中間ファイルを保存したい。

環境

kedro v0.17.0

方法

kedro.readthedocs.io

公式によると、catalog.yamlで保存したいファイルの保存先やデータの形式を定義できるみたい。

テキストデータ

catalog.yaml内で

data:
  type: text.TextDataSet
  filepath: data/02_intermediate/data.txt
  fs_args:
    open_args_save:
      mode: "w"

みたいにfs_argsopen_args_saveを定義。
テキストデータで保存したい場合にはtype: text.TextDataSetにする。
そして、pipeline.pyの戻り値に

def create_pipeline(**kwargs):
    return Pipeline(
        [
            node(
                ・・・
                outputs=dict(
                    data="data",
                    ・・・
                ),
            )
        ]
    )

と定義すると中間ファイルとして保存される。

csvファイル

csvファイルの場合は

data_csv:
  type: pandas.CSVDataSet
  filepath: data/02_intermediate/data.csv
  save_args:
    mode: "w"

みたいにcatalog.yamlsave_argsを定義。
このとき、type: pandas.CSVDataSetとファイルの形式を変更する必要がある。
後は、上記と同様に戻り値を定義する。

Kernel header files not in any of the expected locationsが出た

概要

こちらの記事を参考にして、 NICのドライバを適用しようとmakeコマンドを実行したときに

Makefile:85: *** Kernel header files not in any of the expected locations.
Makefile:86: *** Install the appropriate kernel development package, e.g.
Makefile:87: *** kernel-devel, for building kernel modules and try again.

というエラーが発生。
エラー文のみ見たら、カーネルのファイルに問題があるみたい。

環境

Ubuntu 20.04

解決策

  1. こちらを参考に /usr/srcの配下にあるlinux-headerのバージョンと/lib/modules/の配下にあるバージョンを確認。

  2. バージョンを確認後、システムを再起動したときにEscキーを押して、GRUBを起動。

  3. 次に画面が遷移したときに[Advanced options for Ubuntu]という項目を選択。

  4. 最後にこちらの記事を参考に1.で確認したバージョン名の後ろにrecovery modeのないカーネルを選択する。

上記の手順を踏んだ後はNICの適用することができた。

GRUB

e-words.jp

上記の記事によると、パソコンの起動時に使用するファイルを選択できるみたい

recovery mode

kledgeb.blogspot.com

上記の記事では、recovery modeを実際に選択したときの画面がある。
記事を読んでみると、破損したファイルの復旧などができるみたい。

参考

oopsops.hatenablog.com

qiita.com

qiita.com