投稿

LeetCodeのDatabaseカテゴリで見つけたTRUNCATE TABLEについて

イメージ
LeetCodeのDatabase問題にて。 181. Employees Earning More Than Their Managers という問題を解いた時の話。 LeetCodeのDatabaseカテゴリの問題では SQL Schema という欄があり、どういったクエリを実行して該当テーブルが作成されているか、またその中に入っているデータはどういったものかを見ることができる。 その中に TRUNCATE TABLE Employee という一文を見つけた。 Employeeはテーブル名なので TRUNCATE TABLE テーブル名 という使い方をするものなのだろう。 恥ずかしながら知らなかったので調べてみたところ、指定したテーブルの全てのデータを削除するという内容らしい。 これまではそういった操作はDELETE文で実行していたが、どうやらTRUNCATE TABLE文には以下のようなメリットがあるらしい。 オートインクリメントの初期化 大量のデータが存在する場合はDELETE文よりも高速であること オートインクリメントの初期化がされるのは知りませんでした。確かにDELETE文だと初期化されなかった記憶があるので助かります。 削除が高速なのはDELETE文はあくまで特定のデータを削除することに特化しているからなのだろうか?確かに全て消去しかないのと特定の条件を付けられるものだと後者の方が処理は複雑になる傾向があるが。ここら辺も根本的な理由を調べる機会を設けたいな。 一方で、DELETE文を実行した際のログなどを記録するようなトリガーを設定していても、TRUNCATE TABLE文はDELETE文とは関係ないので当然追跡はできません。そこには注意が必要ですね。

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した

イメージ
タイトル通りのエラーが出た。 Chromeの拡張機能を作っていたところ試しに作った拡張機能をインポートした時にエラーが出た。 調べてみるとmanifest.jsonでエラーが起こっているようで、タイトルのように、"Invalid value for 'content_scripts[0].matches[0]': Empty path."と表示されている。 manifest.jsonの中に書いたmatchesのインデックスの0番目がどうやら空のパスになっているらしい。 ちなみにmanifest.jsonは設定ファイルのようなもので、ここで定義している 'content_scripts[0].matches[0]'はGoogleのURI。 { "name" : "Example Extension" , "version" : "1.0.0" , "manifest_version" : 2 , "description" : "Sample Extension" , "content_scripts" : [ { "matches" : [ "https://www.google.com" ] , "js" : [ "content.js" ] } ] } という内容で、このディレクトリには他に content.js のみ。 なんぞやということで色々調べてみると単純に末尾にスラッシュが足りなかっただけのよう。 { "name" : "Example Extension" , "version" : "1.0.0" , "manifest_version" : 2 , "description" : "Sample Extension" , "content_scrip

特定の値まで素数を生み出すアルゴリズム in Python3

イメージ
特定の値まで素数を生み出すアルゴリズムとか 以下のようにリストで真偽値を管理するやり方で書くといいらしい。 Elements of Programming Interviews in Python  より。 # Given n, return all primes up to and including n. def generate_primes(n): primes = [] is_prime = [False,False] + [True] * (n-1) for p in range(2,n+1): if is_prime[p]: primes.append(p) for i in range(p*2,n+1,p): is_prime[i] = False return primes n = 100 print(generate_primes(n)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

オンライン英会話(レアジョブ)を始めてほぼ毎日英会話をする生活が6ヶ月目に突入したわけですが。

イメージ
地道に継続中・・・ オンライン英会話だけの限界 実はこうなることはわかっていたのさ! 地道に継続中・・・ はい。 オンライン英会話を始めたのが8月でもう2月です。6ヶ月目に突入しました。 初期に一回サボったのとサービス自体のお休み(クリスマスと正月)以外は毎日何かしらのトピックについて英語で会話しています。 まぁこの記事読む人は「お前6ヶ月近く毎日やってるならちょっとは喋れるんだろ?お?」っていう感じの人が多いかと思います。 なんか収益化しているブログとかだと「英会話を続けた効果が凄すぎた・・・!!」みたいに色んな効果とかを派手に装飾したりSEOに特化したりとかでアクセス数を上手に稼いでいますが、このブログは今の所Google Adesenseの認可すら降りていないのでアクセスを集めたところで何の意味もないです。 なので一般人が英会話を地道にやってたらどうなるのかをリアルに書いていくのがいいのかなーって感じです。 それにしても僕もお金が欲しいのでAdesense申請したんですよね。でも申請してからかれこれ3ヶ月くらいGoogleさんから返事ないけど、僕の申請は次元の狭間にでも落っこちて帰ってこれなくなったんですかね。 Googleさんお返事くださいお願いします。 オンライン英会話だけの限界 ある程度詰まらずに話せるようにはなってきました。 僕が受けているのが実践ビジネスっていうビジネス英会話(月1万くらいだったはず)のコースなので、それっぽい表現を覚えたりとか、あとは困ったときに単語をググったらコミュニケーションで困らないくらいにはなっています。 これは嬉しい。 継続は力なりですね。 一方で、同じ語彙ばかり使っている、というのが(個人的に)かなり目立つようになってきました。 便利な表現を覚えるとそれ頼みになりがちなんですよね。 個人的に好きな英会話本で ペラペラビジネス という本があるんですが、そこで便利な定型文の一部だけ変えて使い倒せ!みたいなことが書いてあるんですね。 こと言語に関してはまさにその通りだと思うんですけど、僕の場合はそこの便利さにかまけて語彙とか表現を増やそうという努力をしてなかったというのが大きいです。 とにかく受け身で受けているだけ、そんな感じでした。まぁ少しづつ増えてはいるんですけどね ペー

Pythonでリストの中から被っている値を見つけよう!!LeetCodeの解法例あり

イメージ
リストの中から被っている値を見つけよう!! 基本 問題 解法 改良前 改良後 リストの中から被っている値を見つけよう!! という話。 見つけてその値を削除するなり、被っている値の数を数えるなり、被っている値は何なのかを返すなりは別にいいとして、個人的な方法をメモ代わりに取っておく。 基本 今回は考えやすいようにLeetCodeの問題を例に考えてみます。 問題 例えばこちら。 287. Find the Duplicate Number 難易度はMediumです。 問題としては与えられた数字のみのリストの中に1つだけ2つ存在する値があるのでそちらを探して欲しいという問題です。 例としては以下のような感じ。 Example 1: Input: nums = [1,3,4,2,2] Output: 2 Example 2: Input: nums = [3,1,3,4,2] Output: 3 Example 3: Input: nums = [1,1] Output: 1 Example 4: Input: nums = [1,1,2] Output: 1 解法 改良前 これの解放としてパッと思い浮かぶものとしては、二つのfor文で二つの値を比較しながら被っている値があれば行いたい処理を行う、というもの。 ただ、与えられたリストがソートされていないのでまずソートしないとその比較はできなくなります。 試しにPython3で書いてみました。 class Solution : def findDuplicate ( self , nums : List [ int ] ) - > int : ans = 0 nums = sorted ( nums ) for i in range ( len ( nums ) ) : for j in range ( i + 1 , len ( nums ) ) : if nums [ i ] == nums [ j ] : ans =

Arrayでのインクリメント方法で詰まったのでメモる。

イメージ
Arrayでのインクリメント スパッと思いつかなかったのでメモメモ。 ちなみに具体例としては、 array1 = [1,1,1] array2 = [1,7,9] だったら array1 = [1,1,2] array2 = [1,8,0] みたいな感じになるやつ。 実はLeetCodeでも解いたことがあったけど、 Plus One どうせならPythonっぽい答えを作ってみたかったので色々調べた感じ下のやつが良さげ。 def increment ( A : List [ int ] ) - > List [ int ] : A [ - 1 ] += 1 for i in reversed ( range ( 1 , len ( A ) ) ) : if A [ i ] != 10 : break A [ i ] = 0 A [ i -1 ] += 1 else : if A [ 0 ] == 10 : A [ 0 ] = 1 A . append ( 0 ) return A といった感じで行ける。あと読みやすい。 実行してみたら速度も気のせいか少し速くなった。 元々の解答 class Solution : def plusOne ( self , digits : List [ int ] ) - > List [ int ] : if digits [ - 1 ] < 9 : digits [ - 1 ] += 1 return digits elif digits [ 0 ] == 9 and len ( digits ) == 1 : return [ 1 , 0 ] else : digits [ - 1 ] = 0 digits [ 0 : - 1 ] = self . plusOne ( digits [ 0 : - 1 ] )

Apple Watch SEを買った話。

イメージ
Apple Watch買ったよ!! どのモデル? 使い心地どうなん? Apple Watch買ったよ!! という話です。 SEが出てから気になってはいたのですが、他に欲しいものを買ったりしていたので買っていませんでした。 少し残業の時間が増えて残業代で何か買うかーとなって家電量販店で実物を見たら超絶欲しくなりました。 手に入ると思うとそのことばかり考えてしまって精神的にめんどくさくなったので思い切って買っちゃった☆ どのモデル? SEの44mm です。 Series6を買う勇気はないが、Series3はもう古そうでなんか嫌だったのでSEに。 38mmは実物が思ったより小さくて数千円の差なら大きい方を買った方が見やすいかなーと。 後、運動(主に筋トレ)をすることが多く、特に最近は有酸素運動をすることが多かったのでNikeモデルにしました。 店員さんに聞いたら 本体の壁紙(Nikeロゴの壁紙は限定らしい?) ベルトが違う(ゴムの穴があいているやつ) くらいの差しかないらしいです。 まあ汗かくだろうし壁紙にNikeのロゴ入るとかええやん?素敵やん?という感じがしたのでNikeモデルにしてみました。 使い心地どうなん? 買ってよかったです。 やっぱり運動の情報が可視化されるのはモチベーションに大きく寄与するなあとしみじみと感じる今日この頃。 細かい歩数とか、消費カロリーを算出してくれるのはiPhoneではしてくれませんでした。 Apple Watchをつけているとその日の運動量に応じて、あ、少し消費カロリー少ないな。ちょっと歩くかー、とか、今日は十分動いたからもう休もう。みたいな感じで細かい調節ができる点が分析好きな僕にはあっています。 個人的な不満としてはジムの一部の有酸素マシンの消費カロリーを正確に測定してくれないところ。 あと、有酸素前にワークアウトをセットすると心拍数とかの測定をしてくれるものの、マシンの方の測定値と少し数値の開きが起こる。 動きを検知してくれない場合に途中でワークアウト終わった?みたいな通知が飛んでくるのも少しウザい。 後筋トレのメニューのカロリーを測る方法はなさそう?まああってもいちいちセットするのはめんどくさいし、多分測らないんだろうけど。 あ、あと心電図機能はついてないみたいで

Traceback (most recent call last): File "docker-compose", line 3, in File "compose/cli/main.py", line 67, in main File "compose/cli/main.py", line 123, in perform_command File "compose/cli/command.py", line 69, in project_from_options File "compose/cli/command.py", line 132, in get_project File "compose/cli/docker_client.py", line 43, in get_client File "compose/cli/docker_client.py", line 170, in docker_client File "site-packages/docker/api/client.py", line 188, in __init__ File "site-packages/docker/api/client.py", line 213, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))というエラーが出た話

イメージ
docker-compose upをしてもこれしか出ないので色々調べてみた。 OSX Catalinaでのこと。 Traceback (most recent call last):   File "docker-compose", line 3, in <module>   File "compose/cli/main.py", line 67, in main   File "compose/cli/main.py", line 123, in perform_command   File "compose/cli/command.py", line 69, in project_from_options   File "compose/cli/command.py", line 132, in get_project   File "compose/cli/docker_client.py", line 43, in get_client   File "compose/cli/docker_client.py", line 170, in docker_client   File "site-packages/docker/api/client.py", line 188, in __init__   File "site-packages/docker/api/client.py", line 213, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) 権限が足りない、など色々な記事がヒットしたが、根本的にそもそもDockerアプリを起動してないのが問題だったというオチ。 ちゃんとメニューバーにDockerのアイコンが表示されていてDocke

レアジョブ英会話を100回受講した話。

いぇーい。 タイトルの通り、100回続きました。 ツイートにある通り、101日で100回消化しました。 飽き性だけどレアジョブ100回続いてて良かった ちなみに101日で100回消化したのでまあまあ過密スケジュール 最低限の英会話ができて今後も英語を勉強する意欲のあるITエンジニアに興味がある企業さん、いかがですか?(満面の笑み) pic.twitter.com/jy4Uf4AwgT — くえはる (@KueharX) November 29, 2020 留学経験とかないので恐らく今までの人生の中で最も英語を話した101日でした。 いうて100回がどれくらいすごいかといっても50時間しか話してないんですけどね。 個人的にはまだまだ英会話弱々マンで結構困ることも多いです。 続け方とか。 何も考えずにただ朝起きて夜寝るまでの間に予約をぶち込んで受けるだけです。 学習効率とか発音とか気にせずにとにかく受ける。 そのためにはお気に入りの先生を見つけることが手っ取り早くて、やりやすいなって人を見つけて、お気に入り登録して、レッスンが終わったら次の日もその先生で受講可能かを見る。無理そうだったら総合評価なりブックマーク件数が多い順にソートして予約。あーだこーだ考えるよりも経験を積むことを意識した方がええんちゃう、知らんけど。 後、僕はビジネス英会話のコースなので地味に1万くらい月に払ってるんですよ。決して高くはないけど1万あったらまあまあ色んなことできますし、元を取ろうとする貧乏人根性も一つ要因としてあったかと。お金は大事!! とかこれだけ色々いってますけど、101日の内1日サボってるんですよね。これは仕事終わりに外食に行った時に食べたものが当たったみたいで、腹痛でとてもじゃないけど受けられなかった時です。しょうがないね。 続けると何がいいかって、英会話が当たり前の日常として定着してくるところですかね。 最初の方はまた英会話しないといかん・・・鬱だ・・・って感じで苦手意識しかなかったんですけど、今やそれが当たり前。なんなら今日こういうフレーズ使おう!みたいになってるあたり、こうやって人間って成長していくんだなぁと(しみじみ)。 これから。 語学の勉強に終わりはないって良く聞くので、まぁ一先ず続けていくつもりではあるんですが、どこかのタイミングで英語を使って仕事をできる環境に身

ゼロから始めるLeetCode Day112「500. Keyboard Row」

イメージ
概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day111「682. Baseball Game」 次回 その内 Twitter やってます。 問題 500. Keyboard Row 難易度はEasy。 問題としては、単語のリスト words が与えられます。 下の画像のような 英字キーボードの一行に存在するアルファベットだけで入力できる単語のみ をリスト形式で返してください、という問題です。 Example: Input: [“Hello”, “Alaska”, “Dad”, “Peace”] Output: [“Alaska”, “Dad”] Alaska と Dad は共に真ん中のキーボードの列に所属するアルファベットのみで構成されていますのでリストで返されています。 解法 class Solution : def findWords ( self , words : List [ str ] ) - > List [ str ] : first = [ "q" , "w" , "e" , "r" , "t" , "y" , "u&q

ゼロから始めるLeetCode Day111「682. Baseball Game」

イメージ
概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day110「1535. Find the Winner of an Array Game」 次回 その内 Twitter やってます。 問題 682. Baseball Game 難易度はEasy。 久しぶりでいろいろ忘れているのでひとまずEasy の問題を潰そうかなと思います。 問題としては、あなたは野球の試合に出場することになりました。このゲームはいくつかのラウンドで構成されており、過去のラウンドの得点が将来のラウンドの得点に影響を与える可能性があります。 ゲームの最初に、あなたは空のレコードで開始します。ops[i]はレコードに適用しなければならない第一の操作であり,以下のいずれかである. 整数 x - x の新しいスコアを記録します。 “+” - 前の2つのスコアの合計を新しいスコアとして記録します。前の 2 つのスコアが常に存在することが保証されています。 “D” - 前のスコアの2倍の新しいスコアを記録します。これは、常に前のスコアが存在することを保証します。 “C” - 前回のスコアを無効にし、記録から削除します。これは、常に前のスコアが存在することを保証するものです。 レコード上のすべてのスコアの合計を返します。 Example 1: Input: ops