慶安のWIN-70Bのジャンクをもらったので修理してみる

こんばんは。

インターネットフレンドの铃宫くんから、慶安のWIN-70Bをもらったので、治してみたいと思います。

状態

  • 通常起動可
  • タッチパネル操作不可

こんな感じ。
つまりタッチパネル不良のジャンク、というわけですね。

外傷はなく、特別壊れている感じはありません。

続きを読む

Hexoでテーマの設定ファイルをGithubで保持する方法

こんにちは、巳波みなとです。

このブログ、Hexoという静的サイトジェネレーターで生成、GithubPagesでホストしているのですが、これらのテーマ設定が少し厄介だったので紹介します。

テーマのインストールの仕組み

テーマがインストールされるとき、サイトファイルのthemesの中にファイルが保存されるんですが、それは「Git submodules」という仕組みで管理されています。

この中で行われた変更は、なんと自分のリポジトリにコミットすることができません。

これはどういうことかというと、テーマに関して設定したことが、他の環境でgit cloneしたときには消えているということです。

テーマのconfigの上書き

実は、これへの対策として、テーマの_config.ymlファイルを上書きする仕組みが用意されています。

Configuration | Hexo

その方法は、ルートディレクトリ(db.jsonやpackage.json、_config.ymlがあるディレクトリ)に、_config.[テーマ名].jsonファイルを作るというやり方です。

これによって、_confit.[theme].jsonが、テーマの_configファイルよりも優先して読み込まれるように設定できます。

そんだけ

Go言語ことはじめ

環境

  • Windows10
  • Chocolatey導入済み

Go言語の導入

choco install golang を実行すると、Go言語をインストールできます。
更新するときは choco upgrade golang でできます。

VSCodeに拡張機能を導入

Image from Gyazo

拡張機能検索にGoと入力すると、一番上に公式の拡張機能が出てくるのでインストールします。

インストールが終わったら、コマンドパレット(Ctrl+Shift+P)を開き、Go: Install/Update Toolsを検索して、実行します。

すると、拡張機能の動作に必要なツール一式がダウンロードされます。

これで拡張機能の導入は完了です。

書いてみる

hello.goを作成します。
内容を以下のように作成します。

1
2
3
4
5
6
7
8
9
package main

import (
"fmt"
)

func main() {
fmt.Println("Hello, world.")
}

そして保存、go run hello.goを実行するとHello, world.が実行されます。

解説

package

感覚的にはJavaやC#などの名前空間に近いですが、厳密には違うものみたいです。

これは、importするときに指定される名前です。

基本的にはディレクトリ名を付けることが推奨されていて、例えばappというディレクトリにmain.goを作ったとすると、最初をpackage appとすることが推奨されているということです。

Go Modulesの仕様上、外部からダウンロードしたパッケージと被っても問題ありません。

そこらへんはここに書いてます Goで独自パッケージがimportできない - MinatoNote

そしてこれが最も重要ですが、ルートディレクトリに配置されているプログラムはpackage mainとする必要がります。

そうしないとgo run: cannot run non-main packageというエラーで実行できません。

import

パッケージをimportします。

今回は、fmtというgolangの入出力を司るパッケージをimportしました。

golangには、github上に無数のパッケージが存在していて、go get [repos]というコマンドで簡単にダウンロード、importすることができます。

これによって、開発を高速化することが可能です。

func main()

funcと聞けば関数ということはまぁわかると思うんですが、golangでは、main()という関数が一番最初に実行されます。

なので、func main()としています。

mainパッケージ内では、かならずmain関数を書かなければなりません。

mainパッケージにmain関数が存在しない場合は function main is undeclared in the main package エラーが発生します。

おわり

以上がGo言語ことはじめです。

正直今回は、Goを使う上での目玉機能には全く触れていません。

  • めっっちゃ楽な並列処理
  • ビルドして高速実行できる機能

など、Goには素晴らしい機能が何個かあります。
これはもしかしたら続きの記事を作るかもしれないです。

Goで独自パッケージがimportできない

現在、以下の構成

1
2
3
4
5
warbot-go
├ test
│ └ test.go
├ go.mod
└ hello.go

この状態でhello.goからtest.goをimportできない。
まず、保存しようとするとコードが消える

これはVSCodeに入れているGolintが消してるっぽい
ログには
Not able to determine import path of current package by using cwd: c:\Users\Minato86\repos\MyRepository\warbot-go and Go workspace:
と記録されていた。

まずは今の状況を振り返っておくと

  • go mod init warbot-goでmodを初期化済み
  • go envGO111MODULEはonになっている

というわけで、今はGo Modulesが使える環境が整っているはずです。

main.gotest.goは以下のようになっています

main.go

1
2
3
4
5
6
7
8
9
10
11
package main

import (
"fmt"
//ここに"warbot-go/test"をimportしたい
)

func main() {
fmt.Println("Hello, world.")
}

test.go

1
2
3
4
5
6
7
8
9
package test

import (
"fmt"
)

func Test() {
fmt.Println("test module ready.")
}

linterを無効にしてみる

2fd55a2ce3bace7661665a70d5dd51c9.png

VSCodeのワークスペース設定から、Lint On Saveをoffにしてみる。

結論からいうと、offにしたのに普通に実行された。
なんでや。と思ったら、どうやらこの動作はlinterの仕業ではなく、formatterの仕業みたい。

formatterを変えてみる

b373f1c941646a7873dc5913665eb082.png

デフォルトのgoreturnsではなく、gofmtに変えてみた。
結論から言えば、うまくいった。

1
2
3
4
5
6
7
8
9
10
11
package main

import (
"fmt"
"warbot-go/test"
)

func main() {
test.Test()
fmt.Println("Hello, world.")
}

消されずにこのように書くことができた。
また、普通に実行できた。

そういえば

Githubでリポジトリを公開する場合、こっちのほうが正しいっぽい

go mod init github.com/chipsnet/warbot-go

あとはimportもgithub.com/chipsnet/warbot-go/testに書き換える。

↓GoなんもわからんからDiscordBotを作っている
GitHub - Chipsnet/warbot-go: WARbot written in golang

Material UIのTabsのindicatorのCSSをいじる

1
2
3
4
5
6
7
8
9
10
11
const StyledTabs = withStyles({
indicator: {
display: "flex",
justifyContent: "center",
backgroundColor: "transparent",
"& > span": {
maxWidth: 0,
width: "100%",
},
},
})((props) => <Tabs {...props} TabIndicatorProps={{ children: <span /> }} />);

こんな感じ
上記はindicatorのmaxWidthを0にして消してます

あとは通常<tabs></tabs>なところを<StyledTabs></StyledTabs>に変える
これでおk

基本的にはリファレンスとかに書いてあります
以下参考ページ

Tabs React component - Material-UI
Tabs API - Material-UI

Google Cloud Platformの請求先アカウントとはなにか

結論からいうと、請求情報が入った箱みたいなやつ

請求先アカウント、必要ある?

  • プロジェクトごとの請求先(クレジットカードとか)が分けられるので管理が楽になるぞ
  • 請求先アカウントごとに費用のレポートや概要が出るので、プロジェクトごとの費用がわかりやすいぞ
  • 請求先アカウントごとに予算が決定できるので、柔軟な予算設定ができるぞ

といった感じでした。

Azureで言うところのサブスクリプションですね。

結論

料金設定や管理を柔軟にするための仕組みでした

WindowsでNode.jsのバージョン管理をしよう

前提

  • Chocolaty導入済み
  • Node.js導入済み
  • Windows10

選択肢

WindowsのNode.jsバージョン管理ツールには2種類ある

  • nodist
  • nvm-windows

nvm-windowsとnodist、どちらも人気があるように思える
とりあえず今回は頻繁にメンテナンスされている(ように見える)nvm-windowsを使う

Node.jsのアンインストール

Node.jsがあるとnvm的に問題がある(nvm側に切り替わらない)らしく、まずはNode.jsをアンインストールしておく。

これは各自やってください。

インストール

choco install nvm -y

これで勝手にインストールされます。
やったぜ

バージョン切り替え

nvm list available で、インストールできるNodeバージョン(一部)がリストで出ます。

nvm install [version] で指定したバージョンのNode.js(とnpm)がインストールされます。

nvm list で、インストール済みのNode.js一覧が見れます。

nvm use [version] で、インストールしたNode.jsに切り替わります。

nvm use を実行しないと切り替わらないので注意

おわり

めちゃ簡単でしたね。これでいろいろ楽になりそうです。

CoffeeScript + RaspberryPiでRedisを使ってみる

mongoDB入れようと思ったらラズパイでインストールできるバージョン古すぎて使えなかったので
CoffeeScriptからRedisを使う覚書

環境

  • Server
    • Raspberry Pi Zero(Raspberry Pi 3に置き換え予定)
    • OS: Raspbian(debian系)
  • Client
    • G-GEAR(ゲーミングノート)
    • OS: Windows10 Home
  • CoffeeScript
    • v2.5.1
  • Node.js
    • v12.13.1
  • Yarn
    • v1.21.1

前提

  • CoffeeScript導入済み
  • Node.js導入済み
  • Yarn(or npm)導入済み
  • Raspberry PiとはSSH通信可能

Redisのインストール

インストール

まずはsudo apt updateでアップデート

その後にsudo apt install redis-serverでRedisをインストールします。

ps aux | grep redisでredisが動いているのを確認できます。

redis-cliで対話的に操作することもできます。
quitで終了できます。

外部からの接続を許可

sudo nano /etc/redis/redis.confでコンフィグファイルを開いて編集します。

1
2
- bind 127.0.0.1 ::1
+ # bind 127.0.0.1 ::1

また、パスワードも設定します。

1
2
- # requirepass ...
+ requirepass ...

sudo service redis-server restartで再起動します。

接続する

まずは接続のためにCoffeeScriptを書きます。
接続にはredisパッケージを使います。

yarn add redisでインストールします。

そして、redis.coffee(名前なんてどうでもいいですけど)を作って認証情報諸々書きます

1
2
3
4
5
6
7
8
9
10
11
12
redis = require 'redis'

config =
host: '192.168.x.x',
port: '6379',
password: 'xxxx'

client = redis.createClient config

client.on 'ready', (err) ->
console.log 'connected.'

hostにはラズパイのローカルIPアドレスを入れます。
passwordにはさっきファイルに書き込んだパスワードを入れます。

正常に接続できればconnected.と表示されるはずです。

おわり

結構簡単でびっくりしました。
まだセキュリティのかけらもないので、諸々やっていきたいと思います。

CoffeeScript書きやすいわ。いいね。

クソ今更だけどCoffeeScript入門してみた

コミュニティ死んでてマジで終わりそうなCoffeeScriptを書きます。
覚書がてら環境構築をしていく。

なぜ今更?

  • Pythonっぽかったから
  • JavaScript書くの飽きたから
  • 単純に面白そうだったから

やっていこう

前提

  • Node.jsがインストールされている
    • 今回のバージョンはv12.13.1
  • npmがインストールされている
    • 今回のバージョンはv6.12.1

CoffeeScriptのインストール

WindowsならコマンドプロンプトとかPowershell、その他ならTerminalで以下のコマンドを実行するだけ

npm install --global coffeescript

一発で入ってしまう。

ちなみにそのプロジェクトだけで使いたい場合は--global--save-devに読み替えてください。

coffee -vと打ってバージョン情報が出たらOK

出なかったらシェルを再起動してください。

やってみる

1
2
3
hello = "hello"

console.log hello

これでhelloができる(変数作る必要なかったろというツッコミはなしで)

これをindex.coffeeで保存、coffee index.coffeeで実行できます。

やってみる②

APIにリクエストして結果を得るやつやってみます。

1
2
3
4
5
6
7
8
cat_api = 'https://aws.random.cat/meow'

request.get {
uri: cat_api,
headers: {'Content-type': 'application/json'},
json: true
}, (err, req, data) ->
console.log data.file

明らかに書きやすい。

やってみる③

DiscordBot作成に使ってみた。

コマンドリストにprefixつけるやつ

1
2
3
4
5
command_list = ['cat', 'help']

command_list_withprefix = []
for i in command_list
command_list_withprefix.push prefix+i

Pythonみたいですごく書きやすい

// 追記 2020-03-13

1
command_list_withprefix = command_list.map (element) -> prefix+element

こっちのほうが賢そう

Botは弾くやつ

1
2
if message.author.bot and message.author is not client.user
return

これもPythonみたいな書き方ができるので、コードがとても読みやすい

(カッコとかカギカッコだらけだとやっぱり読みづらい)

開発モードをコマンドライン引数から判断する

1
devmode = if process.argv[2]? and process.argv[2] is 'true' then true else false

nullとかundefinedを?って書くだけで判断してくれる神仕様

開発モードと通常モードでトークンを分ける

1
2
3
4
token_dev = 'dev token here'
token_default = 'default token here'

token = if devmode then token_dev else token_default

こんな簡単に書けちゃうのか・・・・
最高すぎ

感想

ここまで使いやすい言語とは思わなかったです。
めちゃ使いやすかったので(正直今後の保証はないけど)これからはCoffeeScriptで書いてみようと思います。

また何かCoffeeScriptに関する知見があればここに書いていきます。