2025年6月11日水曜日

eclipse C言語での自作関数のヘッダファイル登録

音声なしの動画はこちらから


  1. プロジェクトを作成する

  2. プロジェクトの中で、ソースフォルダsrcを作成する





  3. ソースフォルダの中に、main関数を記述するソースファイルを追加する

  4. プロジェクトの中に、ヘッダファイルを入れるincludeフォルダを作る

  5. includeフォルダの中に、ヘッダファイルを作成する


  6. main関数を書くソースファイルの中に、自作ヘッダのincludeを含めたmain関数を作成

  7. 自作関数を作成する場合は、srcフォルダにソースファイルを追加して記述する


  8. 自作関数をヘッダファイルに記述して、main関数から呼び出せるようにする

  9. main関数で自作関数を呼び出す


  10. そして実行すると、自作関数がmain関数の中で実行できるようになります





2025年1月7日火曜日

海外での失敗例

 国際会議の出席のため、海外に行く機会も多いですが、慣れない海外では色々な失敗もしてきました。気を付けるためにも書いておきます。

1. 飛行機でのトラブル

飛行機は長時間乗っているので、そこでのトラブルも多いです。一度エアースポットに入り、飛行機が急上昇した後、急降下したときがありました。そのときはあまりの揺れに、身を守ろうと身を固めたつもりが、隣の人を殴ってしまいました。隣の人に謝り、気にしていないようだったのでよかったのですが、危なかったです(台湾)。スーツケースがロストしたときもありました。ラスベガスに行ったとき、スーツケースがロストしたらしく、着替えなどを現地調達しました。諦めていたのですが、最終日にスーツケースが届けられ、そのまま持って帰りました。


2. 入管でチェックを受ける

外国に行った時にまず入国するときに入国チェックを受けます。国際会議は会議名が長く、覚えられていないときが多いです。またホテル名も難しい名前が多く、すぐ思い出せません。稀に、会議名や宿泊するホテル名を聞かれて、忘れてしまって回答できないと、ちょっと怪しまれる感じがします。すぐ出せるように印刷物などの用意があると安心です。一度答えられなくて質問攻めにあったときがありました(カナダ、バンクーバ)。

以前シンガポールで日本に留学して僕が担当していた学生の親に、留学生への届け物を頼まれました。郷土料理の漬物のようでしたが、税関で説明に困りました。何とか通してもらい、無事学生に届けました。


3.海外に持っていくもの

海外出張に行くときには、「パスポート」、「財布」、「パソコン」を持っていけば最低限仕事ができると考えています。今だとスマートフォンも必要かと思います。オーストラリアに出張した時、財布を持っていくのを忘れて大変な思いをしました。キャッシュレスが進んでいますが、まだまだ財布は必要です。


4. 団体での移動には注意

何度か学生の研修旅行を引率したことがあります。イタリア・ローマから帰国するとき、最終日空港に到着して全員出国審査を完了し、後は搭乗だけというときに、学生が体調不良で倒れてしまいました。学生は病院に救急車で運ばれ、引率教員の中で一番若かった僕は上司の指示で倒れた学生と共にイタリアに残ることになりました。渡されたメモには病院名がイタリア語で書かれており、僕は一人もう一度イタリアに入国し、病院に向かいました。そのときはユーロも全て使い切ってしまっていて、スーツケースも飛行機内でまだ出されておらず、何とか病院に到着しました。学生と会えたときは、こちらの方が嬉しかったです。次の日学生も回復して、無事帰国することができました。

オーストラリア・シドニーに引率したとき、学生が「知恵の輪」を持参してきました。スーツケースに入れておけばまだ良かったのですが、オーストラリアから帰国時に手荷物で飛行機に持ち込もうとして、手荷物検査で捕まってしまいました。知恵の輪といっても、本格的なもので、オモチャのようなものではなく、びっくりするくらい立派なものでした。見ようによっては武器にも見えるくらいです。学生が質問されていたので、フォローしようと思いましたが、知恵の輪の説明が英語でわかりません。日本語でも難しい説明に苦労して、学生に一度は諦めるように言ったのですが、実演でもしたのか最終的に通してくれてよかったです。

大勢の学生と一緒に行くと、スリ、飲み過ぎ、ホームシック、門限に戻らないなど色々あって苦労もしましたが、楽しさもありました。


5. 海外での生活

僕は海外の肉類が苦手で、ずっと果物を食べています。タイではドラゴンフルーツ、中国ではスイカなどその国の果物を食べます。機内食でも出来るだけFishを選びます。食事はいつも苦労します。水も当たり外れがあり大変です。

フィリピンに行ったとき、シャワーを浴びようとしたら、熱湯しか出てこない時があり、大変でした。冷水なら我慢できるのですが、熱湯は無理でした。

ボストンでは、物価が高く、安い宿に泊まったら、オートロックでもないのに下着姿のまま締め出されてしまって大変でした。

海外から帰ってくると、日本人なので当然なのですが、日本の良さを感じます。


6. 災害・テロには注意

シドニーにいた時、滞在していた大学から数キロのところで、爆弾テロがあり、学生もいたので外出禁止にしました。

現地で情報を得ようとしましたが、その当時は難しく、世界的なニュースになっていたので、日本に連絡を取り、テロの状況を確認しました。その後、状況が回復して当初の予定をこなすことができましたが、大きな衝撃を受けました。

タイでは出国後直ぐに泊まっていた付近で爆弾テロがあったり、フィリピンではハリケーン、韓国チェジュ島では台風と、自然災害も十分注意が必要です。


海外出張では色々失敗してきましたが、これから増えるであろう海外出張に学んだことを活かしていきたいです。願わくば、僕は体が大きいのでビジネスクラスに乗ってみたいです。


2024年11月21日木曜日

Webex Bot X: Gamini APIを利用する

 生成AIをAPIを使って実行してみましょう。今回はGeminiを使ってみます。
https://ai.google.dev/gemini-api/docs?hl=ja

  1. API keyを取得する
    上記URLにアクセスすると、「Gemini API で構築を開始する」がありますのでクリックしてください。


    Gemini API クイックスタートのページで、Google AI Studio から API キーを取得するをクリックしてください。

    Develop in your own environmentのGet API Keyをクリック

    プライバシーポリシー同意する。

    APIキーを作成をクリックする。

    ここで表示されるKeyを保存しておきましょう。


  2. Google Colabで試してみる
    Gemini API クイックスタートのページにあるColabノートブックで試すをクリックすると、Colabノートブックが開きます。


    その中のAPI Keyの部分を、先ほど取得したKeyに置き換えます。


    そして、全て実行してみましょう。
    Generate textの部分が、Geminiに投げるプロンプトの部分です。
    いろんなパターンで試してましょう。




2024年10月24日木曜日

Webex Bot 3:lambdaを定期実行する

 第3回目です。今回はlambdaを定期実行していきます。

定期実行したいlambdaの画面にあるトリガーを追加から、このlambdaのトリガを設定していきます。


トリガとしてはEventBrigdeを選択し、新しいルールを作成します。
ルール名や説明については、内容に合わせて設定してください。
スケジュール式とイベントパターンがありますが、今回は定期的に実行させるため、スケジュール式を選択します。
ここでcron式を記載しますが、一旦仮で入力しておきましょう。


保存してlambdaに戻ってから、設定>トリガから登録したトリガの詳細を見ていきます。

確認すると、日本時間(ローカルタイムゾーン)にすると、異なる日に時なっていますので修正します

編集ボタンから、数値を変更していきながら、自分が実行したいパターンになるように決めてください。

編集したら[次へ]、[ルールを更新]をしてください。
これにて定期的に実行されるようになります。


2024年10月16日水曜日

大学時代に身につけたいこと

 大学生活は4年間で長いようで短くもあります。この4年間は個人個人でまったく違ったものになります。充実した大学時代にしてもらいたいと思います。ここでは、学術的・社会的な面で話をしてみます。


(1) 体系的な学問として学修する

色々な授業を受けていて、それぞれの授業が難しいとそれで精一杯になってしまいます。大学の授業は授業同士が繋がっていて、カリキュラムツリーを形成しています。自分が目指したい分野にどのような学術的な要素があるかを確認して、大きな視野で授業の立ち位置を見ることができると、授業に対しての姿勢も変わってきます。授業がどのような意味を持っているかを考えてみるのも良い機会となります。先生に尋ねてみても、どの先生も学生が授業に関心持つことは嬉しいので、快く教えてくれると思います。


(2) 学問を使えるスキルを身につける

現代はAI・データサイエンスの技術が普及し、社会活動をするときに欠かせないツールとなってきました。授業で得られた知識を、実際に使えるスキルを持っておくと、理解の面でも実用面でも役に立ちます。一番身近なスキルとしては「エクセル」ではないかと思います。エクセルはPCにほとんどインストールされていますし、社会人になっても必須のツールです。このエクセルを使いこなして、データ整理、データ処理・集計、簡単な統計処理などできると、非常に重宝されます。スキルというとプログラミングが重視されますが、エクセルでも十分対応できる面があります。プログラミングが苦手という人は、代わりにExcelを使いこなせるだけで、活躍の場が広がります。

次にオススメのスキルはプログラミングになります。プログラミングはエクセルで可能な処理に加え、機械学習や最適化など、より高度な数学的な処理が可能です。エクセルで開けないような膨大なデータ量を持つファイルも、プログラムならば対応できます。プログラミングの良いところは、自分の考えた処理・システムをプログラミングで実現できるところだと思います。僕はハードウェアは苦手で、もの作りはできませんが、プログラミングでの色々な処理を行うことができ、それが研究に繋がっています。プログラミングは、僕自身の研究の幅を、格段に広げてくれたツールの一つです。


(3) 人間関係とコミュニケーション能力

一般的に就職活動には、コミュニケーション能力が大事と言われます。大学では、出身地、興味、年齢が違うなど様々な学生がいて、社会の一つの縮図のような集団です。この中での人間関係は、人にとっては、一生ものの宝になるかもしれません。このような話をしていても、僕自身は人間関係やコミュニケーションをとることが苦手な人間です。このような人間の場合、ある集団の枠に入り、立ち位置が作れれば、関係を形成しやすいと思います。具体的には、アルバイトで頼られる立場や、サークル活動で、役につくことでしょうか。人は立場ができれば、コミュニケーションをとる機会が自然に多くなり、慣れてきます。周りの人間の役に立つということを、良いバランスで考えることは、利他的な考え方となり、良い影響を与えると思います。


(4) チャレンジできる機会を使う

学生という立場は色々なことにチャレンジできる期間だと思います。学生の社会活動としては、サークル活動、アルバイトなどが代表例かと思いますが、それ以外にも学祭、資格試験、ハッカソンなど色々な活動があります。もちろん金銭的な負担はあるのですが、自身の範囲で、学生時代にしか出来ないことを1つでもチャレンジしてみると良いかと思います。

20代での活動が30代で活きてくるのではないかと思います。今の活動が次の10年に活きてくるのだと、僕自身今になって実感しています。


学生時代は長いようで短いものです。社会人になると自由度が極端に減るので、学生の間にチャレンジしてみるのをおすすめします。

2024年9月12日木曜日

Webex Bot 2:lambdaからメッセージを送る

 今回は第2回目。前回Postmanで実行した内容をlambdaで実行してみたいと思います。


1.lambdaを起動する
ここでは、AWS academyで実施していますが、通常のAWSでも問題ないです。
右上の[関数を作成]から、新しい関数を作成します。


関数名:何か名前をつけてください
ランタイム:Python3.10 ※layersに設定するファイルをcolab(python3.10)で作成するため
アクセス権限:aws academyの場合設定
詳細設定:関数URLを有効化 認証タイプはNONE
上記以外は、デフォルトのままでOKです。

2.コードを記載する
lambdaは、通常lambda_handler関数が実行されます。※変更も可能ですが、ここではこのまま行きます。
event内にpostされた際に送られてきた情報が入ってきます。
まずはpostされた内容に関係なく情報を送信するため、4行目以降にコードを書いていきます。

前回のPostmanで実行したメッセージ送信のコードをコピーして貼り付けます。
import json
import requests


def lambda_handler(event, context):
    # TODO implement
        
    url = "https://webexapis.com/v1/messages"
    
    payload = json.dumps({
      "roomId": "Y2lzY29zc*****kMGY5Njkw",
      "markdown": "こんにちは"
    })
    headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YmYyMGQ****8cf0-2917b2d84a0f'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

コードを変えると、デプロイを求められるので必ずデプロイしましょう。


実行するときは、[Test]から実行します。イベント情報の登録が必要になりますが、イベント名はなんでもOK。イベントJSON情報は変更せずにそのままで良いです。


このまま実行しても、No module named 'requests'のエラーが出ます。
そのためrequestsが読めるようにlayers登録をしていきます。

3. layersの作成
layersの登録は、Lambda内のレイヤーから実施していきます。
右上の[レイヤーを作成]から登録します。
名前はなんでもOK
requestsモジュールの入ったzipファイルについては下記のコードから作成して、zipファイルをあげていきます。
!pip install -t /content/drive/MyDrive/Layers/requests/python requests

!find /content/drive/MyDrive/Layers/requests/python -name "*.pyc" -exec rm -f {} \;
!find /content/drive/MyDrive/Layers/requests/python -name "*.txt" -exec rm -f {} \;

!rm -rf /content/drive/MyDrive/Layers/requests/python/tests
!rm -rf /content/drive/MyDrive/Layers/requests/python/__pycache__
!rm -rf /content/drive/MyDrive/Layers/requests/python/*/tests
!rm -rf /content/drive/MyDrive/Layers/requests/python/*/__pycache__

!cd /content/drive/MyDrive/Layers/requests && zip -r /content/drive/MyDrive/Layers/requests.zip .


4.layersの登録
lambdaの関数に戻って、1番下のレイヤーの追加から、先ほど追加したレイヤーを追加します。
カスタムレイヤーから選択してください


5.実行確認
これで実行すると問題なく実行できました


以上




2024年9月3日火曜日

Webex Bot 1:Botからメッセージを送る(Postman)

 1.Webexアカウントを作成
Webexアカウントがない場合は、作成。 
https://web.webex.com/sign-in


2.Botを作成
https://developer.webex.com/docs/bots
Create a Botから作成


Botを作成すると、access tokenが表示されます。必ず、tokenは保存しておいてください。


3.Botを追加
指定されたスペースに、Botを直接検索して追加する
連絡先>ユーザを追加でusernameを入れる



4.メッセージ送信

4.1room Idの取得
メッセージ送信には、room Idが必要になるため、room Idを取得するAPIを実行
List Rooms:https://developer.webex.com/docs/api/v1/rooms/list-rooms

ここで表示されるIdがroom Idです。



4.2 メッセージ送信
メッセージ送信のAPIを実行
Create a Message:https://developer.webex.com/docs/api/v1/messages/create-a-message



実行されると、このようにメッセージが送られます。


2024年8月29日木曜日

データサイエンスにおける研究テーマの設定(学生向け)

 研究テーマの設定は重要であり、誰もが悩むことだと思います。今回はデータサイエンスにおける研究テーマの設定についてお話します。

データサイエンスの基本要素は、データ処理、コンピューティング、確率・統計・機械学習の理論です。この基本要素をベースに、社会の課題解決を図っていきます。また共同研究も多いためその場合はそのままテーマが決まりますが、自分でテーマ設定をすることは、悩みも多いと思います。

多分学生さんがテーマを設定するときに、「これで研究になるのだろうか?」、「これでは作っただけ?」、「新規性がないと研究でない?」などを考えるのではないかと思います。


(1) 研究レベルを確認する

一口に研究といっても、卒業研究からジャーナル投稿レベルまで様々なレベルがあります。自身の立場からどのレベルを目指すのかを確認しましょう。卒業論文なら研究室に過去のものがあると思いますし、ジャーナルでも見られる論文はたくさんあります。


(2) 自分の興味のある課題を探す・見つける

研究は日々苦労があります。それをやり続けるためには、自分が興味のあるテーマが一番です。現在は技術進歩が速く、不可能と思われることでもある程度は実現可能な場合もあります。精度の問題は最後までついてきますが、自分の興味あるテーマを見つけられれば幸せです。

データサイエンスという面で考えると、社会の課題解決を目標の一つとするので、色々な立場の方々と話をすると、その分野の課題感が見えてきます。それが研究テーマにつながったりします。

またデータサイエンスでは、データから研究を行うデータドリブンの場合も多いです。自分や研究室でデータがある場合、その分析を主目的とすることで、研究として仕上げていく場合も多いです。また近年はオープンデータも質の良いものが多くなっており、十分研究に利用できるものも多いです。僕自身、オープンデータを用いて、論文を提出しています。

どうしても研究テーマが自分で決められない場合は、研究室の先生に相談するのが良いでしょう。研究室で活動しているテーマを紹介してもらうと、研究が進めやすいです。(実はテーマ紹介をすることは非常に多いです)


(3) 参考文献を探す・見つける

テーマ候補が見つかったら、参考文献を探して、テーマに対してどのように研究を行なっているかを確認します。僕が一つの研究を行うときには、最低50本の参考文献を調査して、自分の論文の位置付けを明確にします。1日1本の参考文献を地道に調査して、整理することが重要です。論文にこの調査した参考文献に対して自分の研究の位置付けをはっきりさせましょう。自分の研究の特徴を明確に記述できるといいですね。


(4) 外部発表にチャレンジする

卒業研究、修士論文、博士論文など学内に発表機会が用意されていると思いますが、学会発表などの外部での発表は、自身の実績にもなりますし、色々な意見ももらえますので、チャレンジすると大変な面はありますが、メリットも多いです。期日も決まっていますので、学会発表をターゲットに研究を整えていくと、後々学内での活動に非常に役立ちます。(指導教員も外部発表は責任が伴うので、きちっと指導してくれると思います) また国際会議も視野が広がるので、機会が許せばチャレンジするといいでしょう。僕自身、英語での発表で特に質疑での受け答えは、僕自身の英語力を大きく向上させてくれました。


(5) 研究の姿勢

研究はやはり精度が向上しないと中々結果につながりません。データサイエンスにおいて、やはり研究精度を向上するには、基本要素である、データ処理、コンピューティング、確率・統計・機械学習の日々の研鑽が必要です。この知識は、どのような場面でも効果的なスキルですので、学生のうちに身につけてもらいたいです。

研究は日々苦労が多く、進めていくことが大変なときが多いです。しかし継続的に時間をかけていけば、結果につながるときが非常に多いです。学生時代の研究では、どれだけ時間をかけられたかに研究内容が比例するように思えます。自分の研究に対して、じっくり時間をかけて取り組んでもらいたいです。僕自身も、一歩でも前進するように、日々取り組んでいます。


2024年7月17日水曜日

EC2上でAPIを定期的に動かしRDSに格納とFlaskでの可視化

 EC2上でAPIを定期的に動かして取得したデータをRDSに保存します。またそのデータをFlaskでWebアプリとして表示していきます。

(1) APIの動作確認

利用するAPIは、International Space Station Current Location (http://open-notify.org/Open-Notify-API/ISS-Location-Now/) で国際宇宙ステーションの現在位置を返してくれます。まずPostmanで実行してみます。指定されたURLを入力するだけです。

Pythonコードへ変換すると、次のようになります。
APIの動作確認ができました。もう少し、キレイなコードにして、時刻も秒までわかりやすく表示します。

(2) EC2上で取得できるようにする
次にEC2上でAPIを取得できるようにします。
EC2の立ち上げは下記を参照してください。
・EC2でサーバを立ち上げてクラウドシェルで接続 (https://smizunolab.blogspot.com/2023/10/ec2.html)
今回は「ec2-user」のままで実施します。pythonはインストールされていますがpipがありませんので、pipをインストールしてください。
$ sudo yum install python3-pip
Pythonファイルを作成して、(1)で実施したプログラムを動かしてみます。ファイル名は「iss_api.py」とします。
$ python3 iss_api.py

(3) データベースの用意
今回はAWS RDSをCloud Shellから使います。下記を参考にしてください。
AWS RDSでデータベースを作成しCloudShellから接続してSQL文からデータを格納する (https://smizunolab.blogspot.com/2024/06/aws-rdscloudshellsql.html)
同じEC2上で、MySQLを動かして実施することも可能です。その場合は下記を参考にしてください。
EC2でMySQL のインストール (https://smizunolab.blogspot.com/2023/11/ec2mysql.html)
MySQLで実施する場合、GPG-KEYの更新を忘れないようにしてください。
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

データベース、テーブルの作成をしていきます。
データベース名:iss、テーブル名:point で作成します。
RDS(またはMySQL)に接続し、SQL文を発行します。

(4) EC2上のPythonプログラムからデータベースへ情報の格納
次に国際宇宙ステーションのAPIを使って情報を取得し、データベースに格納していきます。下記を参考にしてください。
・Pythonでデータベースに情報を格納する (https://smizunolab.blogspot.com/2024/07/python.html)
MySQL Connectorのインストール:pip install mysql-connector-python
MySQL Connectorのインストールを行い、次のプログラムを実行します。プログラム名は「iss_api_db.py」とします。MySQLのhostはRDSを使っている場合は、エンドポイントを利用します。MySQLをEC2上にインストールした場合は、localhostのままです。
$ python3 iss_api_db.py
select文でテーブルを確認すると、データが格納されているのがわかります。

(5) プログラムの定期実行
cronを使って、1分に1回定期実行していきます。まず、cronieをインストールします。
$ sudo yum install cronie
$ sudo systemctl start crond
$ sudo systemctl enable crond
ターミナルでcrontab -eコマンドを実行し、crontabの編集を開始します。
$ crontab -e
書き込む内容
* * * * * /usr/bin/python3 /home/ec2-user/iss_api_db.py 

$ chmod +x iss_api_db.py 
データベースを確認すると1分毎格納されていることがわかります。

(6) Flaskを使って、最新5件のpoint情報を地図上に表示する
Flaskを使って、pointテーブルにある最新5件の情報を地図上に表示します。
参考:EC2にRDSから情報を取得し、FlaskでWebアプリとして表示させる (https://smizunolab.blogspot.com/2024/07/ec2rdsflaskweb.html)
Flaskのインストール
$ pip install Flask
上記の参考リンクと同様に以下のようにディレクトリ構成を作成します。
iss_app/
   ├── app.py
   └── templates/
                  └── index.html
app.py


index.html


注意:
Flaskはデフォルトポート5000なので、セキュリティグループからインバウンド設定に5000ポートを許可する。

$ python3 app.py
今回はテスト用なので「http」でアクセスしています。ブラウザによっては、デフォルトが「https」なので接続時にエラーになる可能性もあります。

ここまでの内容で、APIで定期的に取得した内容をDBに格納し、それをWebアプリとして表示することができました。

注意:
cronに関しては、
$ crontab -e
で開き、対象行を削除するか、コメントアウト(#をつける)をしてください。