好きこそものの上手なるby yukichi

プログラミング学習の備忘録。万歳車輪の再発明。

sql-zooなるもの

最近SQL-ZOOをコツコツ進めていた。

SQL-ZOOとは、SQL文を基本から例題を解くことで学んでいこうというブラウザのコンテンツ。 ブラウザ上ででsubmitすると正否だけ表示されて、分からないときに答えを見ることはできない。 だけど、SQLを学ぶコンテンツとしては有名なようで(自分も前誰かから教えてもらったし)、 ググったりgithubを検索すると先人の素晴らしいanswerを色々見れます 。

自分もちょくちょくGItHubに解答を載せています↓

https://github.com/kumo2kumo/sql_zoo

ISUCONきっかけでSQLを学びたい欲ができた。

オライリー・入門Python3のメモ

入門Python3をようやく読めた。 メモと章末の復習課題のまとめ

【ISUCON11】ISUCON初参加2021 SUMMER 〜諸々no知識だったけど参加してみたらお祭りだった〜

ISUCON11にこの夏参加してきました!ISUCON
準備期間から本番まで非常に素敵な時間を過ごせた。ざっと備忘録

 

きっかけ

今年5月までISUCONの存在すら知らなかった。
とあるエンジニアさんから

ISUCONはエンジニアの夏の大運動会、技術と技術のガテン系ぶつかり合いのお祭り、おもしろいよ!

と教えてもらって気になっていた。
そんな矢先、Code Polarisdzさんから、ISUCONやりませんかー、とのありがたい募集が!これは運命、神の見えざる手のお導きと諸手を挙げて参加表明、そのままdzさんとチームを組ませてもらうことに。

結果声を大にして言いたいことは、ISUCONは楽しかったよ!

チームは別だけど、CodePolarisとして一緒に参加したkaoriさんもISUCONブログ書かれてました(●´∀`)v↓↓

zenn.dev

 

事前に取り組んだこと

  • 公式:ISUCONの事前講習2つ
    • 座学:とりあえずマニュアル読むの超大事ということと、ISUCONはみんなの母ということを学ぶ
    • ハンズオン:公開鍵を生成してgithubに置いたり、sshでのログインなど、最初からほとんどやった事ないことばかりで戸惑い(; ・`д・´)         途中、サーバー上のコードってどうやってローカルに持ってくるの?と右往左往する。とりあえずVimVim!                   ベンチ回して、修正して、また回して…とこんな流れでやるのか〜と雰囲気を羽毛布団並みのふわっっと感で掴む。あとは去年の事前講習動画も見た。

     本番前から着々と前夜祭が盛り上がりを見せていました

 

 ↓↓個人でやったこと↓↓

  • Isucon9予選少しいじり:alpやスロークエリの使い方を学ぶ@AWS。インバウンドルールを適切に設定していないことにより、時たま詰まる。
  • dzさんと会議:当日の集合時間から、最初これをやろうなど決めたことをリスト化。あらゆる無料枠の登録やリポジトリの作成も事前に完了!
  • SQLのおべんきょ:せっかくだしあんまやったことないSQLもちょろっと勉強してみよう、とわかりみSQLをさらっと読む。INDEXという存在を知る。Redisについても学びたかったな…間に合わず。
  • Vtuberさん動画垂れ流し:Vtuberさん3人が5時間でISUCON問題を解いてみる動画。皆さんの役割分担がインフラ・総統括とアプリ改修に綺麗に分かれていて流れるように作業していらっしゃる。

    youtu.be

     

本番  

10:00 :開始。node.jsで取り組むことにするcloudFormationから3台起動。マニュアル読み合わせを始めるも、長くて途中で一旦止め!笑

10:30 :無事ssh接続完了👏👏

11:00 :GitHubに必要なとこだけ(etcとwebapp)pushするのに四苦八苦。

何も考えずbench回す、2000点ぐらい? serviceをnodejsに変更→1100点ぐらい。3台のスペックを把握。どれも一緒ぽい。

12:00 :logのクリアやらサービス再起動するスクリプト作成。あれもう12時か、何もしてないぞ

14:00 :レポジトリのpushができるようになる。→権限回りの問題だった模様、dzさんが改修してくれた…ありがたや👏

slow-query onにするも、permission deniedで書けないよと、error.logに書いてある。。。権限色々変更でいけた。dzさんはアプリ側のチェック。alpで状況見たりしてくれている。アプリ側、お任せします…!(私はちんぷんのかんです)

pt-query-digestで時間かかってるquery把握からの、index貼る、score3000に上がった!上がったー!👏

やばいぞ楽しいぞー!

15:30 :nginx周りの設定を見る、cache周りなど少し設定を変えてみる score5000みたけど幻?

17:00    :SQLを別サーバに切り出しやろうかと思ったけど、時間間に合うか…でやめた。portalがつながらないー!時間経つの早いー!とキャッキャしていた。

で終了。結局ごはんもいらないほど8時間集中していて、あっという間に終わってしまった。

最終スコアは4184でした!もう、少し上げられただけでも私からしたら嬉しいのですよ…(´;ω;`)ただ上位の神々達はうん百万とかうん十万のスコアを叩き出していて、もう頭を垂れてひれ伏すしかありません。そんなスコア上がるのか…と夢も広がる

 

これからやりたいこと(ざっと)

  • Pythonでやってみたい。ぱっと見Flask使っているようなので、少しFlaskさらって取り組む
  • manual、documentもう少し読みこむ
  • 分散化
  • SQL学ぶ
  • 公式の講評や、Discordのrandomチャンネルの神々達の話を読んで改良したい

はぁ~楽しかった。来年も参加したい。どんどん募集締め切りが早くなってきている(今年は数時間だったかな?)らしいけど、人気なのもわかる。

運営の皆様お疲れさまでした、ありがとうございました!

isucon.net

 

 

 

アセンブラ言語に触れてみて、ユニバース

ここ最近アセンブラ言語を始めました。

2進数、16進数とワタクシ人生史上一番触れ合っているかもです。

(今までがふれあいなさすぎた)

流れとしては

アセンブリしたらDS,DCで宣言してた変数が主記憶装置にセットされる(16進数)

・1行進めるごとに、レジスタと主記憶でデータのやり取りを行ったり、

レジスタ内で演算したりする

 

今現在↑な流れをつかんでいる。

他の言語でも、スクリプトが呼ばれたら、大量の(グローバル)変数を主記憶装置にセットして各々アドレスがあって、

ものすごい速さでそれらとCPUとでやりとりして…

っていうPCの仕事っぷりを想像しただけで、自分的に天文学的過ぎて

頭が爆発しそうになった。

それを無言で淡々とやる(たまに温度上がって熱くなってるけど)PCってすごくない?

宇宙だわ、ユニバースだわ

xdebug ver3 @ Docker

xdebug が止まらなくなった。

どうやらver2と3でconfigの書き方が変わったそうで。

2021/2/22現在でver3.0.3が最新

 

自分は

・なぜか上手くインストールできてない感じなので

Dockerfileに

pecl install xdebug-3.0.3とverまで追記

->php -vとphpinfo()で入ってるか確認

 

xdebug.iniに

xdebug.remote_log=/tmp/xdebug.log
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
記載

portのデフォルトは9003になった→vscodeのlaunch.jsonも9003に変更

 

xdebug.org

いつもimportとexportがわからなくなるのJS

いつもimportとexportがこんがらがる。あれ?これはなんで{}つくんだっけ?とか。

・言わば通常ver

export: obj, func, primitive data typeをexportする

export default Yukichi; 

import: 

import Yukichi from ’’;

ここのYukichi変数にexportしたものが入る。名前はなんでも良き

 

・オブジェクトの名前等ををexport ver

export: オブジェクト名を{}に書いてexport

let yukichi = { }; function bird ( ) { }; export {yukichi, bird};

import:{ }内にオブジェクト名書いてimport

import {yukichi, bird} from '';

 

・宣言とともにexport ver

export: export obj, funcの宣言で書く

export let yukichi = { }

import:  

import {yukichi } friom '';

 

・ES6前

export:

let Yukichi = { }; Yukichi.tweet = 'piyo'; module.exports = Yukichi; //Yukichi objをexport

import:  yukichi objを使おう

const yukichi = require(path); yukichi.tweet //piyo

 

 

 

実装に取り組むときの流れ

ある程度これを使うかなと自分で予測がつく場合そのキーワード

予測がつかなければgoogleで検索してこれ使うかなとあてをつけたキーワード

を公式ドキュメントで調べる

読んで自分で書けそうだったら恐る恐る書いてみる

まだ分からないなーと思ったらもう少しgoogleで検索してみる

で、また使うメソッドなどを知って公式ドキュメントで説明を見る…

→②→①の繰り返し

 

公式ドキュメントはやはり良い!

一番間違いがない

今までの経験で、googleでさんざん調べた結果が公式ドキュメントにわかりやすく書かれていることが多々あった

なのでまずは読むようになったな