markdown
慣れるまで、や、使い始めるまでは「なんかめんどくさいんじゃないのー?Web系のウェイウェイが騒いでるだけでさー?」ってイメージだったのだが、今ではメモするにも何するにしてもmarkdownで書いている。特に職場ではVScodeくらいしか自由に使える道具が無いので非常に有用だ。そうなってくるとこの当該クソブログもmarkdownで書きたくなるわけで。
慣れるまで、や、使い始めるまでは「なんかめんどくさいんじゃないのー?Web系のウェイウェイが騒いでるだけでさー?」ってイメージだったのだが、今ではメモするにも何するにしてもmarkdownで書いている。特に職場ではVScodeくらいしか自由に使える道具が無いので非常に有用だ。そうなってくるとこの当該クソブログもmarkdownで書きたくなるわけで。
史上最速でスクショがとれるワザ!「[Windows]+[Shift]+[S]」って知ってる?
こんなエントリがちょっと前にバズってました。私はSI時代、エビデンス(大爆笑)とかいうものを作る奴隷業に精を出していました。「目標をセンターに入れてクリック……目標をセンターに入れてクリック……」と死んだ目をしつつ Alt & PrintScreen → ペイントにペーストして保存。そんな想い出とともに、自身が使っているツールを思い出したのです。
今考えると意味がわからないソフトウェア名なのですが、Shift & PrintScreen(など)で画面のビットマップコピーを取得すると同時に、指定ディレクトリにファイルを生成するツールです。Bitmap/PNGの画質、キーアサイン、出力ディレクトリの指定、くらいの項目は設定ファイルで変更できるようにしていた。ただ、activeなwindowではなく常に画面全体をキャプチャするので用途が限られていたのでした。
よーし、これ改良してactiveなwindowを選択してキャプチャ出来るようにして、尚且つクリップボードのデータも取っちゃうぞ!などと意気揚々とプロジェクトディレクトリを開こうと思ったのですが、無いのです。VS2015なのか2013なのか思い出せませんがソリューションが。プロジェクトが。ソースコードが。
PS C:\> Get-ChildItem e:\ "capimage2.*" -Recurse
ディレクトリ: E:\Application
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2014/10/18 15:40 CapImage2
ディレクトリ: E:\Application\CapImage2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2015/01/13 22:31 20992 CapImage2.exe
えー、Windowsの常駐ソフトウェアとか作り方微塵も覚えてないし、一番苦労したのは確かアイコン画像を自分で書いたんだよこれ!みたいな。
せっかくgolang勉強しようと思ってるし何作っていいかわからんしRaspberry Pi Zeroはなんか俺がやりたいと思っていることを尽く潰してくれやがるしってんで丁度いいかなと思い検索してみたのだが。golangとWindows GUIは超絶相性悪いというか、そんなもん作りたいやつが学ばないというかぶっちゃけ修羅の道なので断念した(なんかWindowsService作ってる人は何人かいたし海外だとわざわざgoからWin32API直叩きしてる人もいた……)。
.net coreでコンフィグや画面出力する部分はWebView2で作ることにした。WebView2の.net core GAまだー?
USBハブ、USBマイク、USBスピーカーと購入。安く済ますためにRaspberry Pi Zeroを購入したというのにこの、なんだ、なんでもない。Zeroでなければ.net coreも動いたというのに……!まあいい機会なのでgolangを勉強するよ。
今日は息抜き & 購入したハードのテストを兼ねて、Raspberry Pi Zeroから音楽再生を試した。Youtubeを検索して一覧表示、選択して音声のみ再生というメソッド。古い情報(すでに更新されていないリポジトリのプレイヤーでドハマリしたり)が多かったので、速攻でキッティングできるようにメモ。
Raspberry Piに電源とUSBハブを接続。そのUSBハブにはUSBスピーカーとUSBスピーカーを接続。
dobusarai@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 0d8c:0016 C-Media Electronics, Inc.
Bus 001 Device 003: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
dobusarai@raspberrypi:~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
サブデバイス: 8/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
私が購入したUSBスピーカーは、上記のカード0, デバイス0になる。default再生デバイスの確認や変更は下記が詳しい。
https://qiita.com/jumjamjohn/items/6b5d543f611f55abf254
適当なwavファイルでも拾ってきて、aplay hoge.wav で再生ができてれば問題ないはず。音量調整でalsamixerなどを使ったような気がするが、特に必要ないような気もする。異様に音量が高い、低いなどがあれば都度調べて調整。
使用するソフトウェアをインストールするために必要なので行う。
dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-dev
dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-pip
dobusarai@raspberrypi:~ $ pip3 install --user mps-youtube
dobusarai@raspberrypi:~ $ pip3 install --user youtube-dl
dobusarai@raspberrypi:~ $ sudo apt install mpv
~/.local/bin に上記の上2つはインストールされるのでPATHを通しておく。
defaultだと「Keyつかいまわしすぎ!」で、まずエラーになる。自身のgoogleアカウントでAPI KEYの取得が必要。下記あたりで取得方法を参照してください。念の為API KEYには制限なども設定しましたが、まあしなくても大丈夫でしょう、多分。気になる人は調べてやってください。
https://hi3103.net/notes/web/1271
dobusarai@raspberrypi:~ $ mpsyt set api_key <API_KEY>
初回実行のみ、api_keyを指定して実行。実行後になんかOK的なメッセージが出ます(書き留めるの忘れた)。現在は "The key, '
先程インストールしたmpvを再生プレイヤーに指定。
> set player mpv
今回はYouTubeのFirst Takeというチャネルにある、かぐや様二期の主題歌を再生します。
_ _
_ __ ___ _ __ ___ _ _ ___ _ _| |_ _ _| |__ ___
| '_ ` _ \| '_ \/ __|_____| | | |/ _ \| | | | __| | | | '_ \ / _ \
| | | | | | |_) \__ \_____| |_| | (_) | |_| | |_| |_| | |_) | __/
|_| |_| |_| .__/|___/ \__, |\___/ \__,_|\__|\__,_|_.__/ \___|
|_| |___/ v0.2.8
Enter /search-term to search or [h]elp
>/the first take
"/"スラッシュに次いで検索ワードを入力。今回は"the first take"。検索結果がずらずら出てきたら通信成功。リストの左側にある番号を入力してEnter。おわり
というわけで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
明日からバリバリ書くけど眠いから寝る。とベッドに入って思った。ナチュラルに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.
Raspberry Pi Zero WH 買った
昨日こんなエントリを書いて、どのようにラズパイを使っていくかなどを考えつつ調べていた。が、尽く踏みにじられてしまった。
音系のプログラミングやりたい -> NAudioを前からやってみたかったしな -> あれ?ZeroはWin10 IOT入らないみたいだぞ -> 仕方がないからとりあえずasp.net coreでkestrelでも立てて動かすか -> んんん?targetにLinux x86ないぞ? -> \(^o^)/ ※追記参照(2020-1-27)
よく調べてから買えよ、としか言えないのだが。NAudioはよく見たらMicrosoft.Win32に依存してるって書いてあるしWin10 IOTはWin10じゃねえし……。まあ、せっかく買ったしあがきまくることにした。
で、"Raspberry Pi プログラミング"で検索しまくったのだが、まー次から次へとぱいそんぱいそんぱいそん……死ねこら!近寄るな!これなー、派遣のエージェントにも言われたし友人にも一度だけ言われたのだけど、ぱいそんなー。インデントがゲロ吐くくらいキモいとか、亀みたいに遅いとか、MLって言ったってnativeライブラリに対するラッパーがあるだけじゃんとかetcetc...は死ぬほどどうでもよくて、俺は!爬虫類が!大嫌いなんだ!昔々、まだこんなにどこもかしこもぱいそんぱいそん言われる前の新宿紀伊国屋書店。オライリー本を手にとった俺は股関節が攣ったね。
閑話休題。で、調べてみるとgolangにgobotというIOTフレームワークがあり、斜め読みした感じだとGPIOなども散見されたのでいけるかなと。音周りのライブラリには全く期待できないが、最悪WAVのcreate&playくらいは出来んだろ、と。学習途中で.net coreに魅入られてしまったので離れていたが、おべんきょうの再開ということで。
で、.net coreの場合だとWindowsでコード書いて、そのままLinux-x64向けにビルドして実行ファイルのみsftpでlinuxに配置して実行、ってのが可能だったのだがgolangではそうはいかないだろうからsamba立ててファイル共有までしました。今日はおわり。
マジかよ。クロスコンパイルしまくりんぐじゃないですか。
https://qiita.com/Jxck_/items/02185f51162e92759ebe
壮大な勘違いをしていた。なぜにラズパイがx86なのか。次のエントリで修正しました。