プログラミングの芽

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

【はてなブログ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あたりです。

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

【MOD開発小ネタ】テクスチャファイルと実際のモデルの対応【テクスチャ変更】

こんにちは

 

テクスチャ変更MODを作るにあたり、テクスチャとなる画像ファイルを単体で見ても実際のモデルとの位置の対応がわかりずらく、どこを変更すればいいのかわかりません。

これについて私のような初心者がどう対応したかについてメモを残しておきます。

 

※テクスチャやモデルの抽出方法についてはここでは説明しません。

 

結論

Blender等でテクスチャとモデルを開き、モデルをUV展開する

 

流れ

Blender等でテクスチャ書き換えを行うモデルを開き、UV展開(UV Editingから)をする

予めテクスチャファイルは読み込んでおいてください

f:id:atarms:20211031213047p:plain

この状態でモデルを選択すると

f:id:atarms:20211031213145p:plain

テクスチャファイルにUV展開されます。

これで対応がわかりますね。

 

ちなみに部分選択しても対応はズレることはないです

f:id:atarms:20211031213308p:plain

 

モデルにテクスチャを適用して確認する

以下のようにマテリアルにノードを追加して、ベースカラーにテクスチャを設定すれば

f:id:atarms:20211031213442p:plain

いちいちゲームを起動しなくてもテクスチャ変更後のチェックができます。

f:id:atarms:20211031213524p:plain

 

おわりに

MOD開発の指南サイトを見ると、この辺の細かいことは端折られている印象でした。

まぁBlender等でモデリングをした経験があれば当然の内容ですが、MODから触り始めたという人はわからないですよね。

テクスチャによっては推測で対応を特定できることもありますが、シンプルなテクスチャだと全く分かりません。

 

おまけ

https://pbs.twimg.com/media/FCtLuZeUcAY9kA4?format=jpg&name=4096x4096

GoogleColabでAutoGluonを使ったGPUによる訓練、推論までの手順メモ【二値分類】

こんにちは

GoogleColab上でAutoGluonを使うための備忘録です。
今回はTabularPredictorによる二値分類を行いますが、Taskを変えてあげれば画像分類なども可能です。
詳しくは以下ドキュメント
AutoGluon ドキュメント
AutoGluon Tasks — AutoGluon Documentation 0.3.1 documentation

準備

trainデータ等があるGoogleDriveのマウント

# ドライブのマウント
from google.colab import drive
drive.mount('/content/drive')
basePath = "/content/drive/MyDrive/BERT/"

AutoGluonのインストール

!pip uninstall -y mkl
!pip install --upgrade mxnet-cu100
!pip install autogluon
!pip install -U ipykernel
# and restart runtime

Import

import autogluon as ag
from autogluon.tabular import TabularPredictor

色々なサイトを見てるとTabularPredictionと記述していたりするけど、AutoGluon最新版では名前が変更された?

データの読み込み

ドロップさせるデータ列がない場合は.dropは必要なし

train_data = TabularPredictor.Dataset('/content/drive/MyDrive/train.csv').drop(labels=["カラム名1","カラム名2"],axis=1) 
test_data = TabularPredictor.Dataset('/content/drive/MyDrive/test.csv').drop(labels=["カラム名1","カラム名2"],axis=1)
train_data.head() # 確認

訓練

label_column="正解ラベル"
predictor = TabularPredictor(label=label_column, path="./AutoGluonModel", eval_metric="recall").fit(train_data, presets="best_quality", ag_args_fit={'num_gpus': 1})

特筆すべき引数

  • eval_metric
    モデルの評価に用いる指標
    今回私の場合は正解データが極端に少ない学習をしたので、Recallを評価指標とした。
    options
    ['accuracy'、 'balanced_accuracy'、 'f1'、 'f1_macro'、 'f1_micro'、 'f1_weighted'、 'roc_auc'、 'roc_auc_ovo_macro'、 'average_precision'、 'precision'、 'precision_macro'、 'precision_micro'、 ' Precision_weighted '、' recall '、' recall_macro '、' recall_micro '、' recall_weighted '、' log_loss '、' pac_score ']
  • presets
    best_qualityを設定することで、より高精度なモデルの学習となる。
    その分もちろん時間はかかる
  • ag_args_fit
    GPUを使う場合は{'num_gpus': 1}を指定

推論

# 学習済みモデルのロード
predictor = TabularPredictor.load("./AutoGluon")  # unnecessary, just demonstrates how to load previously-trained predictor from file

# 推論用データから正解ラベルをドロップ
y_test = test_data[label_column] 
test_data_nolab = test_data.drop(labels=label_column,axis=1) 
train_data.head()

# 推論
y_pred = predictor.predict(test_data_nolab)

# 推論結果
print("Predictions:  \n", y_pred)

その他学習の確認など

results = predictor.fit_summary()

各モデルの学習情報が列挙される。
推論自体はこの中でもっともスコアがいいものが使用されている。

以上

【システムMOD】フォトモードのカメラ制限解除MOD【THE IDOLM@STER STARLIT SEASON】

こんにちは

 

今回は最近私が一生やってるTHE IDOLM@STER STARLIT SEASON(以下スタマス)のMODを作成したのでここで公開しておこうかなと思います。

(というより、適切な公開場所がわからないのでもしよろしければコメントで教えてください)

内容としては、S4Uなどのフォトモードでカメラの旋回角度とか移動制限を無くして自由に動かせるようになるMODになります。

Free camera movement mod in photo mode

 

以下ダウンロードリンクです。

PM_CameraMovRestrictionsRemove.7z - Google ドライブ

ダウンロードして展開すると

・PM_CameraMovRestrictionsRemove.pak

・PM_CameraMovRestrictionsRemove.sig

という2つのファイルが出てきます。

 

steamapps\common\StarlitSeason\Content\Packs\に"~mods"フォルダを作成して、その中に出てきたファイル2つを入れてください。

ゲームを起動すれば反映されるはずなので、S4Uか何かで適当に確認してください。

もし何か問題があったらこの記事のコメントか、Twitterの@atarmserまでご連絡お願いします。

 

MODを導入することで以下のような位置・角度まで行けますし、ステージ外も行けます。

ステージの下にもカメラは行けるようになっているので、ローアングル撮影も可能といえば可能ですね。

https://pbs.twimg.com/media/FB08CNLVQAccMwt?format=jpg&name=4096x4096

 

私が作った本来の目的としては、以下のような俯瞰や煽りなど角度をつけた写真が撮りたかったからです。かわいいね!

https://pbs.twimg.com/media/FB1d367UYAczQBS?format=jpg&name=4096x4096

 

MODなのでご利用は各自の責任の下お願いします。

 

以上です。

 

Twitterの方でも公開していますが、同じものです。

【javascript】検索結果の絞り込みを実装した

こんにちは

Webサイトにおいて、以下のような検索結果の動的な絞り込みをjavascriptで実装したメモです。

f:id:atarms:20211010182734g:plain

$(function() {
    // .changeでチェックボックス監視
    $('input[name="filter[]"]').change(function() {

        // 選択されたチェックボックスのvalue格納用配列fiterを用意
        var filter = [];
        // checkedとなっているチェックボックスのvalueをfilterに格納
        $('input[name="filter[]"]:checked').each(function() {
            filter.push($(this).val());                                   
        });

        $('[絞り込み対象の要素群を指定]').each(function(index, element) {
            var channel_name = $(this).find('[フィルタ対象の文字列が含まれている要素を指定]').text();
            //filterに含まれていなければ非表示 filterが空なら全部表示
            if (filter.length == 0 || filter.includes(channel_name)) {
                $(this).show();
            } else {
                $(this).hide();
            }
        });
    });
});

ポイントは.changeでチェックボックスの状態を常に監視している点でしょうか。
あとはフィルタ対象の要素群を取得できれば.showと.hideで実現できますね。

ちなみに以下の私が運営しているサイトで実際に動作を確認できます。
www.vtasmr.com

サーバーにはさくらレンタルサーバーを使用しています。
高速・安定・無料SSL付!月額524円でWordPressが使えるさくらのレンタルサーバ



【CRON】さくらインターネットのCRONでPython3スクリプトを設定するのに少しハマった

さくらインターネットマイページの、スクリプト設定にあるCRON設定でPython3スクリプトを設定しようとしたら少しハマったのでメモを

高速・安定・無料SSL付!月額524円でWordPressが使えるさくらのレンタルサーバ

もちろん私の知識不足もあったのですが・・・

 

まず前提として、さくらインターネットではデフォルトでPython3がインストールされていません。

これに関しては、既に対応済みという想定で話を進めます。

 

さて、エラーの種類はいろいろあると思うのですが

私が通ったエラー?は

・permission denied

・:File name too long からものすごい長いテキストの末、Syntax error: "(" unexpected

・python3: not found

の3つでした。

 

1つ目のpemは、単純に実行ファイルに実行権限を与えてあげるだけです。

2つ目は何でこうなっているのかよくわかりません。

いじっているうちに、3つ目のエラーになりました。

 

ものすごい単純ですが、Python3が見つからないと

 

CRONの正しい書き方としては以下の形になります。

cd [実行スクリプトまでの絶対パス] ; [Python3までの絶対パス] [実行ファイル名.py]

 

例として

cd /home/[USER_NAME]/python-script/ ; /home/[USER_NAME]/local/python3 main.py

という風になります。

 

ポイントは作業ディレクトリまで、まず移動する必要があるという点でした。

 

以上です。

 

サーバーにはさくらレンタルサーバーを使用しています。

【Webサイト公開】VtuberのASMR動画に絞ったタイトル・コメント検索サイトを公開しました。【VTAsmr.com】

こんにちは

 

まず公開したサイトのURLです。

基本的なシステムは完成したため公開しました。

www.vtasmr.com

f:id:atarms:20211003072433p:plain

コンセプト

タイトルにもある通りVtuberが配信/投稿したASMR動画についているコメントで動画を検索できるサイトです。(もちろんタイトルでも)

検索対象は、現時点では私が個人的に好きなVtuberの方のASMR動画となっています。

検索結果は、再生数や該当コメント数の降順、という訳ではなく、敢えて並び順をランダムにしています。このあたりは選択できるようにする予定ですが。

サイト内リクエストページにて、まだいろいろと準備中ではありますがメールアドレスを公開しているので、そこからASMR配信を行っているVtuberの登録リクエスト、機能追加要望もろもろ受け付けております。

 

制作動機

Youtubeにおいて、コメント検索機能の追加の声は多いと勝手に思っております。

ただ、コメントまで検索対象に入れると検索対象が従来の何百、何千倍に膨れ上がるため、パフォーマンスの関係から恐らくYoutubeはやっていないのかなと思っています。

ただ、そう言ったニーズの本質としては、本当に全動画に対してコメントで検索したいといったものではなく、自分が好きなジャンルに対してという話のはずです。

 

さて、私はVtuberのASMR動画が大好きです。毎晩寝るときにYoutubeで漁っています。

動画にはここ好きポイントやタイムスタンプ、はたまたお腹の音ポイント等有能なコメントが非常に多いです。

コメントで検索できたら・・・もっと効率的に動画を探せますね。

以上です。

 

展望

・ASMR配信を行っているVtuberの追加

・検索システムの改善(ソート、フィルタの追加、偏りの削減等)

・データベースの自動更新プログラム作成(現在は収集自体は自動ですが登録が手作業です・・・)

・UIの改善

自然言語処理技術による検索ワードへの関連性が高い動画の検索

・サイト内での動画再生ページ作成

 (いらないと思っていましたが、自分で使ってるうちにASMRに限定した関連動画を表示できたら便利だなと思ったので)

ライブ配信のチャットに対しても検索をかけれるように

 ライブのチャットはより衝動/感情的なコメントになるので、かなりのデータクレンジングを要するでしょうが有用なデータになるはずです。

 ただ、データ量がさらに何百、何千倍、下手したら何万倍にもなるので気長に待ってください・・・。私が欲しい機能なので実装はいずれします。

 

まだ出来立てなので、UI含めた大幅な変更もあるかもしれませんが、コンセプト自体を変える予定は全くないのでぜひ使ってみてください。

みなさん良いASMRライフを。

VTAsmr - VtuberASMR配信コメント検索

 

 

使用上の注意

・コメントオフや極端に少ない動画は、システムの性質上ヒットしにくく、逆に多い動画はヒットしやすくなっています。

・一部表示されている動画の投稿日や再生数が実際の値と異なる可能性があります。

 データベース更新のタイミング等の影響ですが、本質ではないため現状は無視しています。

・非公開やメン限動画がヒットするかもしれません。

 前述したデータベース更新タイミングの影響です。

 ただ、Youtube本家でもこういった動画の存在を確認する術は提供されているので現状は無視しています。別に視聴できたりはしません。

・♡などの記号は基本的に文字化けしています。ごめんなさい。

 データベース登録のタイミングで文字コード間違えちゃいました。

 文字化け前のデータはあるので、いずれ対応予定です。

 

 

Youtubeって本当にコメントで検索できないの?

長いこと使ってますが、なんとなーくコメントに対しても検索は引っかかってるような気はします。

ただ、あまりにも何となくレベルなのと、検索ワードに全く関係ないような動画もヒットすることが多いので私は正直あまり好きではありません。

閲覧履歴もろもろでパーソナライズ化されているんでしょうが、されすぎてて思った通りの検索になっていないような気がしています。

 

独り言

APIリクエスト数が膨大になることを恐れて、現状はデータベースへの追加の時だけAPIで情報を集めるという形式をとっているけど

どうなんだろう・・・。

このあたりもサイトの利用者がもし増えてくるような事になれば改めてどちらがいいか考えます。