tekitoumemo’s diary

.NET CoreとVue、Angularなどの技術ブログを書いています。みんなの洋楽ランキングを運営しています。

パクリサイトに連絡したら逆ギレされた

 

サイトをモロ盗作されたと書いたが、そのドメインが地方のダンス教室だったのでメールした。

 

盗作されたURLを添付して、こちらのページを削除して下さいと送ったところ思いっきり逆ギレされた。そのダンス教室の代表を調べたら、変なペーパーカンパニーを作ってるので多分黒。メールは乗せると面倒なので、だいたいこんな感じ。

 

あたし「御社のサイトで、当サイトが盗作されているとのことで連絡した。確認よろ」

 

黒「詳しく聞きたいので電話番号教えて」

 

あたし「電話番号は無理。添付の画像が盗作されている部分だから確認よろ」

 

黒「電話番号教えられないなら連絡するな。次連絡したら警察に言うわ」

 

あたし「電話番号も悪用するかもしれないから無理。とりあえず、このURL明らかにパクってるから確認して」

 

黒「身に覚えがないから不正アクセスだ!あなたの情報開示がなければ、こちらから調べるから費用負担よろ」

 

あたし「不正アクセスか。ならしょうがないね。でもサイトもメールも教えてるし、なんならプロバイダに聞いたら教えてくれると思うけど、執拗に電話番号知りたい理由ってなに?」

 

黒「もう連絡すんな!数日後に消す!」

 

あたし「…」

 

消せんのかよ!

 

まぁ、消してくれんならもう問い詰めるのやめよう。一件落着!

 

(絶対黒だろこの人笑)

 

追記

この1日後、ちゃんと消えてました^_^

確信犯すぎて草

個人サービスの記事をパクられている

全く同じ内容でパクられている。

 

f:id:tekitoumemo:20201115230907j:image

f:id:tekitoumemo:20201115231010j:image

 

謎やなと思ってたけど、ドメイン辿ったら地方のダンス教室だった。悪質なSEO業者に捕まったんだろうなー。なのでドメインは隠してます。同一コンテンツはペナルティになる可能性があるけど、このレベルだったら大丈夫だろう。一応経験として、連絡はしてみよう。動きがあったら追記する。

.Net Coreをvscodeで実行すると一生起動しない現象の対処法

タイトルまま。マジ謎だったのでdonet runデバッグしてたが、vscode限定の現象だったので拡張じゃね?と思ったらやっぱり拡張のせいだった。

C#の拡張が複数ある場合があるので不要な重複は削除する。以下のような場合は

ls /Users/{user_name/.vscode/extensions/ | grep dotnet
ms-dotnettools.csharp-1.23.5
ms-dotnettools.csharp-1.23.4

ごっそり行きます。

rm -rf ms-dotnettools.csharp-1.23.4

jestでUnhandledPromiseRejectionWarningが出たら失敗させる

Promiseが未処理だと起こるこれ。

UnhandledPromiseRejectionWarning: Unhandled promise rejection

jestに限らないがこれが出ると原因の特定が難しい。せめて作業中に失敗するのであれば、作業中のdiffを見れば原因の特定が想像つくが、exitcodeが0なのでテストが通ってしまうのでマージされてしまうことが多々あった。なのでこれが出たらすぐ失敗させるようにした。

process.on('unhandledRejection', (err) => {
 fail(`UnhandledPromiseRejectionWarning: Unhandled promise rejection. ${err}`)
})

転職活動日記①

tekitoumemo.hatenablog.com

前回、面接大失敗した企業は当然落ちた(笑)。

落ちた反省として、興味のない企業を受けても結局面接で答えられないと知ったので選考する会社をちゃんと選ぶようにした。しかも、仕事の合間に面談は結構疲れる。それから4社に話聞いて、1社だけ受けた。
基本的に上場企業に絞ってるからそこまでハズレはないかなと思っていたが、話を聞く限りやばそうな雰囲気出てる会社は以外に多い。

選考しなかった3社の理由

  • 過渡期なので残業は多い

 いやマジ何時間働いてるか恐怖でしかない

  • フロントエンドの組織をこれから立ち上げる

 いやフロントエンドの動きが鈍化してから3年ぐらい立つけど、遅すぎない?

  • うちはチーム毎に好きな技術使ってるからスキルある

 プログラミングテストがあって受からなきゃ面談すらできない。受かって面談したら「うちは昔から高度なことしてる」とか言わねーし、技術的なこと1ミリも話さないし「うざぁぁぁ」って思った。

超有名企業なので、受けても落ちる可能性は高いし、ちょっと嫌だなと思ったら精神衛生上受けない方が良い。興味ないとはいえ、落ちたらダメージ負うことがわかった(笑)

SIerからWEB志望で転職活動してたときは、めちゃくちゃナメられてたけど、今はほぼ100%書類は通るし対応も良いので変な感じ。たぶんこいつらは人によって態度変えてんだろうなぁ〜ってもの直感でわかる(笑)

残り1社は技術負債は残りつつも、課題感や今後の目標など正直に話してくれて、1万人ぐらいいる企業だから受けてみた。したらわりとあっさり受かった。2社目で受かっちゃったので戸惑ってるが、超迷ってる。

マネジメント志望と伝えてるので、プログラミングができなくなるかもしれない。志望したくせにプログラミングやりたい気持ちは心のどっかで捨て切れてないので、あと3社ぐらい話聞いて結論出そうと思っている。

今になって思うが、結局フリーランスって働き方は、かなり魅力的。

みんなの洋楽ランキングを超絶アップデートした

mygkrnk.com

長かった〜(3週間)

「いいね!した曲の一覧が見れるようにしよう」

とひょんなことから大規模リファクタした。マジ週5で働いて、子育てして夜中やるみたいな感じで超疲労

もうやるだけやった(迫真)

やったこと(フロントエンド)

webpackを3から4にバージョンアップ

これやらないといろいろあかん。(主にTypescript最新)。webpack4からUglifyEsPluginとか使わなくてもminify出来るのでかなりシンプルになったりといろいろ良くなったのでwebpackをゴリゴリに変更した。というのもASP.NET Core 2.1で Reactテンプレート使って作成したもののwebpackやらpackageやらいらないものが多すぎたので削ぎ落とさないとアップデートするのが大変だった。

typescript3.6.3から4.0.3、react 16.9.0から16.13.1へ

今まで地味〜にアップデートしていたのでそこまで苦労せず。

axios導入

ライブラリ使わずにFetch APIを使ってきたのだが、Jsonパースするのにいちいち面倒だったりと使い心地が悪いのでaxiosを導入。インタセプタを使うためってのが一番の理由。Fetch APIにもインタセプタあると思うけど、調べる必要性が感じられず。

redux導入

リアルタイムにいいね !のstateを描画したかったので、この際にredux入れるかぁって感じで導入。最近のトレンドでFluxを多用するのはどうなの?って風潮だし個人的にもそこは同意なので必要がなければ入れないつもりだったけど、1アプリにグローバルな状態は大体必要になる。
f:id:tekitoumemo:20201013221756g:plain

ESLint導入

prettierしか入れてなかったけど、どうせリファクタするなら入れるかと思い導入。typescriptにESLint入れるのはちょっと一手間。調べればいくらでも出てくるから良いけど、1から調べるのは仕事じゃなきゃやりたくないなぁ。

any撲滅

と言いながらもESLintルールに"@typescript-eslint/no-explicit-any": 0が入ってるんだけど(笑)。Typescript信者じゃないし、最近のトレンドについていくためだけに使ってるって感じもあるからルールで縛られなくても良いかなと思って無効化した。とカッコつけたものの、結局はリファクタに心折れたときに無意識に無効化してた(笑)。まぁ、1年振りぐらい見ると本当にわからないから知らない人が書いたコード見るなら型はあった方が良いなぁ〜と思った。過去の自分は他人だと感じた。

ちょっと拘った実装

検索フォームの遅延リクエス

入力する度にリクエストを投げるといろいろ死ぬので、入力完了を遅延させている。
f:id:tekitoumemo:20201015001432g:plain

一般的なテクニックとしてはスタックアルゴリズムで入力時にpush、setTimeoutでpopしていくって感じだけど、それを意識せずに使いたかったのでこんな感じで使えるようにした。結局はスタックを隠蔽して戻りをPromiseにしたってだけだが。300msは人間が入力完了する平均的な時間らしい。

<input onChange={onChange} />

const interval = 300 // ms
const input = new Input(interval)

onChange = async (e) => {
  if (await input.on()) {
    // 入力完了
  }
}
ローディング

f:id:tekitoumemo:20201015005004g:plain
今までは思考停止して

this.setState({ loading: true })
// 通信
this.setState({ loading: false })

って感じだったけどあまりにも冗長すぎるし何よりダサいのでちょっと真剣に考えた。上記のように通信ごとに括ってローディングを設定するのが嫌だったので以下のようにした

<Loading>
 // 通信後に表示されるJSX
</Loading>

インタセプタでリクエスト数をreduxで保持、終了したらデクリメント。リクエスト数 > 0であればローディング表示みたいな。
複数のコンポーネントでリクエストが送信されてると詰むので頭の中にある案を実装したかったがやりすぎ感が強いので困ったら考える。本当は最低何msローディングを表示させるかとかオプションあるけど割愛する。

renovate導入→廃止

どうせ動作確認しなきゃだし、いらんな。って感じで廃止。便利そうに見えて全く便利じゃなかった。

やったこと(バックエンド)

Roslynator導入

C#の静的解析はディファクトスタンダードなものがないので、CLIでも使えるRoslynatorを導入。
github.com

う〜〜〜〜ん。。macだとcliが全く使いもんにならん(多分Linuxも)。Windowsであれば良いかもって感じ。現在のC#はWSL2で使い分けるのが楽しい開発スタイルだと思う(※WEBにおいては)。

パッケージはアップデートせず

やったことなのにやってないことを書くのはどうなのって感じだけど、.NET CoreとC#の魅力をちょびっとだけ。基本的に.NET Coreのコアアップデートで破壊的変更は結構少なめ。C#に関しては全くない。とにかくアップデートの容易さとLTSが3年と長期間サポートが魅力。今回、ここら辺の変更がなかったのでフロントエンドに注力出来たというのもある。言語仕様的にもある程度トレンドには乗っかってるし、バージョンアップによる変更がないのでなんか知らないけどパフォーマンスよくなってる的な感覚がある(実際に向上はしている模様)。とにかくライブラリや周辺ツールは貧弱の極みみたいな感じなので悪いところをあげたらキリないが、保守が他言語に比べてほぼないようなもんなのでモダンを維持し続けられるのは最高。ツール郡が貧弱すぎるので、構成するのが難しいのでおすすめは出来ないが、Rails等、フレームワークのアップデートに苦戦してる現場をみてるとやはりそこの容易さは強み。

ステージング環境導入

Azure App Service Linuxの無料プランがあるのでそこにデプロイしてる。releaseブランチにマージされたらステージングデプロイ。masterブランチはプロダクションって感じで。今回、超絶アップデートしたので流石に動作確認は必要だなと思い導入。CIはGithub Action
tekitoumemo.hatenablog.com

やってみて

みんなの洋楽ランキングは5万UU、15万PVで会員数も非公開ながらとそこそこスケールしてるので、継続的なアップデートとバグを生みにくい構成作りが必要なり、60点ぐらいの構成は組めたと思う。あとはテスト系の土台作りとコンテナ化かな。コンテナ化はGCPに移したいからってのがあるが、経費的にもAzureでも安いし大きな問題が起きてないのであと回しに。テスト系はやる気が起きない(笑)2020年はGihub Actionからフォーマッター、静的解析、コアアップデート等土台の再構築をやった年となった。機能的な面では去年と全く変わってないが、まぁ良いでしょう。あとは年末〜年明けに向けてアクセスが増加するので、様子をみつつスケールしていく感じで今年はおわろうかなと思います。

面接まじむずい

tekitoumemo.hatenablog.com

前回、昔に受けたかった企業に書類が通ったという内容を書いた(スカウトだったのでほぼ100%通るのだが)。で、面接をやったが、まじでなにも答えられず当然落ちた。落ちた理由は明確で圧倒的に熱量が足りなかった。答えられなかった質問を上げて、答えられない理由を考えてみる。

当社の数あるサービスからなぜ、このサービスを選んだか?

A. スカウトにきた求人がそのサービスだったから。
とは答えられず、「スキルセットが一致した」みたいなことを答えた。他のサービスでも良いのか?って聞かれたから「他のサービスの求人があるのは知らなかった」って答えた。

なぜ、フリーランスをやめて転職するのか?

転職する意思は50%ぐらいで、良いところがあれば程度なので「特に理由は考えてなかった」って答えた。現時点ではこの回答しかないが、もうちょっと言い方があったかもしれない。

弊社に入ってやりたいことはあるか?

これも「特に考えてなかったので、ちょっと考える」と言って、大規模サービスなので安定して機能を提供していきたいと答えた。あなた自身はやりたいことはあるかと深堀されたが、いやっ、ねぇよ。。流石に「特に考えていません」って言った。

弊社に入ってどのようなキャリアを考えているか?

これも超詰まる。適当に開発経験してPMになりたいとか言っておけば良いのだろうか?ぶっちゃけ入ってからロールモデル見つけて、キャリアを考えるものだと思っているからなにも知らない状態では全部嘘になる。結局、大規模サービスなので安定して機能を提供していきたいと答えた。それキャリアプランじゃないからw

総括

圧迫感も全くなく、良い面接してもらえた。最後の質問で「ないですw」って笑っちゃったけど、呆れられながらも嫌な顔されなかったので良い企業だと思う。

やはり熱量が足りない

とにかくテンプレ質問にまったく答えられなかった。今の仕事も自分でアポ取ってこぎつけたりと、より良い条件の仕事を常に探しているだけなのでその仕事でなければならない理由なんて全く考えてなかった。転職とフリーランスで委託先が変わる違いは、マインドが変わるか変わらないかの違いだと思う。フリーランスであれば自分が得することだけ考えれば良いが、転職は自分の利益とどれだけ貢献出来るかを考えなければいけない。テンプレ質問なので、これの解を用意すれば良いのだが、人間って嘘はなかなか付けないものなのでマインドから変えてく必要がありそうだなと感じた。マインド面に関しては、全く良い方向性が見つからないのでエージェントのカンセリングを受けて、思うことがあればまた書こう。面接まじむずい