- 1. GoでPadding Oracle Attackしたい!
- 2. Gopacketでパケットをキャプチャしたり生成したりしてみる
- 3. Go 1.18 で追加される debug/buildinfo
- 4. nvim-dapを利用したGo言語デバッグ
- 5. AxumでGoのチュートリアル「Writing Web Application」をやってみた
- 6. Go 言語で GitLab Bot の作成
- 7. goyacc で生成したコードに VSCode で Go to Definition できない場合の対処
- 8. Mattermost 403 エラー
- 9. KubernetesでCloud Spanner Emulatorを用いたローカル開発環境を構築する
- 10. Ubuntuに最新バージョンのGo言語をインストールする
- 11. ESP32 向けに TinyGo をセットアップする
- 12. 地形生成アルゴリズム 開発NG集
- 13. PulumiのGoでAWS App Runnerを構築する
- 14. Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
- 15. 軽量プログラミング言語経験者のGoとの付き合い方
- 16. pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
- 17. Golandの便利設定(随時更新中…)
- 18. M1macでGo言語の環境を整えた話
- 19. go testの裏側では何をしているのか?Goのtestingパッケージの中身を覗いてみよう!
- 20. 【Go】RDGLで簡単・劇的リアルな地形生成
GoでPadding Oracle Attackしたい!
「 [Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot) 」 22日目の記事になります。
前日は @ref3000 さんの [Unity でサクッと機械学習を体験してみよう【ML-Agents】](https://qiita.com/ref3000/items/40a0915fbc4478b5cadb)という記事でした。## はじめに
業務で暗号化に興味を持ってパディングオラクル攻撃という名前に惹かれたので今回はGo言語でパディングオラクル攻撃をやっていきます。## AES CBCモードについて
今回のパディングオラクル攻撃をする対象の暗号文はAESのCBCモードを使用して暗号化しました。AESは平文をブロック長ごとに暗号化するブロック暗号で、ブロック長が128bit、鍵長が128/192/256bitの3種類です。CBCモードは一つ前の暗号文ブロックと平文ブロックをXORとってから暗号化する方法で前のブロックに依存するため同じ平文であっても異なる暗号文になるため推測
Gopacketでパケットをキャプチャしたり生成したりしてみる
この記事は[富士通クラウドテクノロジーズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fjct) 22日目の投稿です。
昨日は@kodakkuさんの「**[教師なし学習で周期表(金属)を分析してみる【主成分分析・R・Python】](https://qiita.com/kodakku/items/e082965d2792bc51e2f1)**」でした。
主成分分析することで、同族の元素が似たような性質をもっているということが可視化されてて面白かったです。
私はデータ分析については素人なのですが、主成分分析をするときにはこの記事を参考にしたいと思います!## はじめに
こんにちは。FJCT21卒新入社員の@kswです。
10月に仮想ネットワークの運用・開発を行うチームに配属され、一人前のインフラエンジニアになるために日々奮闘しています。今回は、一人前のインフラエンジニアの必須スキルの一つである(と私が勝手に思っている)「パケットの気持ちがわかる」を身に付けるため、Gopacketを使って実際にパケッ
Go 1.18 で追加される debug/buildinfo
Go 1.18 で新しく追加される [`debug/buildinfo`](https://pkg.go.dev/debug/buildinfo@go1.18beta1) パッケージについて調べました。
※ 特に記載がない限り 2021 年 12 月 19 日時点の情報になります。
## 概要
https://pkg.go.dev/debug/buildinfo@go1.18beta1
従来からビルドに使用された Go のバージョンや依存パッケージの情報はバイナリに含まれており `go version -m` で出力できましたが内部パッケージとして実装されているため外部からは利用できませんでした。 [^1] [^2]
これらの機能を外部から利用できるようにしたのが `debug/buildinfo` です。https://github.com/golang/go/issues/39301
[^1]: https://github.com/rsc/goversion
[^2]: https://knqyf263.hatenablog.com/entry/2021/02/12
nvim-dapを利用したGo言語デバッグ
# はじめに
Go言語のデバッグどのようにしていますか?
printデバッグだったり、Delveを使ってCLIでやったり、IDEのデバッグ機能だったりかと思います。
私は、nvim-dapを利用して、Neovimでデバッグしているので、その紹介となります。![intro.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218282/c75c5e82-1ed1-b1f2-9ee8-f3f737d71846.gif)
# 準備
下記プラグインを利用していきます。
– [nvim-dap](https://github.com/mfussenegger/nvim-dap)
– [nvim-dap-ui](https://github.com/rcarriga/nvim-dap-ui)
– [nvim-dap-go](https://github.com/leoluz/nvim-dap-go)
– [nvim-dap-virtual-text](https://github.com/theHamsta/n
AxumでGoのチュートリアル「Writing Web Application」をやってみた
[フューチャーアドベントカレンダー](https://qiita.com/advent-calendar/2021/future)の22日目の記事です
# はじめに
私はプログラミング初心者ですが、ITエンジニアリングスキルを高めて手に職をつけたい!という気持ちがあります。そこで、まずは社会で比較的需要の多い(のか?)Webバックエンド開発の基礎を習得したいと思いました。Webバックエンドフレームワークは星の数ほどあれど、それらに共通した要素は多いはずで、どれか一つにある程度習熟してしまえば、新たなフレームワークを学ぶのは容易になるはずです。
と考えると何でもいいような気がしたので、自分の好きな言語であるRustのWebフレームワーク[`Axum`](https://github.com/tokio-rs/axum)を選びました。ただ、`Axum`はかなり新しいフレームワークで、チュートリアルなどが見当たらないので、Goの[`net/http`](https://pkg.go.dev/net/http)のチュートリアル[Writing Web Application](http
Go 言語で GitLab Bot の作成
書き途中です
# GitLab の Bot を Golang で作成
します
# 準備
以下の Github を参考にして、Bot を作成します。
https://github.com/xanzy/go-gitlab
“`
go get github.com/xanzy/go-gitlab
“`# ソースコード
“`
package mainimport (
“log”“github.com/xanzy/go-gitlab”
)func main() {
git, err := gitlab.NewClient(“-eo1D7ZVkyczkvTt4G7V”,gitlab.WithBaseURL(“http://192.168.202.129:9010/api/v4”))
if err != nil {
log.Fatalf(“Failed to create client: %v”, err)
}// Create new project
p := &gitlab.CreateProjectOptions{
Name:
goyacc で生成したコードに VSCode で Go to Definition できない場合の対処
下記のようなファイルを入力として
“`yacc:parser.go.y
%{
package parserimport (
“bytes”
“fmt”
“io”
“strconv”
“strings”
“unicode”
)func DoSomething(s io.RuneScanner) (string, error) {
…
}
…
“`goyacc を下記のように実行すると
“`winbatch
goyacc -o parser.go parser.go.y
“`下記のような Go のコードが出力されますが
“`go:parser.go
// Code generated by goyacc -o parser.go parser.go.y. DO NOT EDIT.//line parser.go.y:1
package parser
import __yyfmt__ “fmt”
//line parser.go.y:3
import (
“bytes”
“fmt”
“io”
“strconv”
“s
Mattermost 403 エラー
# Go 言語で Mattermost BOT を作成する
Mattermost と Go 言語で Bot を作ろうとして、リクエストを投げると 403 エラーが出力された。
# ソースコード
“`
package mainimport (
“fmt”
“net/http”
“net/http/httputil”
“bytes”
“os”
“encoding/json”
)type BODY struct {
channel_id string
message string
}func HTTPPost(mes string) {
requestBody := &BODY{
channel_id: “1ngefhpjojyabd9fc7n8twt3xh”,
message: “hello”,
}//リクエストbodyをjson.Marshal関数を使って作成する
jsonString, err := json.Marshal(requestBody)
if err != nil {
fmt.Println(err)
KubernetesでCloud Spanner Emulatorを用いたローカル開発環境を構築する
この投稿はグレンジ [Advent Calendar 2021][advent-calendar]の21日目の記事です。
[Cloud Spanner Emulator][cloud-spanner-emulator]を利用して、Kubernetes上でローカル開発環境を構築します。
appコンテナからspannerコンテナへ接続するサンプルを作ってみます。
環境は[Helm][helm]を使って構築していきます。## イメージ作成
Go、gcloud、[spanner-cli][spanner-cli]を利用できるようにします。
“`dockerfile:build/app/Dockerfile
FROM golang:1.17.5-buster# https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja
RUN echo “deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/
Ubuntuに最新バージョンのGo言語をインストールする
#はじめに
UbuntuにaptでGo言語をインストールしようとすると、少し古いバージョンがインストールされてしまうので、最新バージョンがインストールされるようにします。#環境
Ubuntu 20.04.3 LTS#Goをインストール
以下のコマンドを実行すると、Goのバージョンは1.13でAPTのソースはUbuntuのサイトをさしています。“`
$ apt info golang
Package: golang
Version: 2:1.13~1ubuntu2
Priority: optional
Section: devel
Source: golang-defaults
Origin: Ubuntu
Maintainer: Ubuntu Developers
Original-Maintainer: Go Compiler Team
Bugs: https://bugs.launchpad.net/ubuntu/
ESP32 向けに TinyGo をセットアップする
このページには、 ESP32 + TinyGo を使ってマイコンプログラミングを始めるための情報を記載します。
ESP32 を搭載したボードは多数ありますが、ボード固有の話よりもまずは ESP32 全般の環境を立ち上げます。
あと、試してないですが、 ESP8266 および ESP32-C もこのページに従って環境立ち上げできるはずです。## TinyGo とは
マイコンや WASM などの Small Places 向けの Go Compiler です。
ここでは Go の文法でマイコン開発ができるもの、という程度の認識でよいです。* [TinyGo – Go on Microcontrollers and WASM](https://tinygo.org/)
このページは 2021/11/18 にリリースされた TinyGo 0.21 を対象としています。
## ESP32 とは
WiFi + Bluetooth を内蔵するマイクロコントローラーです。
Tensilica の Xtensa LX6 マイクロプロセッサを採用し、デュアルコアとシングルコア版があります。
地形生成アルゴリズム 開発NG集
### まえがき (FUN関係者の方々に向けて)
このNG集は [FUN Advent Calendar 2021](https://adventar.org/calendars/6526) に投稿させていただく記事です。
公立はこだて未来大学(FUN)の先輩の方々には、入学前という立場にも関わらず様々な形でお世話になっています。。同級生もやさしい&面白い人ばかりで、改めてFUNを選んでよかった…と感銘を受けています。皆さんこれからもどうかよろしくお願いします。# 概要
自分は近頃、地形生成アルゴリズムの実装にハマっています。
先日にはこんなものをリリースしました↓https://github.com/TadaTeruki/RDGL
(よければ★スターしてね!)
使い方の解説などは[**この記事**](https://qiita.com/TadaTeruki/items/a78a8e463e4edfda1884)に載せているので、興味のある方ぜひ見てみてください
タイトルは若干誇張してますが、、ご愛嬌。### NG集??
この**RDGL**という代物ですが、
PulumiのGoでAWS App Runnerを構築する
## Pulumiってなに?
以前書いた記事の通り、インフラのプロビジョニングツールです。
https://qiita.com/runeleaf/items/0e2b69bae38164aa826a
今回はGoでAWSのApp Runner環境を構築してみます。
前回からだいぶ間が空いているのですが、変わったことといえばPulumi 3.0がリリースされたこと、AWSネイティブプロバイダーを発表したことでしょうか。
https://www.infoq.com/jp/news/2021/11/pulumi-aws-native-provider/
なにがどう変わったのか細かく見るのもアレなので今回はPulumiでApp Runnerの環境をつくりたいと思います。
ちなみにまだRubyには対応していない。
## 準備
macOS Big Sur
“`
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
“`“`
$ pulumi version
v3.20.0
“`AWS環境変数設定
“`
Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
## Goでサーバを立ち上げる
のは簡単です。
ルートに、URIと関数をセットで登録し、起動すればOKです。
パッケージは、`gorilla/mux`を使っています。
URIをいじった際のメソッド(`GET`、`POST`)を追いたいので、標準エラー出力とレスポンスにメソッドの中身を出力しています。
なぜ標準エラー出力かのツッコミは、一旦置いといてください。“`go
import (
“net/http”
“github.com/gorilla/mux”
)func main() {
r := mux.NewRouter()
r.HandleFunc(“/api/out”, out)
http.ListenAndServe(“:8080”, r)
}func out(w http.ResponseWriter, r *http.Request) {
method := r.Method
println(method)
w.Write([]byte(method))
}
“`## 正しいURIでアクセス
してみます。上記ソースを起動し、API Clie
軽量プログラミング言語経験者のGoとの付き合い方
# はじめに
[朝日新聞社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/asahi)の第20日目を担当する[M研](https://cl.asahi.com/)の松原です。
宜しくお願いします。普段はTypeScriptやPythonを触っており、Goを書き始めた当初は「あれもない」「これもない」という物足りなさに満ちていました。
3ヶ月くらいGoと向き合って考え方が変わってきたので、軽量プログラミング言語と比較したGoの特徴や、見てきたドキュメントについてまとめたいと思います。# 想定読者
– 一通りのチュートリアルは終えた人
– クラスベースのオブジェクト指向言語に触れたことがある人
– Go言語なんかしっくりこないな〜って人# 「Goに入ってはGoに従え」
– Goにないものは結構あるので、まずはそれをちゃんと理解する
– 物事にはトレードオフがつきもの、Goはシンプルさと変更の少なさに重きをおいている
– 「これがないのはイケてない!プンプン」と思うものもあるかもしれないが
pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
# はじめに
先日(2021/12/04)の [FOSS4G Japan 2021 Online](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day) イベントでは、「[pgGeocoderのご紹介](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day#sponsor5)」というタイトルで発表させて頂きました。
_FOSS4G Japan 2021 Online – pgGeocoderのご紹介_
Golandの便利設定(随時更新中…)
# go fmt
コード整形してくれるツール。
command + S で保存するといい感じにコードを整形してくれる。
> Preferences > Tools > File Watchers で設定# Add a leading space to comments
ショートカットでコメントアウトした時に自動でスペースをしてくれる設定。“`
// コメント
↑ここのスペース
“`
> Preferences > Editor > Code Style > Go > Other# Comming soon…
M1macでGo言語の環境を整えた話
#1.はじめに
MacBook Air(M1,2020)において、Goの学習を始めるために環境を整えようと思います。ちなみにちゃんとした記事は今日が初めてですのでどうか温かい目で見てやってください。お願いします:baby_tone1:
#2.手順1
以下のサイトでダウンロード
https://go.dev/doc/install
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514897/903ddd4c-2d2e-a729-96c3-6ad8c0dd2d7e.png)
そして特にこだわりがない場合はそのまま続けるを押下。(あれ、キャラクターこんな色だっけ)
#3.手順3
確認
ターミナルを開き
“`go version
“`
と押して、バージョンが出れば完了です!
#4.参考
https://techbowl.co.jp/techtrain/mypage/railway/5/quest/73テックトレインをやる上でせっかくなら記事を書き始めようと思いました。
go testの裏側では何をしているのか?Goのtestingパッケージの中身を覗いてみよう!
## :qiitan:はじめに
Goのユニットテストはとても簡単に書くことができ、指定された書式に沿ってコードを書けばテストができます。“`go
func TestSample_Sample(t *testing.T) {
if got := Sample(); got != “ok” {
t.Errorf(“Sample() = %v, want %v”, got, “ok”)
}
}
“`
筆者は業務・プライベートでテストを書いているうちに、– 「Goのテストって簡単に書けるけど、裏側ではどのように処理されているんだろう?」
– 「いつもテスト関数に渡している`*testing.T`ってなんだろう?」ということが気になりました。
実際の処理は内部に隠されており、調べても「Goのテストの書き方」の情報は見つかるのですが、内部構造の解説をしている情報にはたどり着くことができませんでした。
**「じゃあ実際にtestingパッケージをコードリーディングしてみよう!」**と思い立って、調べたことをまとめた内容が本記事になります。コードは公開されているた
【Go】RDGLで簡単・劇的リアルな地形生成
この記事は、自作ライブラリ**RDGL**の紹介目的で執筆したものです。
まだプレリリース状態なので、使用に際して不具合が発生する場合があります。
また、予告のない仕様変更が行われる可能性もあります。ご了承ください。
コントリビューション大歓迎です(詳しくは記事後半)。# RDGLとは?
**R**ealistic Procedural **D**EM **G**eneration **L**ibrary → **RDGL**
Go製の地形自動生成ライブラリです。
https://github.com/TadaTeruki/RDGL
今までの地形生成になかった特徴として、RDGLの生成する地形は
– 平地
– 渓谷
– 大陸棚
– リアス式海岸…といった、実在する地形の要素に基づいたものとなっています。
こんな感じ↓
!