- 1. LeetCodeに毎日挑戦してみた 125. Valid Palindrome(Python、Go)
- 2. GCP検証環境で不要なリソースを自動停止する
- 3. 今流行りのgRPCについて簡単にまとめてみた(Goのサンプルコード付き)
- 4. Kubernetes Scheduler 自作入門
- 5. PulumiをGoで書いてみる
- 6. Go で文字種をチェックする
- 7. GoでファイルのMD5ハッシュを取得する方法
- 8. Goで文字列をスネークケースに変換する
- 9. Goでファイルをダウンロードする
- 10. Go言語でRSSフィードを生成する
- 11. DMM アフィリエイトAPI にアクセスするGoの実装サンプル
- 12. 大学に行った途端にオンライン授業になったので、囲碁サービスを突貫工事した話。
- 13. mongo-go-driverでクエリを書く時「primitive.E composite literal uses unkeyed fields」のwarningが表示される
- 14. LeetCodeに毎日挑戦してみた 122. Best Time to Buy and Sell Stock II(Python、Go)
- 15. 【Go】Qiita 週間 LGTM 数ランキング【自動更新】
- 16. YAML+Mustache+go-generate で go の メタプログラミング をする
- 17. おまえもLGTM GIF画像を生成して、チームの生産性を上げてみないか?
- 18. VSCode + Remote Containerで環境構築(Go・応用編)
- 19. Goクイズ: Type assertions
- 20. Progate Goコースを終えた人へ贈るWeb API開発入門
LeetCodeに毎日挑戦してみた 125. Valid Palindrome(Python、Go)
#### Leetcodeとは
[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)
#### 31問目(問題125)
#### 125. Valid Palindrome
#### 問題内容
> Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
>
> **Note:** For the purpose of this problem, we define empty string as valid palindrome.
>
>
>
> 日本語訳
>
> 文字列を指定して、
GCP検証環境で不要なリソースを自動停止する
こんにちは、オールアバウト SRE所属の @ishii1648 です。
この記事は、[All About Group(株式会社オールアバウト) Advent Calendar 2020](https://qiita.com/advent-calendar/2020/allabout) 25日目の記事です。
## 概要
クラウドの検証環境における悩みの種の一つとして、テスト用に構築したリソースを停止し忘れてコストがかさむ事が挙げられると思います。一昔前なら夜の9時くらいになったらGCE(AWSならEC2)のリソースを自動停止するスクリプトを書いて事足りたと思いますが、今やGCE以外にも止め忘れる可能性があるリソースは数多くあります。
オールアバウトではGKEを採用しているため、検証環境で構築したGKEのインスタンスグループを停止し忘れるという事が度々ありました。
上記の現状を踏まえ、停止忘れを効果的に防止するのであればGCE以外のリソース(GKE、Cloud SQL、Memory Store)も自動停止できる統合的な仕組みを開発する必要があると考え今回紹介するスクリプトを実装し
今流行りのgRPCについて簡単にまとめてみた(Goのサンプルコード付き)
##はじめに
(当時)Go歴1ヶ月の私が急遽gRPCを用いてバックエンドのAPIを開発してる業務に参画することになり、必要にかられて急いで学んだので、その時の学びを共有します✎gRPCって最近よく聞くけど、「なにそれ?」って方も多いと思うので(私もそのうちの1人でした)、自分の学びを纏めるためにもgRPCのエントリー記事を書こうと決意し、[Go 5 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/go5)に登録しました!
##gRPCとは
– 最近gRPCって良いらしい
– gRPCって流行ってるらしい等聞いたことは多いと思いますが、簡単に説明すると
– RPC (Remote Procedure Call) を実現するためにGoogleが開発したプロトコルの1つ
– Protocol Buffers を使ってデータをシリアライズし、高速な通信を実現できる
– IDL(インターフェース定義言語)を使ってあらかじめAPI仕様を .proto ファイルとして定義し、.protoファイルからサーバー側&クラ
Kubernetes Scheduler 自作入門
# はじめに
Kubernetesのスケジューラを自作するためのフレームワークであるscheduling frameworkが整備されてきています。
しかしまだalphaのステージということもあり、実際に作って試すには情報が少なく戸惑う状況です。
そこでこの記事では、簡単なscheduling frameworkのサンプルと動かし方を紹介します。
さらに応用例としてkubernetes scheduler sigsの開発しているCoschedulingプラグインの解説を行います# そもそもスケジューラーとは?scheduling frameworkとは?仕様は?
ざっくりとだけ説明します。
詳細情報はすでに良い解説資料があるので、そちらをご参照ください* [猫でもわかる Scheduling Framework #k8sjp](https://speakerdeck.com/ytaka23/kubernetes-meetup-tokyo-16th)
* [2020 年の秋、改めて学ぶ Scheduling Framework #k8sjp](https://speakerdec
PulumiをGoで書いてみる
やろうとは思っていたものの、手を出さずにいたのでこれを機にやってみよう。
# Pulumiってなに?
https://www.pulumi.com/
Pulumiとは様々なプログラミング言語から好きなものを使ってインフラのプロビジョニングやデプロイができるツールです。
昨今界隈で使われているTerraformみたいなものですね。TerraformがHCLという独自の言語を利用しているのに対し、Pulumiはjavascript/typescript/python/C#/F#/VB/Go (今現在pulumi new -hで確認できる言語) が利用できる模様。
AWSはもちろんGCP/AzureやAliCloud、K8s、OpenStackまでサポートされているようです。
最近の流行りとしてコンテナ化が進んでいるので、EKS/GKE/AKSあたりに対応されているのはすばらしい。普段私はRails(Ruby)での開発が多く、たまにtypescriptを使うくらい。
なので、今回はGoで書いてみたいと思います。## 準備
macosで開発しているので、goとpulumiは両方
Go で文字種をチェックする
### アルファベット大文字、小文字、その他を判定するサンプル実装
“`
package mainimport “fmt”
func main() {
upperA := rune(‘A’)
upperZ := rune(‘Z’)
lowerA := rune(‘a’)
lowerZ := rune(‘z’)
for _, c := range “abcXYZ32あ&” {
if c >= upperA && c <= upperZ { fmt.Println("大文字アルファベット", string(c)) } else if c >= lowerA && c <= lowerZ { fmt.Println("小文字アルファベット", string(c)) } else { fmt.Println("その他の文字", string(c)) } } } ``` --- ``` package main import ( "fmt" "unicode" ) func main() { for _, c := range
GoでファイルのMD5ハッシュを取得する方法
### 指定したファイルのMD5ハッシュを取得して返す
“`
func md5File(filePath string) (string, error) {
file, err := os.Open(filePath)
if err != nil {
errors.Wrapf(err, “failed open file : %s”, filePath)
}
defer file.Close()zr, _ := gzip.NewReader(file)
if err != nil {
errors.Wrapf(err, “failed read gz file : %s”, filePath)
}
defer zr.Close()hash := md5.New()
if _, err := io.Copy(hash, zr); err != nil {
return “”, errors.Wrapf(err, “failed file hash c
Goで文字列をスネークケースに変換する
### 指定した文字列をスネークケースに変換して返す
“`
func toSnakeCase(s string) string {
b := &strings.Builder{}
for i, r := range s {
if i == 0 {
b.WriteRune(unicode.ToLower(r))
continue
}
if unicode.IsUpper(r) {
b.WriteRune(‘_’)
b.WriteRune(unicode.ToLower(r))
continue
}
b.WriteRune(r)
}
return b.String()
}
“`
Goでファイルをダウンロードする
### ファイルをダウンロードしてローカルファイルに保存する
“`
package mainimport (
“io”
“net/http”
“os”
)func main() {
fileUrl := “https://4.bp.blogspot.com/-2-Ny23XgrF0/Ws69gszw2jI/AAAAAAABLdU/unbzWD_U8foWBwPKWQdGP1vEDoQoYjgZwCLcBGAs/s1600/top_banner.jpg”
if err := DownloadFile(“avatar.jpg”, fileUrl); err != nil {
panic(err)
}
}func DownloadFile(filepath string, url string) error {
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Clos
Go言語でRSSフィードを生成する
### RSSフィード(xml)の内容を出力する
“`
package mainimport (
“fmt”
“log”
“time”
“github.com/gorilla/feeds”
)func main() {
now := time.Now()
feed := &feeds.Feed{
Title: “ブログタイトル”,
Link: &feeds.Link{Href: “http://hoge.com/blog”},
Description: “ブログの詳細”,
Author: &feeds.Author{Name: “ohnishi”, Email: “ohnishi@hoge.com”},
Created: now,
}feed.Items = []*feeds.Item{
&feeds.Item{
Title: “記事
DMM アフィリエイトAPI にアクセスするGoの実装サンプル
### Fanzaの商品情報Jsonを取得して表示する
“`
package mainimport (
“crypto/tls”
“encoding/json”
“fmt”
“io/ioutil”
“net/http”
“time”
)type responsStatus struct {
Result struct {
Status int `json:”status”`
ResultCount int `json:”result_count”`
TotalCount int `json:”total_count”`
FirstPosition int `json:”first_position”`
} `json:”result”`
}type targetService struct {
service string
floor string
}var targetServices = []targetService{
{
service: “digital”,
floor: “vi
大学に行った途端にオンライン授業になったので、囲碁サービスを突貫工事した話。
この記事は[N高等学校 (2) Advent Calendar 2020](https://qiita.com/advent-calendar/2020/n-highschool-2)の後出しじゃんけん24日目です。
N高を去年卒業(2期生)して、東京理科大学の理工学部 数学科に今年入学した[@kakudo415](https://twitter.com/kakudo415)と申します。
8年の不登校期間を超えて、ついに大学でのリアル授業だと意気揚々としていたらパンデミックの影響でほぼ全ての授業がオンラインになってしまいました。その中で生まれた不便を解消し**かけた**話を書きます。# なぜ作るか
理科大の人気授業(多分)に「囲碁で養うコミュニケーション力」があります。
本来は教室に行って実際に対局をするのでしょうが、このご時世でそうもいかなくなってしまいました。
少なくとも僕が受講した前期においては、全てZoomと画面共有した棋譜ソフトによって授業が行われていて、ブレークアウトルームに分かれた学生同士が口頭で打ちたい手を相手に伝えると言った状況でした。# 作る
世の中に
mongo-go-driverでクエリを書く時「primitive.E composite literal uses unkeyed fields」のwarningが表示される
## 概要
GolangでMongoDBを使うとなった時に、おそらく使用するのが[mongo-go-driver](https://github.com/mongodb/mongo-go-driver)でしょう。mongo-go-driverでは[こちら](https://github.com/mongodb/mongo-go-driver/blob/master/examples/documentation_examples/examples.go)のサンプルにある通り、`bsonD`という型にクエリの項目を入れていくのですが、この通りに設定していくと`primitive.E composite literal uses unkeyed fields`というワーニングが表示されます。
ワーニングなので、このままにしておいても良いのですが、ワーニングを消すためにどうすれば良いのかというのを今回書きます。## 対応
[MongoDBの Offical Go言語 Driverを使ってみる(1)準備・Insert](https://qiita.com/h6591/items/f3a7c1
LeetCodeに毎日挑戦してみた 122. Best Time to Buy and Sell Stock II(Python、Go)
#### Leetcodeとは
[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)
#### 31問目(問題122)
#### 122. Best Time to Buy and Sell Stock II
問題内容> Say you have an array `prices` for which the *i*th element is the price of a given stock on day *i*.
>
> Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy on
【Go】Qiita 週間 LGTM 数ランキング【自動更新】
# 他のタグ
[`AWS`](https://qiita.com/items/e24b6279326a462d456c) [`Android`](https://qiita.com/items/8b3af051428d746f26c5) [`Docker`](https://qiita.com/items/ae11fca7d2eba445b037) [`Git`](https://qiita.com/items/74eacdbf363e260981c3) [`Go`](https://qiita.com/items/49d4537d95f878b3e91a) [`iOS`](https://qiita.com/items/e61a29a383d0403e92fc) [`Java`](https://qiita.com/items/4c3f84836bfdbb137226) [`JavaScript`](https://qiita.com/items/eaa7ac5b62a0a723edbb) [`Linux`](https://qiita.com/items/362e81e53c3f
YAML+Mustache+go-generate で go の メタプログラミング をする
※この記事は、[CyberAgent PTA Advent Calendar](https://adventar.org/calendars/5741) 2020の24日目の記事です。
株式会社AbemaTV ビジネス開発本部 で広告システムのエンジニアをしています @shunta-furukawa です。
今日はクリスマスイブですね。メリークリスマスイブ!!# はじめに
さて、[AJA SSPとその技術について](https://qiita.com/_tarof/items/3d568a23dba9b11b9ebe#go%E8%A8%80%E8%AA%9E)、でも触れられていましたが、サイバーエージェントで作られるシステムで Go言語が用いられることは多いです。
Go言語は、他の言語と比べて 言語仕様がシンプルなためハイパフォーマンスを出しつつも 扱いやすいために人気がある言語だと思います。反面、抽象化された賢い記法などがなく、記述量が多い言語でもあると思います。
– 書いていると気付いたらもう夜に…
– どうにか実装スピードをあげたい…そんな時に、`go
おまえもLGTM GIF画像を生成して、チームの生産性を上げてみないか?
# TL;DR
golangで
1. 既存gif拾ってきて
2. 文字列を合成して
3. LGTM画像を大量製造してみたソースコード: https://gist.github.com/tng527/484d77db0b86ff6c7aa13435073e1100
# 取り組みのモチベーション
レビュー時に拾い物のLGTM画像を貼っていたところ、以下のように喜んでもらえた。
![スクリーンショット 2020-12-22 13.44.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68104/a6280042-75bf-7b04-3378-24c8acc1ed27.png)常に新鮮なLGTM画像を利用することで、メンバーのモチベが爆上がりするのではないか?(仮説)
拾い物のLGTM画像は面白みに欠ける画像が多い(個人の感想)ので、生成してみることにした。
# 注意点
いつもどおり、アドカレに間に合わせるための動けば良いやコードです。
エラー処理は基本してませんし、使い勝手の向上は今後
VSCode + Remote Containerで環境構築(Go・応用編)
# 序文と謝辞
先日Go言語で簡単な方法を使ってリモートコンテナをつくりました(参考:[VSCode + Remote Containerで環境構築(go編)](https://qiita.com/honami/items/a1d943c31874cf576e43))が、作ったあと心の師匠(@MegaBlackLabel)からLGTMとともに以下のような~~ツッコミ~~天啓が。
いいですね。
次のステップでdocker-composeに差し替えしつつ、srcフォルダをプロジェクト内のsrcフォルダにvolumeをアタッチするのをするといい感じかと。— れいな@底なし沼の魔女 (@MegaBlackLabel) December 21, 2020
Goクイズ: Type assertions
# はじめに
本記事は, [Goクイズ Advent Calender 2020](https://qiita.com/advent-calendar/2020/goquiz)の12/24用に書かれました。昨日は, @binzumeさんの[「Goクイズ: int = float64」](https://qiita.com/binzume/items/14f73f0f5da7f409fac9)でした。
Index expressionsに関する問題を出そうと思ったのですが, 以前[Twitterで出題した問題](https://twitter.com/task4233/status/1339189806958403585?s=20)と似ている気がしたので, 急遽Type assertionsに関する問題に取り替えました。
では, 本題に入ります。
# 問題
以下のコードを実行すると, どのように出力されるでしょうか?
[Playground](https://play.golang.org/p/28BcX6Eq4S-)“`go
package mainimport (
Progate Goコースを終えた人へ贈るWeb API開発入門
# はじめに
この記事は[Go 3 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/go3)の23日目の記事です。
## あなたは誰?
プログラミング歴1年半くらいで、普段はWebプログラマ(Go, React)のインターンとして働いています。
## なぜこのような記事を書くに至ったか
この記事は[Progate](https://prog-8.com)のGoコースを終えたけどこれからどうやって学んでいけばいいかわからない人のためのガイド的なものです。
筆者自身、完全プログラミング初心者のときProgateにお世話になったのですが、Goのすべてのコースを終えたあとどのように学んでいけばいいのかわからずに困惑した記憶があります。
Progateの言語紹介文句には「Googleが開発した 人気上昇中のサーバーサイド言語」とありますが、Progateのレッスンは基本的な文法を学ぶものであり、WebアプリやWeb APIを作成するガイドはありません。
巷で「やるといいよ!」と言われている[A Tour of