新しいことを始めるときに残すメモ

プログラマとして作るだけの仕事をしていたので、気になったこと新しい事を記録として残していくためのメモ

久しぶりのAndroidStudioでいきなりエラー

久しぶりにAndroidStudioでちょっと検証を行うってなったので、AndroidStudioも最新版を入れなおしてサンプルプロジェクト作成してエミュレータもPixel6にしてビルドしてみたら
いきなりのエラー

Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)
Duplicate class androidx.lifecycle.ViewTreeViewModelKt found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)

早速問題にぶつかるとは
lifecycleが競合起こしてるのかなと思いつつハマった時のGoogle先生に尋ねたところgradleに入れたらいいよっていう記事を発見。

dependencies {
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
    ・・・
}

ameblo.jp

ビルド通った!!

ありがとうございました。

次はECHOフレームワークに触れてみる

とりあえずgoのバージョン確認

$ go version
go version go1.18.4 linux/amd64

もしくは

package main

import (
    "fmt"
    "runtime"
)

func main() {
    fmt.Println("Go version :", runtime.Version(), ", OS :", runtime.GOOS, ", ARCH :", runtime.GOARCH)
}

こんなかんじ

V1.18だとGO111MODULEはデフォルトでONのはず
なので、そのままHello worldを作ってみる。

$ mkdir tutorial_2 && cd tutorial_2
$ go mod init tutorial_2
go: creating new go.mod: module tutorial_2
$ go get github.com/labstack/echo/v4
package main

import (
  "net/http"
  "github.com/labstack/echo/v4" // <- Echo v4をimportしている
  "github.com/labstack/echo/v4/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}

んじゃビルドっておもったところ以下のようにエラーが出る。HelloWorldで躓くとは...

$ go build
../../go/pkg/mod/github.com/labstack/echo/v4@v4.9.1/middleware/jwt.go:9:2: missing go.sum entry for module providing package github.com/golang-jwt/jwt (imported by github.com/labstack/echo/v4/middleware); to add:
        go get github.com/labstack/echo/v4/middleware@v4.9.1
../../go/pkg/mod/github.com/labstack/echo/v4@v4.9.1/middleware/rate_limiter.go:9:2: missing go.sum entry for module providing package golang.org/x/time/rate (imported by github.com/labstack/echo/v4/middleware); to add:
        go get github.com/labstack/echo/v4/middleware@v4.9.1

とりあえずGoogle先生に相談したらgo.sumに乗っていないのが原因らしい。
というわけで、もう一度やり直し。

$ go mod tidy
go: downloading github.com/stretchr/testify v1.7.0
go: downloading github.com/golang-jwt/jwt v3.2.2+incompatible
go: downloading golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
$ go build

今度は問題なくビルドが通ったので実行してみる。

./tutorial_2

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.9.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
? http server started on [::]:1323

{"time":"2022-11-02T13:38:57.697627938+09:00","id":"","remote_ip":"::1","host":"localhost:1323","method":"GET","uri":"/","user_agent":"curl/7.61.1","status":200,"error":"","latency":6512,"latency_human":"6.512μs","bytes_in":0,"bytes_out":13}
$ curl "http://localhost:1323"
Hello, World!

これでとりあえずEchoが動作した。よかったよかった。

参考

Goの1.16で missing go.sum entry for module ... to add: ...と出るときの対処法 - Qiita

【Golang】Echo v4をインストールする | NO MORE! 車輪の再発明

goのPATHを通してみる

go installを行う前に、$GOPATHを通してやる必要があるらしいので
bash_profileにパスを記述。

export GOPATH=/home/centos/go
export PATH=$GOPATH/bin:$PATH
source ~/.bash_profile

パスを仕込むとどうなるかってところだけど、
goのメインソースのあるディレクトリでgo mod init xxxxを実行するとgo.modファイルができる

$ go mod init tutorial1
go: creating new go.mod: module tutorial1
go: to add module requirements and sums:
go mod tidy

でgo installをすることでバイナリがパスのところに出来上がる。

$ go install

で、バイナリを実行してみると実行結果が返ってくる。

$ cd ~
$ tutorial1
Go version : go1.18.4 , OS : linux , ARCH : amd64

今回の例は実用的じゃなかったけど、指定したパッケージがコンパイルされてパスにインストールされるということみたい。
パスが通ったところにインストールされているからhomeからtutorial1で実行されたよう。
もう少し実践的なものになったらわかりやすくなるかな?

Golangに触れてみる

phpに代わるなにかが起こるとしたら次は何だろうとふと思ってしまったので、ちょっとだけ調べて昔触ったことのあるNode.jsかGolang
Googleがかかわってきてるってところで今回はGolangに触れてみようと思いメモ。今更なんだけどね
tensorを使っていく中でgoの話は出たりでなかったりしているからっていうのもgolangを選択した理由の一つなんだけどどれぐらい影響するんかな?

てなわけで、とりあえず触れる環境を作成。

  • 環境
    Webarena 1GB 1vCPU 20GB 100Mbps上限 IPv4 318円(税込349円)

  • OS
    Centos8 stream

Dockerでやってもよかったんだけど、とりあえず初めてはサーバ触ってみたいじゃん?
ということで下記実行

# update  
$ sudo dnf update
# サーバの日付合わせ  
$ sudo /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime  
# GPGキーのインストール  
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial  
# epel-releaseのインストール  
$ sudo dnf install -y epel-release && dnf clean all  
# golang インストール  
$ sudo dnf install golang  

これでgoの実行できる環境ができたはず。 ディレクトリ作ってmain.goを作成

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("hoge")
    fmt.Println(time.Now())
}
$ go run main.go
hoge
2022-11-01 12:42:10.819805636 +0900 JST m=+0.000031983

動いてるみたい。

自己紹介

大卒後、とある営業を2年ほど行ってその後IT企業に入社。
数年間、.net系をいじくりながらシステムサポートとdelphiを少々。
その後、Web系に転職してphp, javascript, python, cをいじりながら興味のあるものに触れてます。
AI, VRとかも触れつつ新しいことを残すようのメモとしてブログ再開。