MacのVisual Studioで半角アンダースコアを普通に入力できない

目的

MacVisual Studioで半角アンダースコアを普通に入力できないのをなんとかしたい

方法

日本語入力に切り替えて「アンダースコア」を変換してる

AtomでCamelCaseをsnake_caseに変換する

目的

CamelCaseで書かれている変数名をsnake_caseに変換したい

  • 変換前 abcDef AbcDef
  • 変換後 abc_def abc_def

方法

  • メニューから Atom > Init Script
  • init.coffeeに下記のコードを登録して保存する
atom.commands.add 'atom-text-editor', 'markdown:snake-case', ->
  return unless editor = atom.workspace.getActiveTextEditor()

  selection = editor.getLastSelection()
  converted = ""
  for ch, idx in selection.getText()
    if /[A-Z]/.test(ch)
      if idx != 0
        converted += "_"
      converted += ch.toLowerCase()
    else
      converted += ch

  selection.insertText(converted)
  • 目的のファイルを新しいウィンドウで開き直す
  • 目的のCamelCaseの部分を選択する
  • コマンドパレットを開いてsnake caseを検索して実行する

Gitでファイルの一部だけ元に戻す

目的

git diffしたらあるファイルのいくつかの修正のうち一部だけ戻したくなった

$ git diff BookPanel.cs
diff --git a/BookPanel.cs b/BookPanel.cs
index 01631d1..01a3623 100644
--- a/BookPanel.cs
+++ b/BookPanel.cs
@@ -1,4 +1,5 @@
-<U+FEFF>using System.Collections;
+<U+FEFF>using System;
+using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
@@ -7,16 +8,10 @@ public class BookPanel : MonoBehaviour {
 
        // Use this for initialization
        void Start () {
-        GetInputFieldComponent("Title").text = Storage.GetBookTitle();
-        var wordsPerLineText = Storage.GetWordsPerLine();
-        GetInputFieldComponent("WordsPerLine").text = wordsPerLineText;
-        UpdateMetronome(wordsPerLineText);
-
-        var library = Storage.GetLibrary();
-        if (library.Books != null && library.Books.Count != 0)
-        {
-            var book = library.Books[0];
-        }
+        var book = Storage.GetLibrary().Books[0];
+        GetInputFieldComponent("Title").text = book.Title;
+        GetInputFieldComponent("WordsPerLine").text = book.WordsPerLine.ToString();
+        UpdateMetronome(book.WordsPerLine);
        }
        
        // Update is called once per frame
@@ -33,11 +28,17 @@ public class BookPanel : MonoBehaviour {
     public void OnEndEditWordsPerLine()
     {
         var wordsPerLineText = GetInputFieldComponent("WordsPerLine").text;
+        var wordsPerLine = 1.0f;
+        try
+        {
+            wordsPerLine = float.Parse(wordsPerLineText);
+        }
+        catch (FormatException)
+        {
+            // Use initial value
+        }
         Storage.SetWordsPerLine(wordsPerLineText);
-
-        var t = GameObject.Find("TimerX").GetComponent<TimerX>();
-        t.SetWordsPerLine(wordsPerLineText);
-        UpdateMetronome(wordsPerLineText);
+        UpdateMetronome(wordsPerLine);
         SaveBook();
     }
 ```

二ヶ所目のパッチだけ戻したい

# 方法

そういう時は、こうすればいい

git checkout -p BookPanel.cs

「このhunkを作業ツリーから捨てるか」というプロンプトが出てくるので、yとかnとか答える

Discard this hunk from worktree [y,n,q,a,d,/,K,j,J,g,e,?]?

Unity: Error loading launcherの対処法

エラーメッセージ

Error loading launcher://unity//Users/smith/Library/Unity/Packages/node_modules/unity-editor-home/dist/index.html?code=9Mn1WZ6j1PMX4YMS6Y5-Ig00cf&locale=en&session_state=570ea747a676684f543dae175c0b3c2110d8c783cdce32b78132f04c3d23d0f7.zyZ6Y2ZHZKQUH2byjnl4vA00ef

対処法

このエラーには害はないが、下記の方法で取り除ける可能性がある

  • C:\Users\name\AppData\Roaming\Unity\Packages に行く
  • ローカルのバックアップを取る
  • このディレクトリの中身を全て消す
  • Unityを再起動する

もしエラーがで続けたとしても、無視して問題ない

参考

Error Loading Launcher - Unity Answers

"This message is harmless, but you can still try to navigate to this location:

C:\Users\name\AppData\Roaming\Unity\Packages

First make a local backup, then delete everything in this folder. When you restart Unity, needed packages will be downloaded and hopefully the error will not appear. If you still see the error, you can safely ignore it for now."

MacでGarageBandの音源をwavフォーマットに変換する

  • GarageBand
    • メニューからShare > Send Song to iTunes
    • Send your song to your iTunes library. ダイアログでShareボタンをクリックする
  • iTunes
    • 曲を選択する
    • メニューからFile > Convert > Create WAV version
  • Finder
    • Musicフォルダの中を探す

(マイクロ)サービスを使うためにはこれぐらいできなきゃ

「(マイクロ)サービスを使うためにはこれぐらいできなきゃ」という趣旨のこちらのコメントを読んだので、大体の和訳と考察を書く。

You need to be this tall to use [micro] services: * Basic Monitoring, instrumen… | Hacker News

大体の和訳

  • 基本的な監視、instrumentation、ヘルスチェック
  • 分散ロギング、トレーシング
  • 各サービスを、コードだけでなく、ビルドとテストとパッケージとpromoteを独立できること
  • 各サービスの上流、下流コンパイル時、実行時の依存を明確に定義できる
  • 良いAPIと契約を構築、expose、保守する方法を知っている
  • 自分が、逆側のサービス利用者だとしても、前方互換後方互換をhonorできる
  • マイクロサービス、モジュール、ライブラリー、分散モノリス、coordinate release、DB駆動インテグレーションなどの一長一短が分かっている
  • インフラの自動化について知っている
  • 稼働中のCI/CDのインフラがある
  • 開発ツール、共有ライブラリ、内部のartifact registryがある、または投資できる

考察

  • やらなければいけないことは多岐に渡る
  • ツールを導入すれば良いだけのものもあるし、基礎スキルを磨かなければいけないこともある
  • 一人で全ての専門家になるのは難しいので、組織力も必要になる
  • tracingというのはよくわからなかったが、分散システムでリクエストが経由したサーバーを追跡して流れを表示するシステムのことのようだ

リファレンス

GitHubのプライベートリポジトリでJenkinsの認証をどうやってするか

Q

GitHubのプライベートリポジトリをJenkinsで自動的にfetchしたい。どうすればよいか?

A

下記のデプロイキーという仕組みがあるので、jenkinsユーザーの鍵を手順のようにGitHubに登録する

引用

Deploy keys

A deploy key is an SSH key that is stored on your server and grants access to a single GitHub repository. This key is attached directly to the repository instead of to a personal user account.

和訳

デプロイキー

デプロイキーとは、サーバー上に保存されていて、一つのGitHubリポジトリへのアクセスを許可するためのSSHキーのことである。

手順

  • サーバー上でssh-keygenを使って鍵を生成する
  • GitHub: 右上の自分のプロファイルアイコンをクリックする
  • プロファイルページ: Repositoriesタブ > 目的のリポジトリをクリック
  • サイドバー: Deploy Keysをクリックする
  • Add deploy keyをクリック > 公開鍵をペースとしてsubmit