teleren/devto huggingface dataset:
DigitalOcean(CentOS)にGoインストール
Tags: go, digitaloean, centos
Published: 2020-03-26 02:21:30

---
title: DigitalOcean(CentOS)にGoインストール
published: true
description: 
tags: go, digitaloean, centos
---

今更だけど、DigitalOceanサーバーにGoインストールした。

```
$ cd /usr/local/src/
$ sudo wget https://storage.googleapis.com/golang/go1.3.1.linux-amd64.tar.gz
$ sudo tar -xzf go1.3.1.linux-amd64.tar.gz 
$ sudo mv go /usr/local/ 
$ vim ~/.bashrc 
export PATH=$PATH:/usr/local/go/bin 

$ source ~/.bashrc
$ go version
go version go1.3.1 linux/amd64

$ cd 
$ mkdir go
$ cd go
$ vim hello.go
package main
import "fmt"
func main() {
    fmt.Printf("hello world\n")
}
$ go run hello.go
hello world
$ exit
```
GoでSlackIncomingWebHooksを使ってみる
Tags: go, slack
Published: 2020-03-26 02:20:39

---
title: GoでSlackIncomingWebHooksを使ってみる
published: true
description: 
tags: go, slack
---

Go言語の勉強も含めてSlackにPostしてみた。

https://{team}.slack.com/services/new/incoming-webhook
Channel選択してAdd

PostするGoを書く

```slack.go
package main

import (
    "strings"
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    apiUrl := "https://{{team}}.slack.com"
    path := "/services/hooks/incoming-webhook"
    u, _ := url.ParseRequestURI(apiUrl)
    u.Path = path

    query := url.Values{}
    query.Set("token", "**********")
    u.RawQuery = query.Encode()

    urlStr := fmt.Sprintf("%v", u)

    data := url.Values{}
    data.Set("payload", "{\"text\": \"元気ですか？！\"}")

    client := &http.Client{}
    r, _ := http.NewRequest("POST", urlStr, strings.NewReader(data.Encode()))
    r.Header.Set("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    fmt.Println(resp.Status)
}
```

エラーは全部無視してしまった！
Swift で Hello World
Tags: swift
Published: 2020-03-26 02:18:01

---
title: Swift で Hello World
published: true
description: 
tags: swift
---
とりあえずSwiftでHello World書いてみた。
5GBもするXcode 6 betaをダウンロードしてインストール
起動するのに1分ぐらいかかる。

AppDelegate.swift

```objc
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    // Override point for customization after application launch.

    var controller: UIViewController = UIViewController()
    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.blackColor()
    controller.view = view
    
    var label: UILabel = UILabel(frame: CGRectMake(0, 0, 320, 20))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "Hello World ! Hello Swift !"
    label.textColor = UIColor.whiteColor()
    controller.view.addSubview(label)
    self.window!.rootViewController = controller
    
    self.window!.backgroundColor = UIColor.whiteColor()
    self.window!.makeKeyAndVisible()
    return true
}
```
プロジェクは、github (https://github.com/dongri/swift)
Covid 19 Monitor. NuxtJS + TailwindCss
Tags: vue, nuxt, corona, covid19
Published: 2020-03-26 02:04:15

---
title: Covid 19 Monitor. NuxtJS + TailwindCss
published: true
description: I programmed Covid-19 monitor via Vue Nuxt Tailwind
tags: vue, nuxt, corona, covid19
---

Hello! I am a Front End Developer who is living in Turkey. I programmed a Covid-19 monitor via Vue Nuxt Tailwind.


https://covid19sayac.xyz/
https://github.com/Keepnox/covid19sayac/
可搬性の高いC言語のコードを書くために
Tags: c
Published: 2020-03-26 01:45:23

# まえがき

C言語で初めてちゃんとしたソフトウェアを書いてみようって人向けの内容です。
初心者のかたが知らず知らずのうちに処理系依存の動作を作り込んでしまうという、
事態をさけて欲しいという思いで書きました。

# 可搬性

C言語の特徴のうちの一つに `可搬性が高い` というものがあります。

- あるコンピュータ用にＣ言語で作ったプログラムを、他のコンピュータ用に移植しやすいということです。

# 言語規格では厳密に仕様を定めていない

ではなぜ可搬性が高いのかと言うと、言語規格としては3種類の動作の仕様を定めていません。
順番に説明していきたいと思います。

## 1. 未定義の動作

まず一つ目に、未定義 (undefined)の動作というものがあります。
規格には「可搬性がないもしくは正しくないプログラム構成要素を使用したときの動作」と書かれており、

平たく言うとクソみたいなプログラムがどう動かくか定義したくないなから、そんなクソコードは書くなということです。

### 0除算

未定義の動作の例として0除算があります。
つまりC言語では0除算が発生した時に何が起こるかは規定されていません。
今時の高級な言語なら当然、例外が発生すると規定されているでしょう。

## 2. 未規定の動作

二つ目に未規定 (unspecified)の動作というものがあります。
プログラムの動きとして2つ以上の可能性があり、どれが実行されるかについて、
C言語の標準仕様として全く要求を課されていない動作のことです。
厳密に決めるとコンパイラ作る時に面倒だから考えたくないという意味です。

### 式の評価順序

未規定の動作の例として式の評価順序があります。
順番が保証されないので、結果がどうなるかは実行してからのお楽しみです。

## 3. 処理系定義の動作

最後に処理系定義 (implementation-defined)の動作というものがあります。
処理系の特徴に依存する動作のことです。

未規定の動作の一種で、同じくコンパイラ作る時に面倒だから考えたくないという意味ですね。

### 1byteあたりのbit数

処理系定義の動作の例として「1byteあたりのbit数」というのがあります。
ということは、C言語では1byteは8bitではない可能性があるということです。
もう何を信じればいいのかわからなくなりますね。

# プログラマ側の責任

C言語ではシステムの停止や未定義動作を引き起こす元凶となる致命的なソフトウェアの不具合に対する最終防壁はなく、
全てプログラマ側の責任のもと実装する必要があります。
最高に `やりがい`　を感じますね。

# あとがき

- 社内LTでC言語の魅力について発表した資料の文字起こしです。
    - Web, アプリ系エンジニアには当然ながら受けませんでした。
        - 受けないどころかC言語はクソだなとまで言われてしまいました。（泣）

- マサカリをお待ちしています。
MySQLでサブクエリを使ってUPDATE
Tags: sql
Published: 2020-03-26 01:44:26

MySQLの[リファレンスマニュアル](https://dev.mysql.com/doc/refman/5.7/en/update.html)に不吉な事が書いてあったけど、うまくいったのでメモ
> You cannot update a table and select from the same table in a subquery.

## やりたいこと
住所テーブルに顧客毎の並び順を保証する列を追加したい。
列の初期値として、既存データを並び替えて連番を発行する。

## やったこと

```sql
UPDATE addresses t1,
    (SELECT 
        t3.id,
            SUM(t3.id >= t4.id) AS no
    FROM
        addresses t3
    INNER JOIN addresses t4 ON t3.user_id = t4.user_id
    GROUP BY t3.id) t2
SET 
    t1.no = t2.no
WHERE
    t1.id = t2.id
```
Rails 5.2.0.rc1のactive_storageを無効化する
Tags: ruby, rails
Published: 2020-03-26 01:41:38

## 経緯

Rails 5.2.0.bata2で開発していた環境をrc1に更新したところ、
bin/rails routesの結果に下記が含まれるようになった。

```shell
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                        active_storage/blobs#show
     rails_blob_variation GET    /rails/active_storage/variants/:signed_blob_id/:variation_key/*filename(.:format) active_storage/variants#show
       rails_blob_preview GET    /rails/active_storage/previews/:signed_blob_id/:variation_key/*filename(.:format) active_storage/previews#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                       active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                               active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                    active_storage/direct_uploads#create
```

## 解決策

ActiveStorageを使用する予定が無いのでActiveStorageを無効化してしまいました。

下記のコードを全てコメントアウト

```config/application.rb
require 'active_storage/engine'
```

```config/environments/development.rb
config.active_storage.service = :local
```

```config/environments/production.rb
config.active_storage.service = :local
```

```config/environments/test.rb
config.active_storage.service = :test
```

## 追記

ごめんなさい。これを消す必要もあります。

```app/assets/javascripts/application.js
//= require activestorage
```
Command Line Tools (macOS 10.13) for Xcode 9.3でdelveを使用したGo langのデバッグができない時の対策
Tags: go
Published: 2020-03-26 01:35:45

## 経緯

Command Line Toolsを9.3に更新したらIntelliJでGoがデバッグできなくなりました。
その時のエラーメッセージ

```
could not launch process: EOF
```

GitHubを見ると既に[issue](https://github.com/derekparker/delve/issues/1165)が報告されてました。
IntelliJはdelveを使用しているので、IntelliJに関係なくHigh Sierraでdelveを使う全てのユーザーに影響がありそうです。

## 対策

~~暫定の対応策として、Command Line Toolsを古いバージョンに更新するといいと[コメント](https://github.com/derekparker/delve/issues/1165#issuecomment-377676853)されていたので書かれてい通りに、~~
~~`$ sudo rm -rf /Library/Developer/CommandLineTools`~~
~~した後に、`Command Line Tools (macOS 10.13) for Xcode 9.2 - Dec 4, 2017`をインストールすることでデバッグできるようになりました。
古いCommand Line Toolsは https://developer.apple.com/download/more/ から入手可能です。~~

~~**あくまでも暫定対応なのでこまめに[issue](https://github.com/derekparker/delve/issues/1165)の状況を確認してください。**~~

**2018/04/14追記**

[修正コード](https://github.com/derekparker/delve/commit/edf4cebe25fa096c0e7fff061fedf236a6a1b6da)がMasterにmergeされてCloseされました。
IntelliJ,Golandユーザーは最新のバージョンで[解決](https://youtrack.jetbrains.com/issue/GO-5527)されました。
（IntelliJ 181.4445.78 + Go Plugin 181.4445.53.182で動作確認しました。）
リリースバージョンは更新されてないのでリリースバージョンを使用しているユーザーは、Masterを使用するか暫定対応を続ける必要がありそうです。

## 雑記

OS(macOS High Sierra 10.13.4)とCommand Line Tools両方まとめてアップデートしたのでどっちが原因かわからなかったのですが、
Command Line Toolsが原因だったので簡単に対策できてよかった。
macOS High Sierra(APFS)にパーティションを追加するときは、TimeMachineのスナップショットを確認しよう。
Published: 2020-03-26 01:34:31

MacでDockerを使った開発に疲れ果てた僕はLinuxを使うことにしたんだけど、パーティションを追加するのに3日もかかったお話し。

## 結論

結論を先に書くと、TimeMachineを使ってるとパーティションを追加できない。
[ココ](https://apple.stackexchange.com/questions/321533/cant-resize-apfs-container-not-enough-free-space-in-container-due-to-apfs-limi)を読んで、local snapshotsを消すと解決する。（この方法に辿り着く前にTimeMachineを停止したけど多分関係ない。）

### 削除例

```terminal
$ tmutil listlocalsnapshots /
com.apple.TimeMachine.2018-08-30-025106
com.apple.TimeMachine.2018-08-30-053741
com.apple.TimeMachine.2018-08-30-064022
com.apple.TimeMachine.2018-08-30-073925
$ tmutil deletelocalsnapshots 2018-08-30-025106
Deleted local snapshot '2018-08-30-025106'
$ tmutil deletelocalsnapshots 2018-08-30-053741
Deleted local snapshot '2018-08-30-053741'
$ tmutil deletelocalsnapshots 2018-08-30-064022
Deleted local snapshot '2018-08-30-064022'
$ tmutil deletelocalsnapshots 2018-08-30-073925
Deleted local snapshot '2018-08-30-073925'
$ tmutil listlocalsnapshots /
```

## やったことメモ

*解決しちゃったんで画像とか残ってないし、言語設定がUSなのでJAの文言はわからない。*

- パーティション（APFSではコンテナと言うらしい）の追加方法を[調べる](https://www.storange.jp/2018/03/apfs.html)
- ディスクユーティリティのパーティション画面で+ボタンが押せない
    - 右下に `This volume can not be split because the resulting volumes would be too small.` って書いてある
- ディスクをアンマウントした状態（option+command+Rで起動）でやってみるがダメ
    - 危うくコンテナをイレースしかけた。警告はちゃんと読みましょう！
- GUIでダメならCUIや！ってことでdiskutilコマンドを使うが怒られる

```terminal
$ diskutil list
/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         500.0 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +500.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            116.7 GB   disk1s1
   2:                APFS Volume Preboot                 22.3 MB    disk1s2
   3:                APFS Volume Recovery                519.0 MB   disk1s3
   4:                APFS Volume VM                      1.1 GB     disk1s4

$ diskutil apfs resizeContainer disk0s2 350g
Started APFS operation
Aligning shrink delta to 149,963,177,984 bytes and targeting a new physical store size of 349,999,996,928 bytes
Determined the minimum size for the targeted physical store of this APFS Container to be 499,963,174,912 bytes
Error: -69531: There is not enough free space in the APFS Container for this operation due to APFS limits or APFS tidemarks (perhaps caused by APFS Snapshot usage by Time Machine)
```

- Time Machineが悪そうなので停止してみるがダメ
- エラーコードでぐぐる
- [結論](https://apple.stackexchange.com/questions/321533/cant-resize-apfs-container-not-enough-free-space-in-container-due-to-apfs-limi)にたどりつく
- めでたしめでたし

## 学び

- インターネットは偉大
- GUIは甘えCUIこそ至高
fisher installができなくなって困った話し
Published: 2020-03-26 01:33:53

## 何が困ったのか

最近はfish shellを使用しており、新しい環境を構築するときはこの[記事](https://dev.classmethod.jp/etc/fish-shell-life/)を参考にしていたのですが、
fishermanのversionが3系になってから（？）`fisher install`が`fisher add`になったようで、困ったのでその備忘録です。
（クラスメソッド様にはいつも大変お世話になっております。:bow:）

## 変更前

```shell
$ fisher install omf/theme-bobthefish
$ fisher install z
$ fisher install 0rax/fish-bd
$ fisher oh-my-fish/plugin-peco
$ fisher install yoshiori/fish-peco_select_ghq_repository
```

## 変更後

```shell
$ fisher add oh-my-fish/theme-bobthefish
$ fisher add jethrokuan/z
$ fisher add 0rax/fish-bd
$ fisher add oh-my-fish/plugin-peco
$ fisher add yoshiori/fish-peco_select_ghq_repository
```
JetBrains Toolboxはいいぞ
Published: 2020-03-26 01:33:30

謎の集団zenelo内でのJetBrains Toolboxの認知度が低いなと感じたので、布教するための記事です。**届けこの思い。**

## JetBrains Toolbox

日本語ブログの説明を引用すると、`JetBrainsのToolbox製品(=IDE製品)の起動、インストール、更新および設定を一元管理するための無料のソフトウェア`です。
詳しい説明は公式を読んでください。(丸投げ)

[公式ページ](https://www.jetbrains.com/toolbox/)
[日本語ブログ](https://blog.jetbrains.com/jp/2018/10/09/1294)

![Screen Shot 2018-11-27 at 16.09.51.png](https://qiita-image-store.s3.amazonaws.com/0/159888/5b7f77cb-b061-23d3-036d-18684f0b3946.png)

## 推しポイント

(概ね日本語ブログで紹介されていますが...)

### 常に最新バージョンが利用できる

最新バージョンの通知や自動ダウンロードができます。
自分で情報を取得しに行く必要が無く、常に最新機能が使えるので非常に便利です。
*特定のメジャーバージョンに留まったり、旧バージョンへのロールバックも可能です。*
（私はテザリングでダウンロードされていて泣いたことがあります。 :cry: ）

### プロジェクト管理

複数のモジュールを開発していて常に複数のintellijを起動しているので、複数プロジェクトを管理する機能が非常に役立ちます。

### Maximum heap sizeの設定が簡単

あまりにも簡単なので4000MBに設定しています。いろいろ快適です。

### 色々な製品を試したくなる

普段はintellij IDEA Ultimateで開発していますが、ついつい色々ダウンロードして試してみたくなります。
私もWebStorm, GoLand, CLion, DataGripをダウンロードしました。
特にDataGripはSQLが最高に書きやすいで皆使ってマジで。
git add -pのすゝめ
Tags: git
Published: 2020-03-26 01:31:29

うっかり秘匿情報をプッシュした経験はありませんか？
そんな悲劇を回避するためのtipsです。

## そもそも

`$ git add -A` するな。
force push並の大罪やぞ。悔い改めろ。

## git add -pとは

[Git - git-add Documentation](https://git-scm.com/docs/git-add)からの引用

> -p
--patch
Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to review the difference before adding modified contents to the index.

> This effectively runs add --interactive, but bypasses the initial command menu and directly jumps to the patch subcommand. See “Interactive mode” for details.

要するにaddする`前`に差分を`対話的`に確認できるコマンドです。

## Let's try

ワーキングツリーに差分がある状態で、 `$ git add -p` してみてください。

![Screen Shot 2018-12-07 at 23.32.29.png](https://qiita-image-store.s3.amazonaws.com/0/159888/85ccc3b8-897b-6012-dc64-99c35d7ff872.png)

こんな感じになるはずです。
差分の塊(hunk)をステージするかを対話的に聞かれるので、[y,n,q,a,d,e,?]を使って、処理していきます。

```
Stage this hunk [y,n,q,a,d,e,?]? 
```

困ったときは`?`を実行してください。helpが表示されます。

```
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex                                                                                                                        い。
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
e - manually edit the current hunk
? - print help
```

なんだか色々あって不安になるかもしれませんが、`y`と`n`の2つを覚えれば大丈夫です。

- y
差分の塊(hunk)をステージングします。
差分の内容を確認し問題なければ`y`です。

- n
差分の塊(hunk)をステージングしません。
差分の内容を確認し意図しない秘匿情報や、デバッグログ出力等が含まれていた場合は`n`です。

一つ処理するとまた次の差分が自動的に表示され、全ての差分に対して処理するまで続きます。
※ `q` で強制的にそれ以降を全てステージングせずに`add -p`を終了することも出来ます。

上記の処理を繰り返してステージングが完了したら、いつものようにcommitを行ってください。

![Screen Shot 2018-12-07 at 23.37.51.png](https://qiita-image-store.s3.amazonaws.com/0/159888/961085e0-abcb-e8c5-5e6c-8ed6b73dfc4b.png)

## 反省

> force push並の大罪やぞ。悔い改めろ。

とかいいながら、サンプルプロジェクト作るときに-Aを使ってしまいました。悔い改めます。
静的なWebサイトをMarkdownで作りたい
Tags: html, javascript
Published: 2020-03-26 01:30:50

## やりたかったこと

簡単にWebサイトを作って公開したかった。

## ただし

- Markdownで書きたい（生のHTMLは書きたくない）
- 好きなCSSを当てたい

※1 CSSにこだわらなければVS Codeのプラグインを使ってHTMLやPDFを吐き出すのが早くて簡単です。
※2 Blogが書きたいのであればHugoとかJekyll、GatsbyJSを検討してください。

## というわけで

- Markdownでコンテンツを書いた。
- Markdown -> HTML変換するJavaScriptライブラリ([Marked](https://github.com/markedjs/marked))を選んだ。

## 悩んだこと

ググってもQiitaみたいに動的にMarkdownをHTMLに変換する方法しか出てこなかった。
Markdownで書かれたコンテンツをHTMLで読み込んで表示する方法がわからない。
ということをぼんやりつぶやいたら神が現れた。圧倒的感謝:pray: 

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://t.co/zLAByYOKJ3">https://t.co/zLAByYOKJ3</a><br>できました😊</p>&mdash; dtsuji🥑 (@dim0627) <a href="https://twitter.com/dim0627/status/1078296527162884097?ref_src=twsrc%5Etfw">2018年12月27日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## コードとその内容

教えて頂いたコードとその理解を備忘録として残しておきます。
*markedのreadmeに書かれている箇所は割愛させていただきます。*

### 全体

```html
<!doctype html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Marked in the browser</title>
  </head>
  <body>
    <div id="content"></div>

    <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
      axios.get('./content.md')
        .then(response => document.querySelector('#content').innerHTML = marked(response.data));
    </script>
  </body>
</html>
```

### 要点１

```html
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
```

> Promise based HTTP client for the browser and node.js

[axios](https://github.com/axios/axios)は**非同期**なHTTPクライアントです。

### 要点2

```html
axios.get('./content.md')
```

markdownファイルをGET Methodで取得しています。

### 要点3

```html
.then(response => document.querySelector('#content').innerHTML = marked(response.data));
```

重要なのは`.then();`の部分です。
axiosは非同期なのでgetの成功を待つためにthenを使用します。
上記のコードではgetしたresponseからdataを取り出しています。
取得したMarkdownに対して何かを行う場合はthenの中に処理を書きます。
（私は[Tocbot](https://tscanlin.github.io/tocbot/)を使用してtocを自動生成する処理を書きました。）
【Git】切り離されたHEAD（detached HEAD）
Tags: git
Published: 2020-03-26 01:28:18

## 切り離されたHEADとは

通常、チェックアウトではブランチ名を指定することにより。ブランチの先頭（HEAD）をチェックアウトします。
しかし、任意のコミットのチェックアウトも可能です。そうした状況では、Gitは切り離されたHEAD（detached HEAD）と呼ばれる無名ブランチを作ります。

## 切り離されたHEADが作成される条件

Gitは、次のような場合に切り離されたHEADを作ります。

- ブランチの先頭でないコミットのチェックアウト。
- 追跡ブランチのチェックアウト。
- タグで参照されたコミットのチェックアウト。
- git bisect操作の開始。
- git submodule updateコマンドの使用。

このような場合、Gitは切り離されたHEADに移動したことを通知します。

## 切り離されたHEAD上での操作

新しいコミットが必要になったら、まず最初に新しいブランチを作成してください。
作業状態を廃棄したければ、git checkout *branch*で名前付きのブランチに切り替えてください。
【Git】git reset --softとgit commit --amend
Tags: git
Published: 2020-03-26 01:27:44

**他の人が入手可能であり、別のリポジトリに存在するかもしれないブランチの一部は、書き換えたり、変更したり、交換してはいけません。**

## git reset --softとは

git resetコマンドはリポジトリと作業ディレクトリを既知の状態に変更します。
git resetは作業ディレクトリの変更を上書きして壊してしまう可能性があります。

git reset --soft *commit*は、HEADの参照を指定されたコミットに変更します。
インデックスと作業ディレクトリの内容は変更されません。参照の状態を変更して新しいコミットを指すようになるだけです。

インデックスを変更する必要はないものの、コミットメッセージだけは修正したい場合、`--soft`を使うことができます。

```
$ git reset --soft HEAD^
```

## git commit --amend

カレントブランチで、最新のコミットを変更する方法のうちの1つです。

git commit --amendは、コミット後にミスタイプを修正するためによく使われますが、用途はこれだけではありません。
このコマンドは、コミットと同じようにリポジトリ内のどんなファイルでも修正できます。新しいコミットの一部としてファイルの追加や削除も可能です。

作業ディレクトリ内のファイルを修正します。必要に応じて、誤字を修正し、ファイルの追加や削除しましょう。
他のコミットと同様に、git addやgit rmのようなコマンドを使って変更をインデックスにステージします。
その後、git commit --amendコマンドを実行します。

この修正によって、元のコミットが修正され、既存のコミットが置き換えられます。


## どちらを使用するべきか

先頭コミットを変更（git reset --soft HEAD^）したい場合は、git commit --amendを使用しましょう。
【Git】縮退マージ（degenerate merge）
Tags: git
Published: 2020-03-26 01:27:07

## 縮退マージとは

git merge後に新しいマージコミットを作らない、縮退マージという仕組みがあります。

## 縮退マージされる条件

already up-to-date（すでに最新）と fast-forward（早送り）と呼ばれる2つの縮退（degenerate）シナリオがあります。

- Already up-to-date
  他のブランチ（のHEAD）からのコミットが全て、すでに対象ブランチに含まれている場合、対象ブランチは「Already up to date.」といわれます。
  これは、たとえ対象ブランチ自身の履歴が更に先に進んでいたとしてもです。結果として、対象ブランチに新しいコミットは追加されません。

- Fast-forward
  fast-forwardマージは、あなたのブランチのHEADがすでに他のブランチ上にすべて存在している場合に起こります。
  これは、already up-to-dateの逆のケースです。
  あなたのHEADはすでに他のブランチ上に存在しているので、Gitは単にあなたのHEADに他のブランチのコミットを付け足し、HEADを最新の新しいコミットを指すように移動させます。
  この結果、インデックスと作業コピーは最新コミットの状態合わせて変更されます。

## fast-forwardマージしたくない場合

`--no-ff`オプションをつけてください。fast-forward可能な場合でも明示的にマージコミットを作成します。
GitHubでプルリクエストをマージする時にも、`--no-ff`が使用されています。
カレーの作り方を学ぼう
Tags: カレー
Published: 2020-03-26 01:16:29

---
title: カレーの作り方を学ぼう
published: true
description: カレーのテスト
tags: カレー
---

カレーの作り方を学ぼう

```
var seed = [肉,人参,ジャガイモ,カレールー] ;
var c = new Curry( seed ) ;
c.cut();
c.hot();
```
カレーができた。


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/eg6dobjagp2r5r14114e.jpg)
How to Prepare Rational Numbers to Handle Fractions in Standard ML
Tags: standardml, functional
Published: 2020-03-26 00:52:00

Let's implement a data type like `Data.Ratio` of `Haskell` in Standard ML that will handle rational numbers (with greater precision than floating point).

## signature

```sml
signature RATIO =
sig
    type ratio = int * int
    exception DivideByZero
    val fromIntPair : int * int -> ratio
    val + : ratio * ratio -> ratio
    val - : ratio * ratio -> ratio
    val * : ratio * ratio -> ratio
    val / : ratio * ratio -> ratio
    val > : ratio * ratio -> bool
    val < : ratio * ratio -> bool
end
```

The name of data type is `ratio`. It is actually a couple of integer.
Prepare conversion functions `fromIntPair `, addition, subtraction, multiplication and division of fractions, and comparison operations.
In practice this is a couple of integer, so use `=` for the equal sign.

## structure

```sml
structure Ratio : RATIO =
struct
type ratio = int * int
exception DivideByZero
fun fromIntPair (num, 0) = raise DivideByZero
  | fromIntPair (0, den) = (0, 1)
  | fromIntPair (num, den) =
    let fun gcd (x, y) = if x = y then x
                 else if x > y then gcd (x - y, y)
                 else gcd (x, y - x)
        val g = if den > 0 then gcd (abs num, abs den)
                else ~(gcd (abs num, abs den))
    in (num div g, den div g)
    end
fun (x, y) + (z, w) = fromIntPair (Int.+(Int.*(w, x), Int.*(y, z)), Int.*(y, w))
fun (x, y) - (z, w) = fromIntPair (Int.-(Int.*(w, x), Int.*(y, z)), Int.*(y, w))
fun (x, y) * (z, w) = fromIntPair (Int.*(x, z), Int.*(y, w))
fun (x, y) / (z, w) = fromIntPair (Int.*(x, w), Int.*(y, z))
fun (x, y) > (z, w) = Int.>(Int.*(w, x), Int.*(y, z))
fun (x, y) < (z, w) = Int.<(Int.*(w, x), Int.*(y, z))
end
```

The argument to `fromIntPair` will call an exception if the denominator is 0, and return `(0, 1)` if the numerator is 0.
Otherwise, the greatest common divisor is obtained by taking the absolute value and dividing by the greatest common divisor obtained by the numerator and the denominator.
If the denominator is negative, the sign is reversed because only the numerator is signed.

In the four arithmetic operations of fractions, the numerator is calculated with the denominator aligned and then reduced with `fromIntPair`.
In comparison operations, the numerators are compared after the denominators are aligned.

## example

Use `open` to expand a structure, and use `local` to avoid hiding the constraints of the original four operations and comparisons.


```sml
- local open Ratio
= in
= val twoThird =
= let val oneThird = fromIntPair (1, 3)
= in oneThird + oneThird
= end
= end
= ;
val twoThird = (2,3) : int * int

```
Specialization 
Tags: webdev, java, php, android
Published: 2020-03-26 00:51:47

Hello guys, 
What do you think about Specialization? 
In my case, I'm so confused,i don't know if i should learn some of advanced things in web development, desktop apps development, and android apps development ...
Or Should Focus on one Programming language, or ... really I'm  in bad situation, 
Btw i love Java.
Any help or opinions will be perfect.
Thank you
【Git】リベース対マージ
Tags: git
Published: 2020-03-26 00:17:50

## リベースとマージどちらを選択するべきか

一連のコミットをブランチの先頭へリベースすることは、2つのブランチをマージするのに似ています。
どちらの場合も、ブランチの先頭は両方のブランチの内容を結合したものになります。

「このコミットでは、マージとリベースどちらを使うべきだろう」と自問したくなるかもしれません。
これは重要な問いかけです。複数の開発者、リポジトリ、ブランチが対象となる場合は特に重要です。

リペースしたいブランチ上のコミットをすでに公開し、あるいは提供しているなら、他者への悪影響を考慮すべきです。
リベースは適さないものの、そのブランチの変更が必要なら、マージが正しい選択です。

## 覚えておくべき重要な概念

- リベースは既存のコミットを書き換えて、新しいコミットを作ります。
- 到達不可能になった古いコミットは消去されます。
- リベース前の古いコミットのユーザーは取り残されてしまいます。
- リベース前のコミットを使っているブランチがあるなら、それも同様にリベースする必要があるかもしれません。
- 異なるリポジトリにリベース前コミットのユーザーがいる場合、あなたのリポジトリはすでに移動済みだとしても、そのリポジトリにはコミットのコピーが残ったままです。このため、彼らも同様にコミット履歴を修正しなければならなくなるでしょう。