Saki
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # 【第16週】パRails輪読会 \(2022\-11\-07\~ 2022\-11\-11\) ###### tags: `パRails(2回目)` - [開催概要](https://hackmd.io/rOcLR0riRqmOgEF0_Ssm0A?both) - [パRails輪読会 ノートまとめ](https://hackmd.io/5emISRvRRXapmakSiHnFJg?both) ## パRailsのサンプルコード・正誤表 - [サポートページ:パーフェクトRuby on Rails【増補改訂版】:|技術評論社](https://gihyo.jp/book/2020/978-4-297-11462-6/support) - [パRails 環境構築の手順](https://hackmd.io/y7qb2BRMT2Wd4tAtKYObcQ) ## 目次 [TOC] ------ ## 2022\-11\-07(月) ### 連絡事項や確認・相談 ### タイムキーパー - tomonariさん ### ドライバー - ガラムマサラさん、Hikaruさん ### 読んだところ - P.400 [落穂ひろい]〜 ### 次回 - P.402 [8-3-2 Rack Middlewareを利用したエラーハンドリング] ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - hikaru - Railsのエラーハンドリングは2種類ある - コントローラーで`rescue_from`を使う - エラーハンドリング用のRack Middlewareを使う - `rescue_from エラー with ` - @fuwa - Railsのエラーハンドリングには`rescue_from`メソッドを使う方法と`Rack Middleware`を使う方法の2種類がある - `rescue_from`は後に登録したものから順番に判定する。ヒットしにくいものから後に書いた方が良さそう - @tomonari - rescue_fromは後から登録した方から順番に判定すると言うのが意外でした。前から判定すると思ってしまいそうです。 - @garammasala29 - (ご迷惑をおかけしました…) - 無茶振りしてしまってすみません🙏 - 自作サービスの404ページ作っていないのでここの復習兼ねて作ってみます! ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @maimu_x2x - エラーハンドリングのことが全然わかっていないため、この章を通じてちょっとずつ理解したいです。 - さっき新しいMacが来ました!!今日は環境構築頑張ります! - @cafedomancer - バージョンの古いものは Docker で動かしたほうがいい - `docker run -p 9200:9200 elasticsearch:<version>` - ちょっと試してみたけどすぐ動かないな :point_up: - Saki - elasticsearchの件、8章もう少しで終わるので、モブプロやってくださる方は各自で先週やったelasticsearchの設定をやってもらう形がいいかな〜と思ったのですがどうでしょう?? 難しそうなら1回時間をとってみんなで設定するとかかなと思ってます〜 - docker desktop 入れるだけですよ。elasticsearch のプラグインを使うならもう少し手を入れる必要がありそうですが。docker にしよう!!! - 賛成ー!!! - おー! - 入れようー - うおおおお!!!!!! - 読み上げbotの終了は`!shr ec` - @tomonari - エラーハンドリング難しい! - @garammasala29 - hikaruさん代わってもらって助かりました🥺 - いえいえ〜 - @haruguchi - 川村さんリリースおめでとうございます:tada::tada::tada: - ありがとうございます!名前重要! - 開発環境で思い出したdotfile作らなきゃ - thoughtbot/rcm で管理しましょう - それ前も言われたような気がするぞ!! - @fuwa - チーム開発で困っていた箇所ですが、該当の現象が突然発生しなくなってしまってわけわかめ状態です - 今日はイベントスタッフのバイトの登録会に行きました。ツッコミどころしかなくてこれからとても不安です - hikaru - 単発のアルバイトを申し込みました...! ------ ## 2022\-11\-08(火) ### 連絡事項や確認・相談 ### タイムキーパー - tomonariさん ### - Saki ### 読んだところ - P.402 [8-3-2 Rack Middlewareを利用したエラーハンドリング]〜 ### 次回 - P.407 [9章 コード品質を上げる]〜 ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @maimu_x2x - エラーページには動的と静的なページがある - 静的なエラーページだからといってプログラムが停止しているわけではなく、例外は捕捉されてプログラムは続行している。 - RubyまたはRackMiddlewareからエラーページが返される - @garammasala29 - `rescue_from`で登録したエラーハンドラは下から上の順で検索され評価 - 動的エラーページはプログラム(Ruby)で生成されたhtml - ルーティングの制限で`except`は使わない?明示的に使うアクションを`only`で書いた方がわかりやすいのかな? - `:except` 使ってるのはあんまり見たことないな - allowlist 方式と blocklist 方式 - @tomonari - 動的・静的なエラーページの生成のお話が勉強になりました。 - エラーページを確認するには、サーバーエラーならエラーを起こしたいところにraiseを書き、routing errorなどの場合は出鱈目なパスに移動すればいい。 - Gemの実装を確認するのは大切ですね。メンテナンスされていない場合は自分で変更して使うのもありなんですね。 - @fuwa - 動的と静的なエラーページがある。前者はプログラムが動いているもの、後者は動いていないもの - Rack Middlewareで発生したエラーを動的なエラーページとしたい場合はrambulanceなどのgemを使うと良いらしい - 使っていないルーティングは制限しましょう。`only: %i[hoge fuga]` みたいな感じ - npmの課題でメンテナンスされてないgemを使って作るものを変えるハメになったのを思い出しました - hikaru - ActionDispatch::ShowExceptionsでキャッチした例外は`Rails.application.config.exceptions_app`に設定されているRackアプリケーションで処理される(デフォルトはActionDispatch::PublicExceptions) - 開発用と本番用ではエラーページが違う - ERBやHamlは動的にHTMLを生成している - 使っていないアクションのルーティングは残さないように絞る - @cafedomancer - `rescue_from` で登録した処理はぜんぶ実行されるのかな? それともどれか 1 つうまく処理できたら途中で中断される? - Saki - dockerでの手順をノートにもまとめておきました⏩[elasticksearchだけdockerで起動する手順 \- HackMD](https://hackmd.io/y7qb2BRMT2Wd4tAtKYObcQ?both#elasticksearch%E3%81%A0%E3%81%91docker%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86) - dockerは動かすのは簡単だけど設定がとても大変。 - 開発と本番環境でエラーページが違う。 ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @maimu_x2x - 梅本さん、詳しい説明をありがとうございました!! - 動的・静的の定義が怪しかったので勉強になりました。 - @fuwa - Dockerとてもべんり(使うのは) - イベントスタッフの登録できていたようですが、思ったより遠い&拘束時間が長い&最低時給くらいのお給料だったので近場で別のバイトを探した方が良いかもしれないと考えています - 今日は月食らしいですね! - @garammasala29 - Docker便利すぎて勉強したいと思ったけど、梅本さんでもよく分かってないことがあると聞いて急に怖くなりました - Saki - 今日コードレビューでOKいただけたのに、新しいエラーを発見してしまってoh..となっています - 梅本さんdockerの設定してくださってありがとうございました😭✨ - @haruguchi - umemotosannnosetumeikikitakatta! - 就職して一番最初に勉強したのがDockerで一番最初のPRがDockerfileの書き換えだったことを思い出した。 - hikaru - Docker便利!でも動作がカックカクになった! - Intel chip だと思いですよ。Docker に割り当てるリソースを設定で減らしてください (主にメモリ) 。 - メモリ8GBも取ってた... - アドベントカレンダー登録しました〜🎄 お題... - TRICK2022の解説! - 🙄 - LEF - まだ設定していないのですがWin11+WSL2へDocker Desktopの設定(連携?)が自分で出来るかちょっと不安です……🐳 - たぶん問題なくできると思います。Hyper-V の代わりに WSL2 をバックエンドにする設定があるのでそれを使うとよいと思います。あ、Win 11 が不安ということ? - ありがとうございます!Win11についても多分大丈夫だと思います。 ------ ## 2022\-11\-09(水) ### 連絡事項や確認・相談 ### タイムキーパー - ガラムマサラさん ### ドライバー - Saki ### 読んだところ - P.406 [9章コード品質を上げる]〜 ### 次回 - ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @maimu_x2x - CIサービスを使うとGitHubにpushした時に自動で全てのテストを回してくれる。 - 便利だけど管理コストも大変そう・・・ - @fuwa - チーム開発でのCircleCIの設定を考えたことすらなかったので勉強になりました〜あんな感じで書いていたんですね - なんとなくGitHub Actions設定ファイルに書いてあることはわかったきがするけれど、自作サービスで作るときはどんなことを書けばよいのかちゃんと勉強した方が良さそう - LEF - CIについてほとんど何も知らなかったので、GitHub上でymlファイルを設定してpushするだけでテストが回ることを確認できて良かったです。 - Saki - 用意されてる雛形が本と結構違うので難しかった。CIとGitHubActionsは自作サービスで触ったけれど、「これを実行させるにはこれが必要らしい」みたいな、おまじない扱いの理解のものもあるので理解したい - イベントはこのドキュメントに一覧で載ってます:[Events that trigger workflows \- GitHub Docs](https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows) - CircleCIも同じように設定ファイルを書いて使う - bootcamp:[CircleCIを追加 by komagata · Pull Request \#5453 · fjordllc/bootcamp](https://github.com/fjordllc/bootcamp/pull/5453/files) - まだ今の時点では、本ではCI回していなくて、P.414で色々設定終わった末の設定ファイルを回してるので、まだ回し時じゃなかったのかも?? - @garammasala29 - CircleCIでは`.circleci/config.yml`で設定ファイルを作っていた。GithubActionとの違いとか速度とかいろいろ気になってきた - 自作サービスのCI設定は雛形に頼り切っていたので、今回設定ファイルを読み込んだことで理解できた気がする。 - @haruguchi - ごめんなさい。全然聞いてなかったんですが、今何をやっていてどんなエラーで困ってますか?(解決できるかは知らんけど) - CIを回してみたら予期しないところでテストが落ちてて、通したいという感じです〜🙏 https://github.com/Saki-htr/awesome_events/actions/runs/3426949377/jobs/5709353398 - なるほど〜、ちょっと時間ある時見てみますね - @tomonari - GithubActionsの設定ファイルにどんなことが書いてあるのかわかったので、自作サービスの時に参考にしたいです。ローカルとCI上で挙動が違うところがあるのが難しいですね。 ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @fuwa - 手元で昨日やっていたDockerでElasticsearch起動できるか試したのですが、indexで500エラーが出てしまいました。。 - バイトの件、近場で時給1,400円で週3&3h/日〜OKの3月末までの求人があったのでこれで良いのでは??という気がしてきています - LEF - 分報にも少し書いたのですが、自分もfuwaさんと同じで、手元でDockerを起動して試してみたところ、エラーが出てしまいました。 - nakama - 自分の環境だけの問題かな、と怖かったので安心しました🥲 - @@maimu_x2x - 手動テスト撲滅したい人間なためCIサービスの設定や運用はちゃんと理解したい! - @tomonari - Githubのアクセストークンが新しくなってなんだか面倒になってました。どう設定するのか調べないと:cry: - @haruguchi - CIなしの開発はちょっともう考えられないな。。。 - 今日は新しく追加するカラムの名前考えてたら一日終わってました - 名前付け難しいですよね... - @Saki - あともうちょっとでリリースできそうです...! 使ってもらうのドキドキです🫀 ------ ## 2022\-11\-10(木) ### 連絡事項や確認・相談 ### タイムキーパー hikaru ### ドライバー Sakiさん ### 読んだところ P.410 [9-1-3 GitHub ActionsでElasticsearchとそのプラグインを使う]〜 (わ〜入力ありがとうございます!) ### 次回 P.414 [9-1-4 イベント告知アプリケーションのCIをGitHub Actionsで 実行する]〜 ### 自由に使う共有スペース tag謎でしたが実行したコマンドを書いておきますね。 ```ruby! git add . git commit -m "first commit" git tag v1 git push origin v1 #tagをpush git push origin main #ブランチもpush git log #v1 tagがついてるのか見れる ``` ### 各自の疑問点や気づき、学んだこと - hikaru - なにもわからない... - `git tag タグ名 `でタグをつけられる - @fuwa - Docker昔ちょっと勉強したはずなのに全くわからなくて悲しみでした - タグを`git tag ◯◯`でつけられる - @garammasala29 - 新しいLinuxの教科書を読み返したくなった - タグをつけるとコミットに目印をつけておける、zip形式でダウンロードできる - @tomonari - DockerはLinux的な難しさがありますね。 - Github Actionsでelasticsearch用に別リポジトリを用意するのが一人ではわからなかったです。 - Githubのタグ付け初めて見ました。 - @haruguchi - tagはコミットにつけるやつ(だからcommitしてから打つ) - -aすると注釈付きタグが打てる (細かい情報盛りだくさん!) -mでコメント(なければ勝手にエディタが開く) - git tagだけだと単純にタグ打つだけ軽量なポインタと書いてある - 過去に遡ってタグ打ちたければ ハッシュ値を渡す - https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%BF%E3%82%B0 - シェルスクリプト読めぬ - Dockerは雰囲気で使っている 日々使っている。雰囲気で。 - Github Actionsのお作法も忘れた - @cafedomancer - Docker なにもわからない - Saki - dockerの設定難しすぎる...Railsの本だけどようしゃなくシェルスクリプトが出てきて全然分からなかった...仕事で使いこなせるか不安。 - 仕事でシェルスクリプトを書いたことはないですね、、、ぼくが書いたことないだけなのかな? Docker は使います :naruhododesu!: - linuxの教科書読んでたので雰囲気はちょっとつかめた ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @fuwa - 明日バイトの面接なので緊張します〜 - 昨日かおととい?Elasticsearchをどうにかしようとしてbrew upgradeしたらzshが変わってしまってコマンドプロンプトがとても慣れないです - hikaru - 昨日バイトしてきました〜疲れた - Docker気になる - @garammasala29 - 全国旅行支援でどっかいきたいな〜 - 今月富山行きます! - シースー - 黒部ダム - いいですね〜🛫 - 由縁 札幌 どうですか - 滋賀こいよ! - Saki - リリースブログ書きたいこと多すぎて書き終わらない〜 - @haruguchi - 最近日報徘徊おじさんになってる😅 - ちゃんとはたらいてますか? - うおお!梅本さんに言われてしまった:scream: - 頑張ってるなーと思いながら自分のモチベーションにしてます。 - アドベントカレンダー誰が読みたいねん!みたいな記事書きたい :gogo!: - @tomonari - 自作アプリでwebpackじゃなくてviteというのを使ってみたい。 - ヴィートね - ありがとうございます!トラップ...! ----- ## 2022\-11\-11(金) ### 連絡事項や確認・相談 ### タイムキーパー - tomonariさん ### ドライバー - Saki ### 読んだところ P.414 [9-1-4 イベント告知アプリケーションのCIをGitHub Actionsで 実行する]〜 ### 次回 P.418 [9-3 静的解析]〜 (ありがとうございます!) (いえいえ) ### 自由に使う共有スペース ### 各自の疑問点や気づき、学んだこと - @maimu_x2x - GitHub DependadbotやRenovateを使うと利用しているライブラリを定期更新してくれる - 便利!自作サービスに入れたい - 実際の現場ではどの程度浸透してるかが気になる。 - @fuwa - FBCに入る前に勉強用で作っていたリポジトリにDependabotからしょっちゅう怒られているのですが無視しちゃってますね。。 - 自作サービスではDependabot入れてみようかなぁと思います。今度はちゃんとやります。 - @garammasala29 - CI通ってほしかった - Dependabot入れてみよう。と、今自作サービスの`bundle update`したら大量のインストールが始まったので、一筋縄ではいかなそう。 - 実際の現場でどのようにライブラリ更新をしているのか気になる - hikaru - CI回したい、エラー気になりますね〜 - ライブラリのアップデートを怠っているといざというときに作業が困難になる。そこでDependabotなどの自動定期更新サービスを使うと良い - 重要な部分については手動で確認したほうが良い - 自作サービスに組み込んでみたいなと思いました - @tomonari - permission deniedのエラーが解決できなくて悔しい! - Dependabotいいですね。Gemのヴァージョンの組み合わせで動かないことが今回の輪読会でもあったので、updateして動くかどうかまで自動でPRを作ってくれるのは便利な仕組みだと思いました。 - Saki - elasticsearchをCI上で動かすの難しい! - dependabotは自作サービスくらいの規模ならそんなにgemの数がないからこまめにdependabotのPRをチェックできそうだけど、お仕事でやるような大規模な開発だと全部チェックするの大変そう ### 本日の振り返り(よかった点・次回に向けての改善点・今の気分などなんでもOK) - @maimu_x2x - 今日の夕飯でチャーハンを作るかすき家に逃げるか悩み中です。最近自炊が面倒・・・ :gogo!: - 2週間前にstagingで発生したエラーが再現せず放置してたら今日再会して、またお前か!という気分になりました。 - Saki - ガラムマサラさん読んでる場所の共有いつもありがとうございます🙏 - dockerやCIまわりが不安で今週とりあえず私がドライバーさせてもらってたのですが、来週からは皆さんにもドライバーやっていただけるようにコラボレーターに追加させてもらおうかなと思っています〜 - 10章のdockerは、dockerについて詳しい説明はしないとあるので、モブプロはせず読んでいく形がいいのかなと思っています〜 - さんせいー! - @fuwa - 今日はバイトの面接があって疲れました〜いきなり電話のロールプレイさせられてビビりました :tea: - チーム開発のissue、調べれば調べるほど嫌な予感しかしません。。 - おお...どんなissueなんですか?? - https://github.com/fjordllc/bootcamp/issues/5609 - これです〜 https://bootcamp.fjord.jp/generations - @garammasala29 - 早速全国旅行支援使って今日はホテルからお送りしてました!前日予約だったのにマッサージチェア付きの部屋で最高です - :urayama: - マッサージチェア!!!!いいな〜〜〜 - hikaru - 友人の結婚式で歌うことになりました。来年1月下旬なのに今からそわそわしてます - @haruguchi-yuma -  テストかけなさすぎて今日一日泣いてました :tea: - 今日Elasticsearchうまくいったんですか? - いってません...😭😭😭😭 -----

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully