第66回シェル芸勉強会メモ

はじめに 2023年9月30日に開催された第66回シェル芸勉強会にオンラインで参加させていただきました。 そのときの記録をメモとして記事にしておこうと思います。 あと、解けそうな問題はChatGPT(GPT-4)にも解いていただこうと思います。 ## 問1 : 0123456789 問題内容 数字を使わずに0123456789を出力します。 私の回答 cat<<EOF>>a.cpp #include <bits/stdc++.h> int main() { int a[]={'a','b','c','d','e','f','g','h','i','j'}; for(char b: a) printf("%d",b-'a'); } EOF g++ a.cpp ./a.out 私の感想 bashのワンライナーではありませんが、とりあえず想定の出力は得られました。 他に何も思いつかなかったのでまだまだ力不足という感じです。勉強します。 配信で紹介されていたseq infの回答がスマートで勉強になりました。 ChatGPTの回答 echo abcdefghij | tr a-j $(echo a | tr a ':') 出力結果 :::::::::: 私の感想 10回くらいやり取りをして最終的にこの回答になりました。 数字を使用できないという制約が難しかったのかもしれません。 また、ChatGPTは実行できない状態のワンライナーも当たり前のように提供してくるので気をつけないといけませんね。 問2 : リダイレクト 問題内容 “ls 存在しないファイル 3>file 2>?“の?に文字列を入れてfileにlsのエラー出力を書き込みます。 私の回答 ls 存在しないファイル 3>file 2>&$(seq inf|head|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|tac|sed '$d'|sed '$d') 私の感想 さっそく問1で学んだことを使ってみました。1-10を出力してからsed ‘$d’で最終行を削除していきます。 欲しい数字は3なので途中でtacを使いました。長いですがとりあえずはできたっぽいので良しとします。 ChatGPTの回答 ls 存在しないファイル 2>file 私の感想 問題を理解してもらえませんでした。ChatGPTに問題を出すこと自体が難問です。 ...

作成日: 2023年10月3日 · 最終更新日: 2024年3月30日 · Yusuke Kato

ROS 2 Humble 公式チュートリアル 02: ROS 2 のノード関係のコマンド

はじめに ROS 2 Humbleの公式チュートリアルに従って勉強中です。 今回はROS 2のノードに関係するコマンドたちをまとめていこうと思います。 公式チュートリアルは下記のリンクからアクセスできます。 ROS 2 Humble 公式チュートリアル 前回の記事は下記のリンクからアクセスできます。 ROS 2 Humble公式チュートリアル 01: 環境構築からturtlesim まで 用意するもの Ubuntu 22.04 LTS ROS 2 Humble ノードの起動 パッケージ内の実行ファイルは下記のコマンドのように実行できます。 ros2 run package_name executable_name 例↓ ros2 run turtlesim turtlesim_node ノードの一覧 起動しているノードの一覧は下記のコマンドで出力できます。 ros2 node list ノードの情報 ノードの情報は下記のコマンドで出力できます。 ros2 node info node_name 例↓ ros2 node info /turtlesim おわりに ROS 2のノードに関係するコマンドについてまとめました。 この3つのコマンドを覚えておけばノードに関しては困らないと思います(ホントに?)。 それではまた次回もよろしくお願いします。

作成日: 2023年9月13日 · 最終更新日: 2024年3月30日 · Yusuke Kato

ROS 2 Humble 公式チュートリアル 01: 環境構築から turtlesim まで

はじめに ROS 2 Humbleの公式チュートリアルに従って勉強中です。 誰かの役に立つかは分かりませんが、 チュートリアルの手順や困ったポイントのメモをブログに残しておこうと思います。 チュートリアルは英語なので、日本語の情報が増えるのは良いことかもしれません。 ROS 2 Humble公式チュートリアル 用意するもの Ubuntu 22.04 LTS がインストールされたPC WindowsとUbuntuのデュアルブート方法は下記のページをご覧ください。 WindowsとUbuntuのデュアルブート ROS 2 Humbleのインストール Ubuntu 22.04 LTSにROS 2 Humbleをインストールします。 ありがたいことにROS 2 Humbleを簡単にインストールできるBashスクリプトがあります。 下記のGitHubリポジトリをcloneして使用させていただきましょう。 ros2_setup_scripts_ubuntu 下記のようにコマンドを実行すればインストールできます。 git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git cd ros2_setup_scripts_ubuntu ./ros2_humble_desktop_main.sh インストールが完了したら下記のコマンドを実行してsetupファイルを読み込んでおきましょう (このコマンドは端末を起動するたびに実行する必要があります。~/.bashrcに書いてあれば不要です。) source /opt/ros/humble/setup.bash turtlesim のインストール 下記のコマンドを実行してturtlesimパッケージをインストールします。 sudo apt update sudo apt upgrade sudo apt install ros-humble-turtlesim 下記のようにros2のサブコマンドpkgを実行するとturtlesimパッケージの情報が表示されます。 ros2 pkg executables turtlesim 出力内容↓(turtlesim パッケージの実行ファイル一覧) turtlesim draw_square turtlesim mimic turtlesim turtle_teleop_key turtlesim turtlesim_node turtlesim のノードを起動 それでは準備が整ったので下記のコマンドでノードを起動します。 ...

作成日: 2023年9月10日 · 最終更新日: 2024年3月30日 · Yusuke Kato

Windows と Ubuntu のデュアルブート

はじめに 大学入学時に購入したPCが放置されていたのでUbuntuをインストールしてみました。 元々はWindows 10がインストールされていて、そこにUbuntu 22.04 LTSをデュアルブートした形です。 デュアルブートの方法については検索すれば山ほど情報が出てきますが一応メモとして残しておきます。 用意するもの Windows がインストールされているPC USBメモリ 私はWindows 10のPCにUbuntu 22.04 LTS をデュアルブートしましたが、バージョンが変わってもだいたい同じだと思います。 1. Ubuntu用のストレージを確保 まずUbuntuで使用するストレージを確保します。 下記のページを参考にしてWindowsが使用しているディスクを縮小して空き容量を生み出します。 最低でも100GBは空き容量を確保しましょう。 参考:DELL製PCのデュアルブート方法 縮小可能な領域が十分ではないときは下記のページが参考になります。 参考:ボリュームが縮小できないときの対処法 2. Ubuntuの入手 次はUbuntuのイメージファイルをダウンロードしましょう。 私の場合はUbuntu Desktop 22.04.3 LTSをダウンロードしました。 下記のリンクからUbuntuのダウンロードページにアクセスできます。 Ubuntuのダウンロードページ 3. RufusでUSBメモリにUbuntuを書き込み Ubuntuのイメージファイルが入手できたら、Rufus というソフトを使ってUSBメモリに書き込んでみましょう。 下記のリンクからRufusのダウンロードページへアクセスできます。 Rufus を起動したら、USBメモリとUbuntuのイメージファイルを選択します。 それ以外の項目はデフォルトのままで大丈夫だと思います。 書き込み完了まではしばらく時間がかかるので待ちましょう。 Rufusのダウンロードページ 4. Ubuntu のインストール それではいよいよPCにUbuntuをインストールします。 Windowsの設定で「高速スタートアップ」は無効にしておきましょう(おそらく必要な手順)。 Ubuntuのイメージファイルを書き込んだUSBメモリを挿したままPCを再起動します。 メーカのロゴが表示されたらF2やF12などを押してBIOSを起動します。 BIOSの画面でUSBメモリを選択して(頑張って探したら見つかります)、起動しましょう。 その後、Ubuntuの画面が表示されたら成功です。 あとは手順に従ってUbuntuをインストールしましょう。 おわりに 以上でインストール完了です。お疲れ様でした。 私はこれからROS 2 Humbleで遊ぼうと思います。

作成日: 2023年9月9日 · 最終更新日: 2024年3月30日 · Yusuke Kato

第64回シェル芸勉強会メモ

はじめに 2023年4月22日に開催された第64回シェル芸勉強会にオンラインで参加しました。 そのときの記録をメモとして記事にしておこうと思います。 あと、解けそうな問題はChatGPT(GPT-4)にも解いていただこうと思います。 公式配信 ## 問1 : メール解析 問題内容 メールの内容から必要な情報だけ抜き出します。 私の回答 cat S*/*64/*.txt|sed 's/-/ /g'|sed 's/:/ /g'|sed 's/:&gt;//g'|sed 's/Re //g'|sort -k9|awk '{c[NR]=$3;d[NR]=$4;g[NR]=$7;h[NR]=$8;i[NR]=$9}END{for(j=1;j&lt;length(i);j++){if(i[j]==i[j-1]){printf("%s %s %s %d\n",i[j],g[j-1]"-&gt;"h[j-1],g[j]"-&gt;"h[j],(c[j]-c[j-1])*24+d[j]-d[j-1])}}}' 私の感想 awkでごり押ししました。 まずsedでメール内容を整形して、時刻を比較したいメール同士が並ぶようにsortで並べ替えを行います。 それからawkでメール内容をすべて配列に入れて、時刻の差分を計算して必要な情報だけ出力しました。 ちなみに、私の回答は不完全なので分と秒を考慮できていません。 まだまだ勉強が足りていない気がしますね。 精進します。 問2 : 乱数生成 問題内容 正規分布に従う乱数を生成します。 私の回答 echo | awk 'BEGIN{srand();a=0}{for(i=0;i&lt;12;i++)a+=rand()}END{printf("%lf\n",a-6)}' 私の感想 私は正規分布が分からないので0~1の乱数を12個足して6を引いた値を出力しました。 解説で紹介されていた「cat /dev/urandom」から乱数を生成する方法が勉強になりました。 これから乱数を生成するときは使ってみようと思います。 数値だけではなくアルファベットの文字列もランダムに生成できるとのこと。 便利ですね。ありがとうございます。 ChatGPT(GPT-4)の回答 awk 'BEGIN {srand(); u1=rand(); u2=rand(); z0=sqrt(-2*log(u1))*cos(2*3.14159265359*u2); print z0}' Box-Muller変換を使っているらしいです。 問3 : 行列の転置 問題内容 与えられた行列が対称行列か判定します。 私の回答 cat S*/*64/mat | python3 -c 'import numpy as np;A=[input().split() for _ in range(5)];A=np.array(A);AT=A.T;r="YES" if np.array_equal(A,AT) else "NO";print(r)' 私の感想 awkで行列を扱うのは地獄になりそうだったのでPythonのNumpyを使って解きました。 解説ではdatamashコマンドが紹介されていて勉強になりました。 まだまだ知らないコマンドがたくさんありますね。 便利なコマンドは少しずつ覚えておきたい所存です。 また、二次元配列の入力に関しては以下の記事を参考にさせていただきました。 ...

作成日: 2023年4月23日 · 最終更新日: 2024年3月30日 · Yusuke Kato

YusukeKatoBlog

私について 自己紹介 ロボットやシェル芸、ゲーム、ゲーム製作、小説執筆などで日々遊んでいます。 大学ではロボットについて勉強していました。 現在もロボット開発に携わらせていただいてます。 備忘録的な記事をまとめていくのでよろしくお願いします。 最近はペットの日記も始めました。 開発したサービス シェル芸オンラインジャッジ SNSアカウント GitHub : YusukeKato X/Twitter : yusukekato_sub X/Twitter : yusukekato_main 昔のブログ Zenn : yusukekato Qiita : ykpages HatenaBlog : YKpages 趣味の小説 カクヨム : yusuke_kato 本ブログについて 免責事項 本ブログを利用する上で生じる損害等の一切の責任を負いかねますのでご了承ください。 ライセンス 本ブログにおける全ての著作物の権利はYusukeKatoが所有します。 本ブログのソースコードは Apache License 2.0 で公開されています。 本ブログに存在する文章や画像、動画などの全ての著作物は CC BY-NC-ND 4.0 で公開されています。 プライバシーポリシー 本ブログではGoogle Search ConsoleとGoogle Analyticsでアクセス解析等を行っているため、 あらかじめ了承ください。 GitHubリポジトリ 本ブログはGitHubで公開されています。 本ブログのGitHubリポジトリ

作成日: 2023年4月14日 · 最終更新日: 2026年3月5日 · Yusuke Kato

ChatGPTでシェル芸勉強会の問題が解きたい

はじめに 月額20ドルを支払ってGPT-4が利用できるようになったので、 ChatGPTにシェル芸勉強会の問題を解いていただこうと思います。 シェル芸勉強会の問題をお借りします(すみません)。 今回は第63回シェル芸勉強会の問1と問2に挑戦してもらいます。 リンク 利用モデル:GPT-4 https://engineers.ntt.com/entry/2023/03/09/091735 第63回ビッグハンドタウンシェル芸勉強会の問題と解説 実行環境:websh 問1 : 九九の合計 私が入力した文章 ワンライナーのBashスクリプトで九九の掛け算(1×1~9×9まで)の答えの合計を求めてください。 ChatGPTが書いたBashスクリプト sum=0; for i in {1..9}; do for j in {1..9}; do sum=$((sum + i * j)); done; done; echo $sum 実行結果 2025 私の感想 ワンライナーと言えるかは怪しいですが、普通に解いていただけてとても嬉しいです。 デバッグをする必要もなく、一発で実行可能なスクリプトを出力してもらえました。 「GPT-4が凄い!」という噂は間違いではないのかもしれません。 この調子でもう一問、解いていただきましょう。 問2 : おつりの出し方 私が入力した文章 ワンライナーのBashスクリプトで9132円の支払いに10000円札で払ったときのおつりの出し方を求めてください。 ChatGPTが書いたBashスクリプト change=$((10000 - 9132)); echo "おつり: ${change}円"; echo "5000円札: $((change / 5000))"; change=$((change % 5000)); echo "1000円札: $((change / 1000))"; change=$((change % 1000)); echo "500円硬貨: $((change / 500))"; change=$((change % 500)); echo "100円硬貨: $((change / 100))"; change=$((change % 100)); echo "50円硬貨: $((change / 50))"; change=$((change % 50)); echo "10円硬貨: $((change / 10))"; change=$((change % 10)); echo "5円硬貨: $((change / 5))"; change=$((change % 5)); echo "1円硬貨: $((change))" 実行結果 おつり: 868円 5000円札: 0 1000円札: 0 500円硬貨: 1 100円硬貨: 3 50円硬貨: 1 10円硬貨: 1 5円硬貨: 1 1円硬貨: 3 私の感想 かなりの力技で問題を解いてもらいました。 ワンライナーと言えるかは分かりませんが、普通に解いていただけてとても嬉しい気持ちです。 今回もエラーが出ることはなく、すんなり実行できました。 もっといろんな問題で試してみたいですね。 ...

作成日: 2023年4月12日 · 最終更新日: 2024年3月30日 · Yusuke Kato

シェル芸botで遊びたい(Bash)

はじめに Twitterのシェル芸botで遊ばせていただく方法を紹介します。 遊び方 シェル芸botはハッシュタグ「シェル芸」をつけてシェル芸をツイートすると、 自動で実行して出力結果を教えてくれます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます (ただし、自分のアカウントがシェル芸botアカウントにフォローされている必要があります)。 echo テスト 画像生成 シェル芸botは画像生成もできます。 imagesディレクトリの中にpngやjpg、gifの画像を配置すると、 その画像を添付してツイートしてくれます。 たとえば、以下のようなツイートをすると「テスト」と書かれた画像を引用リツイートで返してくれます。 textimg "テスト" -o images/a.png Python シェル芸botではPythonスクリプトも実行できます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます。 Pythonの豊富なライブラリも利用できるので遊び方は無限大です。 python3 -c "print('テスト')" C/C++ シェル芸botではC言語やC++言語も実行できます。 たとえば、以下のようなツイートをすると出力結果「テスト」を引用リツイートで返してくれます。 高速に処理したいときなどに役立ちます。 cat<<EOF>a.cpp #include <bits/stdc++.h> int main() { printf("テスト\n"); } EOF g++ a.cpp ./a.out おわりに シェル芸botの遊び方を紹介しました。

作成日: 2023年4月11日 · 最終更新日: 2024年3月30日 · Yusuke Kato

HTML数式表示テスト

はじめに HTMLで数式を書こうと思います。 数式表示テスト 数式を表示するテストです。 HTMLのheadタグ内に以下を記述します。 <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js> </script> TeXの要領で数式を記述します。 \[ x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} \] 以下のように表示されます。 [ x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} ] 本文中に( E = mc^2 )のように数式を書くこともできます。 参考 : MathJaxによる数式表現 おわりに いい感じに表示されました。 今日も満足度は高いです。 HTMLを直書きするのはどうなんだろうと思いつつも、 いい感じに表示はされているので、 問題はなさそうだと思っております。 このブログで数式を記述することがあるのかどうか。 時代に逆行している気もしています。 そんな感じです。 それでは、また。

作成日: 2023年4月10日 · 最終更新日: 2024年3月30日 · Yusuke Kato

自作ブログ開始

はじめに いろんなところにブログ記事を書いてしまったがために、 自分自身でもどこに何を書いたのかよく分からない状態になってしまいました。 はてなブログもQiitaもZennも素晴らしいサービスではあるのですが、 やっぱりブログは一本に絞りたい気持ちもあります。 ということで、自作ブログを始めます。 自作と言ってもHTMLとCSSを頑張って書くだけです。 どこまで自作できるものなのかもよく分かっていません。 それでも自分で書いてみるというのは勉強になりそうなので良いと思います (学生の頃にも同じことを思ってブログを作った気がします……)。 2024年3月30日に追記:markdownをHTMLに変換するスクリプトを作成しました。 ブログの特徴 気をつけたいポイントは以下の三つです。 運用しやすいこと 執筆しやすいこと できるだけシンプルにすること ブログは細く長く続けていきたいので、 できるだけシンプルに保ちつつ、 楽に執筆できるようにしていきたい所存です (HTMLを直に書いている時点でもうダメかもしれませんが……)。 あとはGitHubにもファイルを置いて管理しやすくします。 コード表示テスト このブログでは、シェル芸の記事やロボット関係の記事も書いていきたいと思ってます。 ということでちょっとテストします。 以下のシェル芸は長い猫を時計の針のように回転させるものです。 p=.png;c=convert;longcat -o a$p;$c xc:[500x500] b$p;for((i=360;i<720;i+=10));do $c a$p -rotate +$i c$p;t=$(echo "($i-540)*3.14/180"|bc -l);$c b$p c$p -gravity center -geometry +$(echo "-99*s($t)"|bc -l)+$(echo "99*c($t)"|bc -l) -composite i$i$p;done; $c i*$p images/a.gif このシェル芸を実行して生成したGIF画像が以下のものです。 回る猫のGIF画像 おわりに いい感じに表示できましたね。 今日の満足度は高めです。 できれば一週間に一度くらいのペースで記事を更新できたら良いな~と思っておりますので、 今後も何卒よろしくお願いします。 それでは、また。

作成日: 2023年4月8日 · 最終更新日: 2024年3月30日 · Yusuke Kato