typescriptで複数戻り値の変数を呼び出した時怒られた話

以下の関数がある const get() => {

const a = () => {

retrun '';

}

const b: string = 'a';

retrun [a,b]

}

これを呼び出す const [c,d] = get();

c();

するとコンパイラに怒られる

type 'string' is not callableみたいな感じ

stringは関数じゃねえから呼び出せねえよって

結論 複数の戻り値を返したときは型の保証がされていない

正確には複数の型 今回の場合 戻り値は funtion | stringとなる

呼び出した順番で型の保証がされているわけではない

今回の場合コンパイラはこう解釈した

c () は function() あるいは string()だな

stringは関数ではないので先程のエラーが発生するわけだ

今までjavaとかしか触ってなくてjavaのメソッド感覚で使ってた

iPhoneの修理を正規か非正規で迷っている人へ(水没で修理)

忙しい人に結論だけ

あと一年以上は使う予定 -> 正規店で修理しろ

リセールを考えている -> 正規店で修理しろ

取り合えずデータが復旧できれば良い -> 非正規店で良い

もう長いこと使っている、完全に壊れたら変えるつもり -> 非正規店で良い

安価な端末だ -> 非正規店で修理するか、古いモデルなら最新機種に買い替えろ

iPhoneが水没してぶっ壊れたので非正規店で修理してきました

1. シャワーを浴びてたら水没した

ある日シャワーを浴びるついでにiPhoneを軽く洗っていたら画面に黒いもやがかかるようになりました。

前回も軽くもやがかかったことがありましたが、放置してたら治ったので今回も大丈夫だろうと思っていました。

2. ネットでやり方を見て乾燥放置してみる

ネット調べると水没したということはわかったので乾燥放置させるやり方を試してみました。

やったことは以下の通り

除湿器を使って風呂場を除湿

iPhoneを除湿した空気とともに密閉容器に入れ乾燥剤とともに二日放置

結果:ダメ

3. 今夏で暑いし使っているうちに直るかな...そのまま使用

1日目は大丈夫でした。

2日目に画面が恐ろしく暗くなり色もおかしくなりました。カメラ内部にも水が混入。

色覚サポートをさらに嫌な感じにしたような

4. さすがに自然修復を断念して修理を出すことにする

修理を出すときに悩んだのは正規店か非正規店かということ

私のiPhone XRは一年保証が残っていたが、水没は保証対象外

保障対象外の修理費は以下を見ればわかるがXRで上限45,400円だった。

support.apple.com

非正規店をざっと見たところ、2万強で直せそう

45,400円払うのはつらいので非正規店で修理することにした

5. ******** 渋谷店に持っていく

ネットで高評価だった******** 渋谷店に持って行った。

これは後で気が付いたのだが、レビューの大半はSNS割引のための高評価でまた壊れた症状も人それぞれなので注意してみること

ポイントとしては、同じような症状のレビューを探すことと低評価と高評価の両方を確認すること

6. 水没復旧の罠

水没の時は罠が多い。大体非正規店の公式サイトの説明に水没対応とあるが、あれは水没して電源が入らないものを電源が入ってデータが取り出せる程度に修復するというもの。

決して新品同様に使えるようにするわけではない。修理の結果スピーカーやマイクが動かなくても関係ないのだ!!

大体水没すると程度にもよるが画面、基盤、電源が逝かれるので逝かれた箇所に応じて金がかかる

・画面が逝かれたら画面交換(2万から4万)

・基盤が逝かれたら8000円程度

・電源が逝かれたら6000円程度

壊れた個所によって正規店よりも金がかかることが十分あり得る。

液晶パネルの説明も罠だった。公式サイトには液晶パネルの交換で2万6000円などと書いてあったが、実際に話しを聞くと互換パネルで修理した場合だということ。

正規の再生品パネルだと4万だと言われた。

いやお前、4万はらうなら正規店で修理するわ。しぶしぶ互換パネルを選択し修理をお願いした。

※互換パネルは正規の再生パネルと違い色が変だったり、明るさが暗かったりするみたい。

7. Appleカスタマーサービスに相談してみる

落ち着いて考えると非正規店で直すメリットが全く感じられなくなった。

・非正規店で直したものはジャンク扱いになるためリセールが著しく下がる。

・修理しても基盤が一回水没しているので突如として動かなくなる可能性がある。

・品質は店によって違うので保障されていない。

・再生品パネルが高すぎる

・スピーカーなどのほかの部分が壊れていても補償はない

非正規店が直す前に修理内容の確認の電話をするといっていたので、そのタイミングで作業費だけ払ってキャンセルし正規店で修理しようと思った。

Appleカスタマーサービスに相談してみるとどうやら遅かったらしい。

私:非正規店で一回分解したものでも正規店で修理してくれますか?

カスタマーサービス:非正規店で一回分解や修理をしたものは改造品扱いになるので正規店で修理を受け付けられない可能性がある

と言われてしまった。

そこでイチかバチか非正規店に電話して修理の状況を聞いてみると、

非正規店:もう分解して画面の仮付けしましたよ??今回基盤や電源は壊れてなかったので画面の交換だけで済みそうです。

私:そうですか... カメラ内に水滴が入って水分の乾燥跡が残ってるんですけどきれいにできますか?

非正規店:綿棒などで掃除しておきますよ。

マジかよ。仕事はええ。

もう後戻りはできなくなった。幸い最低限画面の交換だけで済んだのでもうこのまま修理することに。

8. 修理完了。しかし...

一番危惧していた互換パネルの見え方

これは意外に良かった。元のパネルと色や明るさなどほとんど変わらない。

しかし違う部分が壊れていることに気が付いた。

iPhoneはスリープ時に画面タップでロック画面を表示することができるが、反応しなことが多々ある。(体感5割ぐらい)

これはまぁ反応することもあるし、サイドボタンで画面を起動できる。まぁしょうがないか。

・FaceIDが使えない

修理に出す前は使えていたのだ。確実に修理の影響... なんでパネルを修理してtrueDepthカメラが壊れるんだ...

これは非常に困る。TouchIDがなくなったiPhoneに代わりに搭載されたのがFaceIDなのだ。

いちいちパスコードを入力するなんて怠すぎる!!!!

・画面保護フィルムが使えない

画面保護フィルムを張り直しました。

しかしダメでした。保護フィルムを貼ると画面の反応がすごい悪くなります。

反応しないときもあるし、反応しても遅延がすごかったり。

落として画面割れでもしたら買い替えですね...

まとめ

水没により画面が壊れ、修理により画面は使えるようになりました。その代わり、スリープからタップで復帰機能とFaceIDを失いました。

正直、正規店で修理したほうが良かったです。

私のiPhoneはただのジャンクになりました。

私は毎年iPhoneを買い替えている種族で古いのを売り払っているのですが、今回はリセールがジャンク価格まで下がるんでしょうね。

45,000ぐらいで売れたものがジャンク品で20,000ぐらいでしょう。悲しいです。ちゃんと修理してあと一年使えばよかった。

みなさんは修理するときに、よく考えてくださいね。

高い勉強代でした。

AtCoder Beginner Contest 138受験記

AtCoder Beginner Contest 138

A - Red or Not

if a >= 3200 print a else print "red"

B - Resistors in Parallel

f:id:repenguin:20190819095843p:plain

はじめ通分しないといけないのか???と思ったが普通に計算すればOKだった

C - Alchemist

なんとなくソートして小さいほうからがっちゃんしていったら成功!!

D - Ki

木構造が解けない...

レート更新

f:id:repenguin:20190819100107p:plain

f:id:repenguin:20190819100335p:plain

感想

もうはやレートの伸びがなくなってきました。

厳しいです。

これからちゃんと過去問演習していきたいと思います。

reactとかdockerとかの勉強で忙しいんですけどね...

AtCoder Beginner Contest 137受験記

AtCoder Beginner Contest 137

f:id:repenguin:20190810230342p:plain うわあああああああああああああああああああああああああああああああああああああああああああああああああああああ

A - +-x

Math.max を二回するだけ

B - One Clue

始点:X - K + 1

終点:X + K - 1

を出力するだけ

C - Green Bin

TLE祭り

アナグラムかどうかはいろいろな比較方法がある

①Mapにアルファベットごとに個数とともに格納し比較

②文字列をソートして比較

だがこの問題はアナグラムか比較する方法が大事なわけではない

普通にやると二重ループになる計算量をどう落とすかが問題である

回答としてはMapを使う

①ソート済み文字列をMapに個数分格納する

②今回は組み合わせの数を求めないといけないので個数が2以上である(複数個存在する)ものに関して組み合わせを計算しカウントする

public static void main(String[] args) {
    FScanner sc = new FScanner();
    int N = sc.nextInt();
    Map<String, Integer> m = new HashMap<String, Integer>();
    long cnt = 0;
    for (int i = 0; i < N; i++) {
        String s = sortStr(sc.next());
        if (m.containsKey(s)) {
            m.put(s, m.get(s) + 1);
        } else {
            m.put(s, 1);
        }
    }
    Iterator<Map.Entry<String, Integer>> itr2 = m.entrySet().iterator();
    while (itr2.hasNext()) {
        Map.Entry<String, Integer> entry = itr2.next();
        if (entry.getValue() != 1) {
            cnt += get(entry.getValue());
        }
    }
    System.out.println(cnt);
 }
public static String sortStr(String str) {
    char[] list = new char[str.length()];
    list = str.toCharArray();
    Arrays.sort(list);
    return new String(list);
}   
public static long get(int n) {
    long ret = 0;
    for (int i = n - 1; i > 0; i--) {
        ret += i;
    }
    return ret;
}

レート更新

f:id:repenguin:20190810231627p:plain f:id:repenguin:20190810231655p:plain

AtCoder Beginner Contest 136受験記

AtCoder Beginner Contest 136

Dが解けない!!!!!!!!!

A - Transfer

割愛

B - Uneven Numbers

普通にループで数えるだけ

手動でも数えられると思うけど考えるだけ時間の無駄

C - Build Stairs

単調非減少ってなんやねんとはじめ思いました

単純に右のほうが左より大きければいいみたいですね

貪欲法で左から順に右が左より1以上大きければ-1して同じならそのまま小さければ"No"

public static void main(String[] args) {
    FScanner sc = new FScanner();
    long N = sc.nextLong();
    long[] H = new long[(int) N];
    for (long i = 0; i < N; i++) {
        H[(int) i] = sc.nextLong();
    }
    long back = H[0];
    back--;
    for (long i = 1; i < N; i++) {
        if (back < H[(int) i]) {
            H[(int) i] -= 1;
            back = H[(int) i];
        } else if (back > H[(int) i]) {
            System.out.println("No");
            return;
        }
    }
    System.out.println("Yes");
}

D - Gathering Children

解法はわかってたんだけどね、実装力が足りなかったよね。つらい

シミュレーションしようとせずに個数の部分は算数でといたらよかったんだね

atcoder.jp

レート更新

f:id:repenguin:20190804235336p:plain

f:id:repenguin:20190804235430p:plain

gitのメリットまとめ 私的利用

ローカルリポジトリを持つことができる

SVNはローカルリポジトリがないのでローカルマシンでちょっとした開発をするときに手動でファイルをバックアップしたりして管理する必要があるが、gitならローカルでブランチを切って開発試行をすることが可能。ローカル内の変更も楽に管理できる。

またSVNはリモートリポジトリにコミットする際には完ぺきな状態でコミットする必要がある よってコミットの中身が膨大になる gitは作業途中でもローカルリポジトリにコミットすることができ、バグった時の原因究明が楽にできる

また任意のタイミングでローカルリポジトリをリモートリポジトリにプッシュすることができるため

ブランチ運用が楽

構造上ブランチの作成や差分の比較などが高速で行うことができる

プルリクエストでレビューをすることができる

SVNだとコミットしてからレビューという流れになって開発ブランチが汚くなる。 またリモートにバグが混じったものをプッシュするとブランチを使っている全員に影響がでる プルリクエストをすることによって開発ブランチにマージ前にレビューをすることができ開発ブランチをきれいに保つ かつ redmineとの連携だけではSVNの変更をredmineのチケットで見比べながらやらないといけないがgitでプルリクを使うとコードの変更をすべてgit上で管理することができる よりスマート

レビューを強制することができる

本番ブランチの緊急修正であっても修正ブランチをきってマージをプルリクで行うことによってきれいな承認フローをとることができる

ゆくゆくはデプロイを自動化できる

ブランチ運用が楽にできるので本番用のブランチを用意して本番にプッシュされたらデプロイとすることができる

本番ブランチがあることでいつだれでも最新の本番環境を落としてくることができる

デプロイを自動化することによって一案件ごとではなく、機能ごとにデプロイをすることが可能になりより万が一障害が発生しても小分けにすることができる

よってリスク分散になる。

Gitリポジトリは壊れにくい

SVNのクリーンナップなんてことには原則ならない

AtCoderで茶色になりました

AtCoderで茶色になりました

初めて色がついたのでまとめておきます。

歴史

2019/6/15 AtCoderはじめました

専門学校時代にプログラミングを始めました。

以降ちゃんとしたアルゴリズムなど学ぶことなく今まで過ごしてきました。

社会人歴3年目、転職したいと思い転職活動をしました。

その際コーディングテストが全然通らないつらい思いをしたので競技プログラミングで鍛えることにしました。

初めて出たコンテストはこれでした

atcoder.jp

A問題しか解けず絶望しました。

その後普通のABCに出始めましたが、C問題が解けずに悔しい思いをしていました。

2019/07/28 茶色になる

ABC135にてコンテスト参加回数7回目となり色がつきました。

f:id:repenguin:20190728000016p:plain

やったこと

①過去問を解きました。

AtCoder Problemを使い過去問を解きました。

https://kenkoooo.com/atcoder/#/table//

ABC042からが新形式で良いということで順番に解いています。

いきなり全部解くのは不可能かつモチベが下がるのでCまで解いていきました。

②ABCのコンテストに必ず参加するようにしました

ABCのコンテストは必ず出るようにして自分が解けた問題 + 1まで必ず復習するようにしました。

例:C問題まで解けたなら、D問題まで解説をみてACする

これが一番大事な気がしますね

③よく使うメソッドや複雑なアルゴリズムはライブラリ化するようにした。

配列のソートとか当たり前だけどいちいちググってたものをライブラリ化しました。

複雑なアルゴリズムはコンテスト内で一から実装している暇がないのでテンプレを作りました。

これから

目標としては水色になることなので引き続き頑張っていきたいと思います。

まずは緑色ですね。最近のコンテストは運よく緑パフォが出ているので引き続き頑張りたいです。