プログラミングの芽

面白そうな技術を使って、楽しいことやりたい

【Github】Chrome拡張機能ストアのバッジがinaccessibleになる【README】

こんにちは

 

皆さん、GithubなどでREADMEを書くとき、以下のライセンスやバージョンなどのバッジをつけていますか?

 

私はなんかかっこいいからつけてます。

 

バッジはこのサイトで動的に生成することができ、Chrome拡張機能ストアの評価やダウンロード数(ユーザ数)など外のサービスの情報も使えます。

私も意気揚々と、Chrome拡張機能ストアにも公開しているGithubリポジトリのREADMEにダウンロード数バッジなどを入れようとしたら、以下の様にinaccessibleと出ました。

 

少し試行錯誤したところ、どうやら以下の時に上記状態になることが分かりました。

・ストアURL(拡張機能名)に日本語が含まれている

 

解決策としては、拡張機能を多言語対応(主に英語)させるだけです。

 

以上

ChatGPT APIとVOICEPEAKを連携してAIとお話する

VOICEPEAKがPythonから使えるようになっていたので、最近話題のChatGPTに声を与えてみました。
VOICEPEAKをPythonで使う方法については、以下記事を参照してください。 atarms.hatenablog.com 今回は上記記事のスクリプトを、text2voicePeak.pyとして保存したものを使います。

あと、ChatGPT APIはそのまま使うとユーザーとのやり取りを一切記憶しないので、今回は記憶する実装にしました。 詳細は調べてね。

下に置いてあるコードを使うと動画みたいな感じになります。

以下が今回のコード

import openai
from text2voicePeak import playVoicePeak

openai.api_key = "OpenAIのサイトから発行したものをペースト"

# ChatGPTクラス
class ChatGPTClass:
    def __init__(self):
        self.messages = []
        self.ai_response = ""
        # role:systemで初期設定をしたければ、以下で読み込む。なくてもいい
        # self.loadConfig("chatGPTSetting.txt")

    def chatProcess(self, userMessage):
        # ユーザの回答を保存
        self.messages.append({"role": "user", "content": userMessage})

        # APIを使ってChatGPTの回答を生成
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.messages)
        self.ai_response = response['choices'][0]['message']['content']

        # AIの回答を保存
        self.messages.append({"role": "assistant", "content": self.ai_response})

        return self.ai_response

    def loadConfig(self,fileName):
        with open(fileName, "r", encoding="utf-8") as f:
            self.messages.append({"role": "system", "content": f.read()})

使用例

# chatBotクラスのインスタンスを生成
chatbot = chatBot()
# 会話を始める
while True:
    # ユーザの入力を待機
    userMessage = input("あなた:")
    if(userMessage == "_log"):
        # このセッションのChatGPTとのログを表示
        for message in chatbot.messages:
            print(message["role"],":",message["content"])
        continue

    # ユーザの入力をchatProcessに渡す
    chatbot.chatProcess(userMessage)
    # AIの回答を表示
    print("AI:",chatbot.ai_response)

    # VoicePeakでAIの回答を音声で再生
    playVoicePeak(chatbot.ai_response)

VOICEPEAKナレータの種類も増えてきてますし、今回の方法使ってギャルゲ作ってくれる人を切に望んでいます。

VOICEPEAKをPythonから呼び出す

VOICEPEAKがコマンドラインから使えるようになっていたので、Pythonから呼び出してみました。
今回、チャットボットの回答を音読させるようにしたので、生成された音声ファイルは使い捨てています。

PythonからVOICEPEAKを使うには、subprocessモジュールを使ってvoicepeak.exeを実行します。
voicepeak.exeのパスや出力先、ナレーター名や感情パラメータなどを引数として渡します。
出力されたwavファイルをwinsoundモジュールで再生しています。
再生後、wavファイルを削除しています。

以下が今回のコードです。

import os
import subprocess
import winsound

def playVoicePeak(script , narrator = "Japanese Female 1", happy=50, sad=50, angry=50, fun=50):
    """
    任意のテキストをVOICEPEAKのナレーターに読み上げさせる関数
    script: 読み上げるテキスト(文字列)
    narrator: ナレーターの名前(文字列)
    happy: 嬉しさの度合い
    sad: 悲しさの度合い
    angry: 怒りの度合い
    fun: 楽しさの度合い
    """
    # voicepeak.exeのパス
    exepath = "C:/Program Files/VOICEPEAK/voicepeak.exe"
    # wav出力先
    outpath = "output.wav"
    # 引数を作成
    args = [
        exepath,
        "-s", script,
        "-n", narrator,
        "-o", outpath,
        "-e", f"happy={happy},sad={sad},angry={angry},fun={fun}"
    ]
    # プロセスを実行
    process = subprocess.Popen(args)

    # プロセスが終了するまで待機
    process.communicate()

    # 音声を再生
    winsound.PlaySound(outpath, winsound.SND_FILENAME)

    # wavファイルを削除
    os.remove(outpath)

使用例(最小)

playVoicePeak("こんにちは")

VOICEPEAKのコマンド引数については、以下を参考にしました。
voicepeak v1.2.1のコマンド - takashiskiのブログ

公式マニュアルにも書いてあるみたいなんですけど、記述を見つけられませんでした・・・

VOICEPEAKとChatGPTを連携した記事を書きました。

atarms.hatenablog.com

GoogleのGeocodingAPIで住所の正規化をする

こんにちは。
何の処理もされていない各々が入力した、揺らぎまくりの住所録データを使ったシステムを作ることになってどうしたもんか試していたところ
Google Maps PlatformのGeocoding APIを使えばいい感じにフォーマットしてくれたので、メモとして残しておきます。

今回の目的としては以下になります。
- 住所の単純な正規化(半角全角など)
- 建物名以降は除外

Geocoding APIとは

住所→座標および座標→住所(逆Geocoding)の変換を行うAPIです。
使い方などの詳しいことは、以下の公式のドキュメントを読んでください。

developers.google.com

応答などのドキュメント

developers.google.com

実装(Python)

シンプルにAPIを使う場合

import pandas as pd
# 住所録ファイル読み込み
df = pd.read_excel('./sample.xlsx')

import googlemaps

# GoogleMapsAPI用に取得したAPIキー
Key = "取得したAPIキー"

# GoogleMapsAPI用にAPIキーを返す
gmaps = googlemaps.Client(key=Key)

# 結果格納用
result = []

for i in range(len(df)):
    # 各行のデータを取得
    row = df.iloc[i]
    # ジオコーディング
    geocode_result = gmaps.geocode(row[0], language='ja')
    result.append(geocode_result)

返ってきた結果から、フォーマットされた住所を抽出する

formatResult = []

# 以下でフォーマットされた住所を抽出
for r in result:
    # 元データが不正だったのか、たまに空のケースあるので条件分岐
    if r != []:
        data = r[0]
        #"formatted_address"に入ってる。" "でsplitすると、[1]に丁目番地まで、[2]以降に建物名などが入ってくる
        formatResult.append(data["formatted_address"].split(" ")[1])
    else:
        formatResult.append(['None'])
# dfに変換
dfsavedata = pd.DataFrame(formatResult)
# xlsxファイルに保存
dfsavedata.to_excel('./output.xlsx')

以上で、ばらばらだった住所録のデータを丁目番地以降削除した状態でフォーマットできます。

問題

建物名が含まれた住所で、時々丁目番地も一緒に消された結果が返ってくることがあります。
前処理でどうにかなるのかもしれませんが、今回は面倒くさかったので生データをそのまま入れた結果です。
まぁ少数なので、その部分は手で直せばよいかなという感じです。

finalのCOTSUBU for ASMRを買った話(1カ月使用しての感想を追記)

※約1か月使用しての気になる部分を追記しました

こんにちは。
私は以下のサイトを作ってしまうぐらいにはASMRが大好きです。

www.vtasmr.com

そこで、今回は当然のように購入したfinalのCOTSUBU for ASMRについて、実際にASMRを聴いてみて感じたことを、ものすごく簡単に書きたいと思います。
普段はAirPods ProでASMRを聴いています。(定番のSE215やE500、HSE-A2000PNは所持していますが、それでもAirPods Proの音が私は好きでした)

私がCOTSUBU for ASMRに期待していたこと

  • 装着感
  • 寝ホンとして使用できるか

以上2点です。
というのも、ASMRはやはり寝る時に聴くことが多いです。 そんな中で、耳から簡単に外れてしまったり、耳を枕に押し付けたときに痛くなったり等が要因となって姿勢が制限されてしまうとストレスになってしまいます。 そのため、私は音がどうだ、というよりもいかに快適に寝れるかが重要だと思っています。 音は正直二の次です。

装着感

まず装着感についてですが、問題は全くないです。
特筆すべき点としては、イヤホンが本当に耳奥まで入ってくるという点です。
私の場合は、イヤホンを耳から外すのが少し大変なぐらいに耳奥まで入ってきます。
耳奥まで入ってるのは単純にイヤーピースのサイズが小さいから?とつけた瞬間は思ったのですが、いざ耳からイヤホンを外そうとするとしっかり密閉されていることがわかったので、そういう設計なのでしょう。

寝ホンとしてはどうか?

結論としては、最高ではないけど問題は無いラインです。
耳を完全に枕に押し付けると、設計上より耳奥まで入ってしまい、痛い、というかこれ以上深く差していいものか不安になります。
ただ、ボディに突起等はなく、耳から飛び出ているわけでもないので耳を枕に押し付けたときの違和感というのはありません。

実際にASMRを聴いてみて

聴いたASMRは、上記サイトに登録されている適当な動画です。

違和感?新感覚?

まず真っ先に思ったのが、なんか音に違和感を感じたんですよね。
悪いというよりかは、今まで自分が聴いたことがない音の出し方というか、VRを初めて体験した時の感覚に近かったです。

音の定位がものすごく良い

これってなんなんだろう、と少し考えた結果、音の定位がものすごく良いという結論に至りました。
ASMR専用と謳ってはいましたが、嘘偽りはありませんでした。
本当に音の定位が新感覚レベルで良いんです。
普通のイヤホンだったら、音が出ている位置とか距離って、バイノーラル録音していたとしてもなんとなくボヤっとしてるんですよね。
以下がイメージ図なんですが(左が従来、右がCOTSUBU for ASMR) f:id:atarms:20211112135657p:plain COTSUBU for ASMRだと音の定位がはっきりしているというか、輪郭がぼやけていないというか、なんというか・・・
私は音にうるさい人間ではないので感覚の話なんですが、とにかく従来のものと全然感覚が違います。 音が広がっていないといえばいいんでしょうか、従来は広がっていたものがギュッと凝縮されて点になって聴こえます。
これが定位が良いということなんでしょうね。
正直、音に関してはワイヤレスということもあって舐めてたんですけど感動しました。

おわりに

私はレビューを書くような人間ではないのですが、今回はCOTSUBU for ASMRがあまりにも新感覚な音を提供してくれたので衝動で記事にしました。
ASMRイヤホンとしては間違いなく素晴らしいイヤホンです。
普段ASMRを聴かない人も、お店で試聴でもなんでもいいので1回はこのイヤホンでASMRを聴いてみてほしいです。
イヤホンというか、もうVR機器です。

以下、商品リンクです

COTSUBU for ASMRfinal-inc.com

ちなみに、同サイト内にある以下ページも興味深い内容ですので、おすすめです。

final-inc.com

1カ月使用して感じたこと(2021/12/05追記)

ほぼ毎日、寝るときにASMRを聴くために使用していました。
その中でいくつか気になる部分が出てきたので追記しておきます。 良い部分に関しては上に書いているので、基本的には良くない部分になります。 以下順番に書きます。

1. タッチ操作はいらない

装着しながら寝ていると、徐々にズレて耳から外れそうになることがあります。
これ自体は別に構わないんですが、位置を直そうと触ると8割ぐらいの確率で再生が停止したりなんだりしてしまいます。
これ以外にも、自分の腕を枕にして寝てる時でもセンサが反応して再生が止まったりします。
良くも悪くもタッチのセンサがものすごく敏感で、本当にちょっと触れただけでも反応してしまうのは結構ストレスですね。

2. 寝ホンとしては、Airpods Proの方が優秀

しばらく使ってて、やはり耳への負担的なものはAirdpod Proの方が無いです。
というのも、恐らくAirpods Proはそもそも設計的に耳奥まで入ることが無い為でしょう。
COTSUBU for ASMRを寝ホンとしてちゃんと使いたい場合、以下の様な枕を使うと快適に使えます。(私も1年前に購入して今も使っています。)

(広告ブロックしてると表示されないかもしれません)

3. 充電ケースに入れても充電されていない時がある

原因がよくわからないのですが、いざ使おうとケースから出すと、1分程度で片方のバッテリーが0になったりすることがちょくちょくありました。
ケースにしっかり入っていなかったのかもしれませんが、パチっと磁力か何かで接点にくっついて、ケースが正常にしまっているのにもかかわらず充電できていないのはよくわかりません。
寝るときに使おうとしてるので、これが起きるとかなりテンション下がっちゃいますね。
まぁその時はAirpods Proを使っています。

4. 両方だしても片方だけしかペアリングされない場合がある

これは前述したバッテリーが0の状態とかではなく、バッテリーがあるのにペアリングされない場合ですね。
ペアリングされていないほうを再度ケースに入れて、もう一度出すとペアリングされます。

結局のところ

後者2つは不具合的なものなので、初期ロットを買ったということもあって仕様がない部分もあるのかなとは思います。
ただ、タッチ操作に関してはもう少しどうにかならなかったのかなと思います。
反応しないように気を付けて触っても、反応してしまうのは中々ストレスです。
寝るときにASMRを聴くためのイヤホンとしては、音だけ見れば最高の物なので今後も変わらず使用し続ける予定です。
今後新タイプが出るのかはわかりませんが、もし新しいタイプが出たらそれもぜひ買ってみたいなと思う製品でした。

Youtubeチャンネルのメンバーシップ限定動画の再生リストを表示する

追記 Chrome拡張機能を公開

本記事の内容でもメンバーシップ限定動画の再生リストを閲覧することは可能なのですが、一々URLをコピーして連結というのが面倒くさいです。
ということで、ワンクリックでメンバー限定の動画プレイリストを開けるChrome拡張機能を作成・公開しました。
以下のURLから追加が可能です。

chrome.google.com

追加したら、任意のチャンネルページで本拡張機能をクリックすることでメンバー限定動画のプレイリストを表示できます。

拡張機能 ver1.1.0アップデート(2022/1/2)

YoutubeのチャンネルURL仕様変更に伴い、本拡張機能が実質的に機能しない状態になっていました。
これに関して対応が完了いたしました。

ただ、処理に抜本的な変更が必要になったことや、manifest v3への対応のために少し必要な権限が増えました。
インストールやアップデート時に、履歴の読み取りができる等不安なことが書いてありますが、権限的に読み取れますよというだけです。
実際に読み取りや、その結果を外部サーバーに送ったりはしていないのでご安心ください。

もし、不安がございましたら以下でソースコード全て公開しているので確認してみてください。
yt-member-playlist-view/src at master · atarm/yt-member-playlist-view · GitHub

初めに

Display a playlist of Youtube channel membership-only videos

こんにちは。
今回はYoutubeチャンネルに登録されているメンバーシップ限定の配信および動画の再生リスト一覧を表示する方法について書きます。
今回の内容は、メンバーシップ登録の有無関係なく適用可能です。 [:contents]

前提

Youtubeにおいて、動画の公開範囲を定めるものは以下の4つです(厳密には5つですが)

視聴範囲 検索結果
公開 全員 表示される
限定公開 URLを知っている人 表示されない
メンバー限定公開 メンバー登録している人 表示されない
非公開 投稿者 表示されない

今回は3つ目のメンバー限定のものが対象です。

限定公開や非公開の動画リストに関しては、私の知る限りではチャンネル側が作成する必要があります。

メンバー限定配信/動画を視聴する一般的な方法

私はいくつかのYoutubeチャンネルのメンバーシップを登録しています。

その中で限定配信や限定動画などのコンテンツがあります。これらを視聴する主な流れは以下となります。

  1. メンバーシップを登録しているチャンネルページを開く
  2. メンバーシップタブに切り替える
  3. 目的のコンテンツを探す

ただ、これには何点か致命的な問題があります。

問題点

以下の3点は、ものすごく不便ではありますが耐えられる範囲のものです。

  • 投稿のソート等はできないので、過去の古いコンテンツの発見が困難
  • 動画/配信以外の投稿と混ざるので単純に見にくい

しかし、以下の問題は致命的です。

  • 限定配信/動画のURLが分からなければ、そのコンテンツの発見が不可能

とはならないのが非常に厄介なんです。

限定配信/動画が発見できるケース

コミュニティにて(TwitterなどのSNSでもよいですが)

予めメンバー限定で配信/投稿することが決まっている場合、多くの方はどこかしらかで発信してくれます。

限定配信/動画が発見できないケース

多くは分からない、というより分からなくなるケースですね。

はい、チャンネルの事情で一般公開されていたものがメンバー限定に切り替えられるパターンです。

気が付いたらメンバー限定になっていたりすることもあり、こうなると見つけるのが困難になります。

コミュニティタブなどでURL付きで通知してくれればマシなのですが、実施しているチャンネルはあまり見たことがありません。

既に公開したものだから、みんな当然知っているだろうという感じでしょう。

(一応)見つける方法

  • 自分の再生履歴をから探す
  • たまたまその動画を高評価していれば、「高評価した動画」リストから探す
  • もしチャンネルがTwitterなどで配信/投稿を呟いていれば、そのツイートを探す
  • たまたま覚えてたURLを打ち込む

いずれにしても古い動画を急にメンバー限定にされたら非常に困難ですね。

メンバーシップ限定動画の再生リストを表示する

本題です。といっても以下の1行ですが。

https://www.youtube.com/playlist?list=UUMO + UC以降のチャンネルID

上記のURLにアクセスすると、「メンバー限定の動画」という再生リストにアクセスできます。

https://www.tech.vtasmr.com/wp-content/uploads/2021/11/image-4.png

この再生リストは、画像にも書いてある通りYoutubeが自動で作成しているものなので、メンバー限定になっているものは全て登録されています。

チャンネルID・・・?(2023/1/10追記)

気が付いたらチャンネルIDはほぼ使われなくなっていますね。 Youtube君は何がしたいのか、カスタムURLすら差し置いてユーザーIDを使い始めています。

事実上、本記事で紹介している方法は使えないかもしれません。 冒頭の拡張機能は、これらに対応済みなので特に何も考えず使用できます。

それっていいの?

なぜかわかりませんが、チャンネルの意図しない(?)ところでメンバー限定動画のURLを知ることを気に掛ける方を時々見かけます。

上の画像に共有ボタンがあったり、Youtubeの仕様で自動的に再生リストが作られていることからもわかるように

別にYoutubeはメンバー限定動画のURLを該当チャンネル以外が公開することを禁止していません。

そもそも、メンバー登録していなければ以下のように動画は視聴できません。

https://www.tech.vtasmr.com/wp-content/uploads/2021/11/image-5.png

終わりに

今回はYoutubeチャンネルのメンバー限定動画の一覧(再生リスト)を表示する方法について書きました。

メンバーの登録の有無に関わらず再生リストの表示はできるので、どんなコンテンツがあるか確認してからメンバー登録を検討したい、といった場合に使ってみてください。

【はてなブログ10周年特別お題】好きなプログラミング言語10選

はてなブログ10周年特別お題「好きな◯◯10選

こんにちは

本ブログにたどり着く方で、このような記事に興味がある方がいるかは疑問ですが、万年筆が欲しいので書いてみます。
https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatenablog/20211013/20211013112729.jpg
この言語のこういった思想が好き、コンセプトが好き、仕様が好き、といった技術的なことは書きません。
私個人が、どういった経緯でその言語を触るようになったのかということを書きます。
あとは、今からプログラミングを始めてみたいといった方向けに、アドバイス的なこともちょろちょろっと書いておきます。

結論

プログラミング言語っていろんなのがあってそれぞれ得意不得意もあるけど、一番大事なのは何を作りたいか・成し遂げたいかということです。
目的ありきのツールです。何か一つの言語の関数や特性をマスターしたところで、良いものが作れるかどうかは全く別問題です。 私がプログラミングを人に教えるときに一番大事にしているのは、何をやりたいか?ということを言語化させることです。
ぜひ、プログラミングできるようになりたいという方は、なんとなくメジャーな言語の勉強をするのではなく、実現したい事を具体的にメモ帳でもいいのでまとめてみてください。
一番の近道です。

は、なんとなく手を付けていった順番で書きますね。
どんな言語かの参考程度にFIZZ-BUZZ問題のコードもつけておきます。

1.C言語(小学校時代)

#include <stdio.h>
int main(void) {
    int i;
    for (i = 1; i <= 100; i++) {
        if (i % 3 == 0 && i % 5 == 0) {
            printf("FizzBuzz\n");
        } else if (i % 3 == 0) {
            printf("Fizz\n");
        } else if (i % 5 == 0) {
            printf("Buzz\n");
        } else {
            printf("%d\n", i);
        }
    }
    return 0;
}

私が人生で一番最初に触れたプログラミング言語です。
触った経緯は、当時小学校高学年ぐらいでゲームを作りたいなぁと考えとりあえず最もメジャーだったC言語に手を出した感じです。
勉強には以下のサイトを利用しました。
9cguide.appspot.com この時勉強したことは別に何にも役に立ってません。(苦C自体は素晴らしいと思います)
HelloWolrdやソートなど、動くことに嬉しさはありましたが、これで何ができるんだ?という感じでした。
当時の過ちとしては、プログラミングを勉強したら無条件で何か作れるようなると考えていたことです。 作りたいものを1つ具体的に決め、それを実現するためにはどの言語が一番楽か?などで勉強を進めるべきです。 ここでいう楽というのは、文献がどれだけあるかということです。
C#C++におけるゲーム開発の文献は多くあっても、R言語などでゲーム開発の文献なんかないですよね?
どんな言語でも作れないことはないと思いますが、文献は多い方がいいに決まってます。

2.javascript(中学校時代)

    function fizzbuzz(){
        for(i=1; i<=100; i++){
            if(i%3 === 0 && i%5 !== 0){
                console.log('Fizz');
            }else if(i%3 !== 0 && i%5 === 0){
                console.log('Buzz');
            }else if(i%3 === 0 && i%5 === 0){
                console.log('FizzBuzz');
            }else{
                console.log(i);
            }
        }
    }
    fizzbuzz();

2つ目はjavascriptです。
C言語でゲームを作るのは難しいらしいぞ、ということでUnityに目をつけました
当時Unityでの開発は、javascriptが主流でした。
勉強に使った本は以下のものです。(広告ブロックしてると表示されないかもです)

本屋で見かけて、よくわからんけどUnityでゲームが作れる!と思って購入しました。
結果としては、つまらなくて続きませんでした。
というのも、C言語の時と同じで具体的な作りたいゲームイメージが無かったからですね。
参考書通りに進めると丸い球体をキーボードで動かせるようになったりするのですが、だからなんなんだろうと当時は思っていました。
この時もまだプログラミングを勉強すれば何かすごいものが作れるようになるという思考でした。

ちなみに、javascriptのことをJavaと書いたり発したりしてはいけません。
別物です。

3.BASIC言語(高校時代)

10 I=0
20 I=I+1
30 IF I%15=0 PRINT "Fizz Buzz" : GOTO
40 IF I%3  =0 PRINT "Fizz" : GOTO 20
50 IF I%5 = 0 PRINT "Bizz" : GOTO 20
60 PRINT I:GOTO 20

高校時代に情報の授業で使っていたので一応入れときました。
これって何に使われるんでしょうね?わかりません。
学習用の言語だということを授業で聞いたような聞いてないような気がします。
と思って調べたら、教育用に開発されたとのことでばっちり学習用でした。

1964年、米国ダートマス大学にて、数学者ジョン・ケメニー(1926年-1992年)とトーマス・カーツ(1928年 - )により、教育用などを目的としてダートマスBASICが開発された。

BASIC - Wikipedia

書き方としてはアセンブラのような低級言語寄りでした。
今思うと、プログラミングをなんとなく勉強したいという方は低級言語をした方が良いのかもしれませんね。
今で言う、プログラミング的思考能力が身に付きやすいと思います。
オブジェクト指向はまた別ですが・・・)

4.Python(高校~大学時代)

for i in range(1, 101):
    if i % 15 == 0:
        print("Fizz Buzz!")
    elif i % 3 == 0:
        print("Fizz!")
    elif i % 5 == 0:
        print("Buzz!")
    else:
        print(i)

みんなご存じPythonです。
機械学習とかAIってかっこいいよね。というノリで触りました。
今現在、趣味でも実務でも一番使用している言語です。
何がいいって、Jupyter Notebookとフレームワーク・文献量の多さです。
とにかく手軽にデータの分析や自動化ができる
主に私は、Webスクレイピング・データ分析・機械学習、Webのバックエンド処理・・・
割と何でも使っています。文献の多さは正義です。

5.C#

public static void Main(string[] args)
{
    for (int i = 1; i <= 100; i++)
    {
        if (i % 15 == 0)
        {
            Console.WriteLine("FizzBuzz");
        }
        else if (i % 5 == 0)
        {
            Console.WriteLine("Buzz");
        }
        else if (i % 3 == 0)
        {
            Console.WriteLine("Fizz");
        }
        else
        {
            Console.WriteLine(i);
        }
    }
}

大学のプログラミングの講義で扱っていた言語です。
講義内容はメソッドを作ってみよう!で終了したので特筆すべきことはありません。 ただ、後にWindowsで動くGUIアプリを作りたいとなったときにC#が猛威を振るいました。
具体的にはVisualStudioのWindowsフォームアプリケーションです。
とんでもなく手軽にGUIアプリが作れます。
今でもGUIが欲しいなぁってものを開発しているときはC#を使います。

6.Velilog-HDL(大学時代)

面倒くさいですごめんなさい

さて急によくわからない言語が来ました。
私は一応電気電子系の学部を卒業しています。
なので、後輩などの授業を少し見てあげる機会があり、その際にVelilogを使っていたので勉強した感じです。
今まで上で挙げた、PCで動くものを作る言語ではなくFPGAなどの組み込み系で使われる言語ですね。
正味詳しいことは忘れましたが、かなり低級言語寄りでプログラミングの勉強には良いと思います。
ただ、これを勉強しても個人レベルでは有効に使えない可能性が高いですが・・・

7.アセンブリ言語(PIC)(大学時代)

面倒くさいですごめんなさい

これも後輩の授業で使っていたものです。
PICという、Arduinoなどの頭脳に当たる部品を制御するためにアセンブリ言語を使っていました。
一般的にIF文といえば、変数の値を比較して一致するか?といった感じで分岐します。
これがアセンブリでは、このPICのファイルレジスタのbit2がB'1'であれば次の行をスキップ、みたいな感じで分岐します。
多くはGOTO文と併せて分岐が実装されるので、複雑になると俗にいうスパゲッティコードになります。

https://xtech.nikkei.com/it/article/MAG/20080924/315344/cap01.gif

画像引用:第285話 忌み嫌われたgoto文 | 日経クロステック(xTECH)

スパゲッティコードは初心者という風潮がある気がしますが、正直低水準言語であれば仕方ない気はします。 高水準言語であれば、意図的に狙わなければスパゲティになることもないですし。

別に何でもいいんですが、授業で教えるとしたらPythonC言語などではなく、機械に近い低水準言語教えればいいんじゃないでしょうか。
どうせPython等を授業でやったところで実戦的な能力なんてつかないですし、だとしたら低水準言語でコンピュータの得意不得意みたいな部分を知る方が有意義かと思います。

8.Java

    public static void useForLoop(int end) {
        for (int i=1; i<=end; i++) {
            if (i%3==0 && i%5==0) {
                System.out.println("Fizz Buzz");
            } else if (i%3==0) {
                System.out.println("Fizz");
            } else if (i%5==0) {
                System.out.println("Buzz");
            } else {
                System.out.println(i);
            }
        }
    }

Javaです。 あるコンテストに参加することになって、物体検出AIを用いたAndroidアプリを開発するために勉強しました。
時間がなく、2週間という急ピッチで知識0の状態からAIアプリ開発までもっていったのはいい思い出ですが、短期間で完了してしまったがゆえにあまり記憶がないですね

9.PHP(大学院時代)

declare(strict_types=1);

for ($i = 1; $i <= 100; $i++) {
    if ($i % 15 === 0) {
        echo 'FizzBuzz';
    } elseif ($i % 3 === 0) {
        echo 'Fizz';
    } elseif ($i % 5 === 0) {
        echo 'Buzz';
    //上記以外
    } else {
        echo $i;
    }
}

これは結構最近触りだしたもので、以下のサイトを作るために勉強しました。

www.vtasmr.com

作った動機などは以下の記事で書いています。 atarms.hatenablog.com

大規模データに対してどこからでも検索できるシステムを作るにはどうすればよいだろう?と考えた結果、データベースをPHPで検索し、Webサイト上に表示するというロジックになりました。
今回の開発で概ねWebアプリ開発のノウハウは手に入れられたので、今後は積極的に作っていく予定です。
Webアプリだと環境を選ばずどこでも使えますからね。

10.R言語(大学院時代)

fb1<-function(n){
  fb<-character(n)
  for(i in 1:n){
    if(i%%3==0&&i%%5==0)
      fb[i]<-"FizzBuzz"
    else
      if(i%%3==0)
        fb[i]<-"Fizz"
    else
      if(i%%5==0)
        fb[i]<-"Buzz"
    else
      fb[i]<-i
  }
  fb
}

研究室の教授がおすすめしていたので、勉強してみました。
Pythonでいいやってなりました。

まとめ

後半ネタ切れで若干雑になりましたが、こんなところです。
今でも使ってる言語はPythonC#PHPあたりです。

ということではてなブログさん、万年筆ありがとうございます。