うおのめマリーの満遊記

都会の団地でプー太郎をしているエンジニアの日常。たまに軽く仕事とったりしながらまったりとスローライフを満喫中。料理が得意です。

Go 定義編

Go 変数の宣言

初期値あり
    var i int = 1
    var f64 float64 = 1.2
    var s string = "test"
    var t bool = true
    var f bool = false
( )でまとめて定義することも可能
var (
    i    int     = 1
    f64  float64 = 1.2
    s    string  = "test"
    // ワンライナーで複数定義
    t, f bool    = true, false
)

期値なし

var i int
var f64 float64
var s string
var t bool
var f bool

Short variable declarations

  • varを省略可能
  • 関数内のみでしか宣言できない
  • 値から型を推測できるので省略可能
  • 明示的に型を宣言する場合はvarを使用して宣言する
  • 再代入可能だが再宣言は不可
func foo() {
    xi := 1
    xf64 := 1.2
    xs := "test"
    xt, xf := true, false
}

const

constの定義
const Pi = 3.14
( )でまとめて定義することも可能
const (
    Username = "test_user"
    Password = "test_pass"
)
オーバーフロー

型を定義した変数においてintで扱える最大数から計算をしようとするとオーバーフローする

var big int = 999999999999999999999 - 1
>>> untyped int constant 1000000000000000000000) as int value in variable declaration (overflows)

const定義の場合は明確に型を定義していないので 計算後に値をintとして出力することができるのでエラーにはならない

const big = 999999999999999999999 - 1
>>> 999999999999999999998

数値型

代表的な数値の型

uint8

int8

float32

complex64

var (
    u8  uint8     = 255
    i8  int8      = 127
    f32 float32   = 0.2
    c64 complex64 = -5 + 12i
  )
四則演算
fmt.Println("1 + 1 = ", 1+1)          >>> 1 + 1 =  2
fmt.Println("10 - 1 = ", 10-1)        >>> 10 - 1 =  9
fmt.Println("10 / 2 = ", 10/2)        >>> 10 / 2 =  5
fmt.Println("10 / 3 = ", 10/3)        >>> 10 / 3 =  3
fmt.Println("10.0 / 3 = ", 10.0/3)   >>> 10.0 / 3 =  3.3333333333333335
fmt.Println("10 / 3.0 = ", 10/3.0)   >>> 10 / 3.0 =  3.3333333333333335 
fmt.Println("10 % 2 = ", 10%2)         >>> 10 % 2 =  0
fmt.Println("10 % 3 = ", 10%3)   >>> 10 % 3 =  1
ビット演算子(シフト)
   x := 0
    fmt.Println(x)
    // x = x + 1
    x++
    fmt.Println(x)
    // x = x - 1
    x--
    fmt.Println(x)

文字列型

基本

fmt.Println("Hello World")
fmt.Println("Hello " + "World")
// ASCⅡ コード
fmt.Println("Hello World"[0]) 
>>> 72
fmt.Println(string("Hello World"[0])) 
>>> H
文字列の置換

*stringsパッケージをimportすること

下記例は変数stringをコピーして出力している(値渡し)

var s string = "Hello World"

fmt.Println(strings.Replace(s, "H", "X", 1))

>>> Xello World

// 参照渡しの場合
s = strings.Replace(s, "H", "X", 1)
文字を含むかの問合せ
fmt.Println(strings.Contains(s, "World"))
改行
fmt.Println("Test\n" + "Test")

// ``で囲う
fmt.Println(`Test2
 Test2
    Test2`)
"(ダブルクォーテーション)の出力
fmt.Println("\"")

fmt.Println(`"`)

論理値型

//var t, f bool = true, false
t, f := true, false
fmt.Printf("%T %v %t\n", t, t, t)
fmt.Printf("%T %v %t\n", f, f, t)
分離演算子
fmt.Println(true && true)   // true
fmt.Println(true && false)  // false
fmt.Println(false && false) // false

fmt.Println(true || true)   // true
fmt.Println(true || false)  // true
fmt.Println(false || false) // false

fmt.Println(!true)  // false
fmt.Println(!false) // true
# 型変換
##### int, floatの型変換
var x int = 1
xx := float64(x)
fmt.Printf("%T %v %f\n", xx, xx, xx) // float64 1 1.000000

    var y float64 = 1.2
    yy := int(y)
    // %dでintは表示できる
    fmt.Printf("%T %v %d\n", yy, yy, yy) // int 1 1

配列

package main

import "fmt"

func main(){
    //[2]intの部分が型となるので変更が効かない
    // 配列を宣言
    var a [2]int
    a[0] = 100
    a[1] = 200
    fmt.Println(a)
    
    // 初期値として値を入れる場合
    var b [2]int = [2]int{100, 200}
    fmt.Println(b)
    
    // var b [3]int = [3]int{100, 200}
    // b = append(b, 300) // errorになる
    
    var c []int = []int{100, 200}
    c = append(c, 300)
    fmt.Println(c)
}

Python用標準入力チートシート

はじめに

python用の標準入力でよく使うものを集めたチートシートです。 便利そうなものがあれば随時更新してゆきます。

標準入力のコーディングに必要な関数

input()

入力で与えられるフォーマットを文字列で取得

# 以下入力pを与えられるとすると
p

# pを取得してsに値を入れる
s = input()

# 出力
print(s) 
>>> p (str)

input関数で取得した時点ではstr(文字列)なので、計算などで使用する場合は型を変えてあげる必要がある。

# 入力
3

i = int(input()) # 3を取得してint(整数)に変更してiに値を挿入

print(s) # 出力: 3 (int)

split()

文字列を分割する関数

# 以下入力 a と b をスペースを挟んで与えられるとすると
a b

# a と b を取得して s にlist形式で入れる
s = input().split()

# 出力
print(s)
>>> ['a', 'b']

splitする数に合わせて変数を用意して直接変数に入れる方法もある。

# 以下入力 a と b をスペースを挟んで与えられるとすると
a b

# a と b を取得して x と y にそれぞれ値を入れる
x, y = input().split()

# 出力
print(x)
>>> a

print(y)
>>> b

map()

第一引数に適用する関数、第二引数にリストなどのイテラブルオブジェクトを指定

イテラブルオブジェクトとはfor文などで要素を1つずつ取り出して処理できるようなオブジェクトのことを指す。(listやdictなど)

# 以下入力 1 と 2 をスペースを挟んで与えられるとすると
1 2

# 1 と 2 を取得して x と y にそれぞれ値を入れ、それぞれint型にする
x, y = map(int, input().split())

# 出力
print(x)
>>> a (int)

print(y)
>>> b (int)

range()

0から連番を作成

for i in range(3):
    print(i)

>>> 1
>>> 2
>>> 3

リストを生成することも可能

li = list(range(3))

print(li)
>>> [0,1,2]

よくでる標準入力

よくでる標準入力をここにまとめる。

1行に1つの入力を整数で取得

# 以下入力 1を1行与えられるとすると
1

a = int(input())
print(a)
>>> a (int)

1行に複数ある入力を整数で取得

# 以下入力 1 と 2をスペースを挟んで1行で与えられるとする
1 2


# それぞれ変数に格納
a, b = int(input().split())
print(a)
>>> 1 (int)

print(b)
>>> 2 (int)


# リストで取得したい場合
li = int(input().split())
print(li)
>>> [1, 2]

複数行にわたって1行に1つの入力を整数でlist取得

行数が指定されている場合

# 以下入力 1~3を3行で与えられるとすると
1
2
3

# for文で3回入力を取得して整数に変換後、listにする
li = [int(input) for i in range(3)]

# print(li)
>>> [1, 2, 3]

行数が指定されていない(不明な)場合

# 以下入力 1~NをN行で与えられるとすると
1
2
3
...
N

while True:
    try:
        i = map(int, input())
        input_lines += i
    except EOFError:
        break

# print(li)
>>> [1, 2, 3]

:::note warn 補足 map()を使わずに i = int(input())としてもよさそうですが、繰り返しに使えないオブジェクト(ここでは整数)を繰り返し処理(ここでは +=)で使うことになり、TypeError: 'int' object is not iterable が発生するので必ず map() を使用する。 :::

複数行にわたって1行に複数の入力を整数でlist取得

行数が指定されている場合

# 以下入力 1~6を3行で2つずつスペースを挟んで与えられるとすると
1 2
3 4
5 6


r = []

# for文で3回入力を取得して整数に変換後、listにし二次元配列で格納する
li = [r.append(list(map(int, input().split()))) for i in range(3)]

# print(r)
>>> [[1, 2], [3, 4], [5, 5]]

行数が指定されていない(不明な)場合

# 以下入力 1~NをN行で与えられるとすると
1 2
3 4
5 6
...
N N

while True:
    try:
        r.append(list(map(int, input().split())))
    except EOFError:
        break

# print(r)
>>> [[1, 2], [3, 4], [5, 6]... [N, N]]

最後に

もし他にも便利な取得方法などがあれば教えていただれば幸いです。

2022年デスクツアー

一旦まとまったから晒してみる

主にPCで仕事をしている人にとってデスク環境周りの整備は関心が高いところだと思います。

デスクワーカーにとっては運動不足になりがちなので少しでも運動不足を解消したい!なんて思ったりもしたり。

僕自身も健康面と作業効率を考えて作業用のデスクを導入しました。

ひととおり様になったので今年の締めくくりに2022年バージョンのデスク環境周りをまとめておきたいと思います。

FlexiSpot E7 & FlexiSport 竹 120×60

デスク天板と脚は電動昇降デスクのFlexiSpotのもので統一しました。

デスク脚の最小昇降範囲が60.5cmと他のデスクに比べてかなり低く設定でき、足元に純正キャスターを付けて移動できるので、ゆったりしたい時には 移動して適度な高さまで落としてソファーに腰掛けながら作業やアマプラ...なんてこともできてしまいます。

デスク天板はFlexiSport純正の竹の120×60をチョイス。

穴が既に空いているので脚の取り付けが楽でした。

LG モニター ディスプレイ 35WN75C-B 35インチ/フレームレス曲面型ウルトラワイド(3440×1440)

湾曲モニター前からいいなぁ...ってよだれ垂らしながらいつも量販店で見ていましたが、最近では大量生産によるコスト削減もあるのか、手が届くレベルになってきました。

ワイドモニターなのでウィンドウを3つに分割して主に使用しています。

USB-Cでモニターへの出力とMacへの充電両方できるのでコードが1本で済むので、ケーブルがごちゃごちゃしなくて済みます。

音声出力装置がモニターに組み込まれているので聞くだけならイヤホンも入りません。

値段は僕が購入した際(2022年8月)は7万円を切る値段でした。

エルゴトロン LX デスクマウント モニターアーム

モニターアームに関してはあまりこだわりがなかったのですが、重厚なデザインと机のマウント部が大きいので机を傷つけないかなと思いエルゴトロンのマウントを選択しました。

結果としては数ヶ月使ってますが、いい選択をしたと思います。

机に跡が残らなさそうな取り付け部

ただ今のところ心配はないのですが、このマウント34インチ用なので35インチのモニターを支えてて大丈夫なのか?というのはこれから使用しながら見ていきたいところですね。

ロジクール Webカメラ C270n HD 720P

デスクでWebカメラで姿を映しながら打ち合わせをすることも増えてきたので購入しました。

画角が広くなく、最低限の画質があればいいと思っていたところ、こちらのWebカメラを見つけました。

今のところ使っていて何も問題がなく、真ん中にマイクもひっそりとついているので、イヤホンをせずに打ち合わせをしている時もあります。

カメラの上には僕の同僚「おすしピープル」がいつも見守ってくれています。

BenQ ScreenBar スクリーンバー モニター 掛け式ライト

時々手元で図を書いたり、本を読んだりすることがあるので導入しました。

画面への写り込みもなく、自動調色機能がついているのと暖色と寒色を自身で調整できる点が非常に気に入っています。

仕事の時は寒色系の色で作業して、リラックスしてお酒でも飲みながらネットサーフィンとか動画を楽しみたい時は暖色で音楽をかけながらまったり...なんて使い方もできる優秀なモニターライトですね。

ノートPCマウント

デスク上に極力ものを置きたくないと考えていたところ、ノートPCを格納するこちらのマウントを見つけました。

元々の製品としては鉄製のマウントを机にビスで取り付けるだけというシンプル設計。

この商品単体で使うと、鉄製のマウントによってPCに傷がつくのが容易に想像がついたので、近所のホームセンターでゴム製のクッションを挟み込むことによって、格納している時に傷がつかないようにDIYしました。

上下それぞれにゴムクッションをつけてPCに傷がつかないように加工

自分で満足いくように作り上げたこのマウント、今では非常にお気に入りのデスク周りの1機能になっています。

HHKB Professional HYBRID Type-S 無刻印/墨(英語配列

この製品を使うまで、Apple純正のMagic KeyBoardを特に不満もなく使っていたのですが、知り合いのエンジニアの方に触らせていただいたところ、打鍵感が心地よく、次の日には購入していました。

ブラインドタッチができると謎の自負があったので無刻印のモデルを選んで使ってみたもののあえなく撃沈

特に記号系と数字を打つのに苦労しました。

しかし使ってゆくうちに人間って覚えていくもので、今ではすっかりこのキーボードじゃないとしっくりこないくらい愛用品になっています。

もちろん刻印モデルもありますので心地よい打鍵感がお好きな方にはぜひおすすめです。

Apple Magic Trackpad

言わずと知れたAppleの純正トラックパッド

HHKBを買う以前から使用しているもので、さすが純正品。何も文句のつけようがないですね。

あえてゆうならばHHKBと合わせてブラックにしたいと思っているくらいで、それくらいしか今のところいうことがないくらい満足感の高いトラックパッドです。

Side3 セパレート型 天然木 パームレスト

Magic KeyBoard からHHKBに乗り換えて問題になったキーボードの高さをこのパームレストで解消しました。

実はこのパームレストを使う前にはキーボードの横幅いっぱいのパームレストを使っていたのですが、トラックパッドを中央に配置したい欲が出てきたので思い切って乗り換えました。

HHKB用専用の製品を作られている某社のパームレストはロゴが腕を乗せる中央に彫り込んであるので使っていると腕に跡がつきそうなのとデザイン的にいただけないところもあり、こちらを選びました。

キーボードとトラックパッドを合わせた図
段差もなく専用設計品と思わせるほど

NANAMI 3in1 ワイヤレス充電器

iPhone EarPods AppleWatchの3点を同時充電するにあたり、3 in 1の充電器を探していたのですが、iPhoneを立てかけて充電したりするようなものばかりでシンプルさに欠けていてモヤモヤしているところこの充電器を見つけました。

持ち運びの際にかさばらず重宝しています。

充電速度に関してはワイヤレスの宿命なのか若干遅くも感じるのですが、まあ許容範囲ないといったところです。

机にiPhoneを置いておくと通知が気になってみてしまうこともあるので、いずれ目処がついたらデスク上でなく別の場所に移す予定です。

La-VIE(ラヴィ) 足つぼマット 足裏いてーよ 土踏まず

時々この足ツボマットの上に立って作業しています。 一部とんでもなく大きい突起があるのですが、痛すぎで今のところ乗れてないので今後乗れるように体調を整えていきたいところです。

突出した突起

シンプルデザインと機能美を求め続けて

巷にデスク紹介のブログやYoutubeはたくさん溢れています。そしてこの記事もその一端かもしれません。しかし、この記事で紹介したものは必要最低限でシンプル機能的なものを紹介したつもりです。

デスク周りをごちゃつかせてガジェットだらけにしてしまっても、効率が上がるどころか下がってしまうし、そもそもそんなに大層なデスクにしたくない。

そんな考えも持ちつつ、構築したデスク周りは単なるデスク周りの紹介ではない、僕の「シンプルでゆっくりした生き方」がここに現れてるのかもしれません。