修正しました。てへぺろ

というわけでgolangの勉強を再開したのだが、

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello")
    fmt.Println("Raspberry Piでも動くかな?Windowsも!")
}
$Env:GOOS = "linux"; $Env:GOARCH = "arm"; $Env:GOARM=6; go build -o hello_rp hello.go

golang

明日からバリバリ書くけど眠いから寝る。とベッドに入って思った。ナチュラルにARMでビルドしたけど、そもそもラズパイってARMじゃん。なんで.net coreでlinux-x86とか言ってんの?!?!で、試した。

using System;

namespace RpTest {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hello .net core 3.1!");
            Console.WriteLine("System.Environment.Version : " + System.Environment.Version);
            Console.Read();
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>bin\Release\netcoreapp3.1\publish\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>linux-arm</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishTrimmed>False</PublishTrimmed>
  </PropertyGroup>
</Project>

ARM32がない……?(ちなみに手書きで強制的にarm32に書き換えてもエラー) OS自体に.net coreをインストールする方法は腐るほど出てくるのだけど、クロスコンパイルに関してはARMの情報は探さないとないかー。

言い訳させていただくと、前回の記事にあるようにラズパイ関連のプログラミングエントリを検索すると、ぱいそんだらけだったので「公式以外見るの止めた!」となり、なんか変な誤解というか脳がバグって先のエントリみたいな勘違いをしてしまった模様。酒飲んでないのに。むしろ酔拳効果がないとも言える。(断酒開始から4週経過)

追記

こいつかー

Note: All models of generation 1 and Pi Zero are not supported because the .NET Core JIT depends on armv7 instructions not available on those versions.

動画等の”メディアの作成日時”で一括リネームするツールを作りました。

経緯はこのへん。どこ探しても無いから自分で作ったっていう。妹が撮ったKVI0001.mp4みたいな大量にある甥っ子の動画ファイルをようやく一括リネームできました。

なんでタイムスタンプにしねえんだこのやろう part-1
なんでタイムスタンプにしねえんだこのやろう part-2

ダウンロードはここから。

追記 2020-10-18 01:36:00

上のエントリ書いてた頃には無かったのだけど、今検索したらそういうツール出てくるね……。タイミング悪いというかなんというか。まーいっか。shell32はSTAThreadじゃないとダメとか学びもあったので。

Visual Studio CodeでC#書くよ

や、書きたくはないのだが。Viaual Studioとかいう世界最強のIDEを諸事情で使えず、仕方なくVisual Studio Codeで書きたい人向けに。

目次

  1. Visual Studio Codeのインストール
  2. .net core SDKのインストール
  3. VScode拡張のインストール
  4. プロジェクトを作成する
  5. デバッグ(ブレークポイント)
  6. おまけ(プロキシ認証)

Visual Studio Codeのインストール

https://azure.microsoft.com/ja-jp/products/visual-studio-code/
ここから適当な環境にあったものをDLしてインストール。User/Systemだが、自宅で一人で使うPCならSystem、会社など(特にAD環境のVMとか)ではUserで。

.net core SDKのインストール

https://dotnet.microsoft.com/download
ここの.NET Core 3.xのSDKをダウンロードしてインストール。ところで、.netって英小文字って覚えていたのだがいつの間にか英大文字になったの?

VScodeのTerminalでversion/infoを確認。や、cmd.exeでもいいけど。

PS E:\> dotnet --version
3.1.401
PS E:\> dotnet --info   
.NET Core SDK (global.json を反映):
 Version:   3.1.401     
 Commit:    5b6f5e5005  

ランタイム環境:
 OS Name:     Windows   
 OS Version:  10.0.18363
 OS Platform: Windows   
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.401\

Host (useful for support):
  Version: 3.1.7
  Commit:  fcfdef8d6b

.NET Core SDKs installed:
  1.0.0-preview2-003131 [C:\Program Files\dotnet\sdk]
  1.0.0-preview2-003156 [C:\Program Files\dotnet\sdk]
  2.1.602 [C:\Program Files\dotnet\sdk]
  2.1.701 [C:\Program Files\dotnet\sdk]
  2.1.801 [C:\Program Files\dotnet\sdk]
  2.2.202 [C:\Program Files\dotnet\sdk]
  2.2.301 [C:\Program Files\dotnet\sdk]
  2.2.401 [C:\Program Files\dotnet\sdk]
  3.1.401 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.21 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.21 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 1.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.21 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

VScode拡張のインストール

こんな感じ。必須なのはC#のみ(デバッグもこれ)なので、あとはお好みで。

プロジェクトを作成する

https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet
.net Core CLIの使い方はここに全て載ってます。Visual Studioさんという世界最強のIDE様はなーんでもボタン一つで自動でやってくれましたが、諸君らはちんたらコマンド叩きまくる必要があるので覚えておきましょう。や、覚えなくていい、上のページをブックマークしよう。

適当なディレクトリを作り、その中にプロジェクトを作成します。余談ですが、私はVScode環境ではソリューション作りません。そんな規模(テストプロジェクト必須とか)になったら世界最強のIDEであるVisual Studioを買ってもらいましょう。

PS E:\VScodeProjects> dotnet new winforms --name TestWindowsForms
Getting ready...
The template "Windows Forms (WinForms) Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on TestWindowsForms\TestWindowsForms.csproj...
  復元対象のプロジェクトを決定しています...
  E:\VScodeProjects\TestWindowsForms\TestWindowsForms.csproj を復元しました (130 ms)。

Restore succeeded.

ここではWindows.Formsテンプレートを使用してプロジェクトを作成しました。どんなテンプレートがあるかは下記を読みましょう。
https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new

上で作ったプロジェクトのディレクトリを、エクスプローラ上から右クリック->"Codeで開く"などをして開きます。すると、

Required assets to build and debug are missing from 'TestWindowsForms'. Add them?

みたいな通知が来ますのでYesを押すと、必要なファイルを.vscodeディレクトリに生成してくれます。こんな状態で雛形が出来上がっています。

デバッグ(ブレークポイント)

適当にブレークポイントを打ってF5で実行します。Visual Studio同様、変数やウォッチ式で見ることが出来ます。ただ、やはりと言っては失礼だがモッサリモサモサしてる。

おまけ(プロキシ認証)

最近、VScodeのバージョンが上がるたびにプロキシ認証Windowがバグってるんですよね……。あ、rubyのgemとかとは違って、Nugetパッケージマネージャーで何らかのパッケージを使っている時、terminalでset_http_proxyとかしてもビルド時にコケます。VScode自体のプロキシ認証設定、あとNuget自体にプロキシ認証設定をする必要があります。VScodeは設定画面で登録できるので良いのですが、NugetはまずNuget.exeを拾ってきて(*1)下記のように叩くと無事にビルドできるはずです。

NuGet.exe config -set http_proxy=http://proxy-auth-server:3021
NuGet.exe config -set http_proxy.user=USER_NAME
NuGet.exe config -set http_proxy.password=PASSWORD

C:\Users\<USER_NAME>\AppData\Roaming\NuGet\NuGet.Config に記述が追加(パスワードはシャドウ化)されているはずです。

*1) https://docs.microsoft.com/ja-jp/nuget/install-nuget-client-tools

[.net core 3.1] 素数を数えて落ち着くんだ

落ち着くも何も、やることないので素数を数えてたよ。qiitaとかそういうところで検索したら最適解はゴロゴロ転がっているのだろうけど、一切見ずにwikipediaの下記ルールのみで書いた。色々と高速化についてはやりようがあるだろうしなー。例えば2以外の偶数は素数ではないとか、エラトステネスのふるいとか。俺はパッパラパーなので数学はわかりません!

ウィキペディア(Wikipedia): 素数
https://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0

素数(そすう、英: prime number)とは、1 より大きい自然数で、正の約数が 1 と自分自身のみであるもののことである。

とりあえず1000000までの素数を列挙する。

https://gist.github.com/dobusarai2016/227329547de90ba46559e0b2d943c148
result 00:02:25.6290352

2分25秒。おっそ!まあそりゃそうだが。ちなみにCPUはざっと最大でも20%使用くらい。

https://gist.github.com/dobusarai2016/f2dd95dce63d65d8430c9c831fec0537
result 00:00:55.3746587

55秒。死ぬほど雑で乱暴なコードだが非同期で並列処理を行ってみた。CPUは最大で90%使用していた。コードがアレだって?まあな。暇ならList<Task<string>>を作って回すとかでいいんじゃないの。アマプラでも見よう。

なんでタイムスタンプにしねえんだこのやろう part-2

なんでタイムスタンプにしねえんだこのやろう part-1

こんな感じで.net coreで書いてたのだが、もうWindowsのShell参照するならWindows.Formsでいいよね……。(下のはExifではなくファイルのLastWriteTimeを見てリネームしてます)

https://gist.github.com/dobusarai2016/f437d246f185a052a6c7951fd257889c

せっかくなので、後々カスタマイズして使えるレベルのツール作るわ。暇なので。

追記 2020-10-18

ツール作りました。
動画等の”メディアの作成日時”で一括リネームするツールを作りました。