Duolingo English Test - 初回受験の記録
July 15, 2022
海外大学院へ進学することを検討しています。
出願にあたり英語の能力証明が求められます。具体的には英語試験にて規定のスコアを取得することです。
検討しているいくつか学校では TOEFL や IELTS などに加えて、Duolingo English Test も利用可能でしたので、私はこの試験を利用することにしました。
...海外大学院へ進学することを検討しています。
出願にあたり英語の能力証明が求められます。具体的には英語試験にて規定のスコアを取得することです。
検討しているいくつか学校では TOEFL や IELTS などに加えて、Duolingo English Test も利用可能でしたので、私はこの試験を利用することにしました。
...大学でコンピュータ・サイエンスを学びたいと考え、学校を検討した結果をまとめます。同様の思いを持っているの人の役に立てば幸いです。
入学して勉強することが主目的であり学位の取得が本来の目的ではありません。しかしせっかく腰を据えて学習するのであれば、やはりその成果を何かしらの形で残したいと思うものです。ということで、コンピュータ・サイエンスの学位が取得できる大学を検討してみました。
...小ネタです。Mac で作業していて、ちょっと時間を測りたいなというときに。
以下を実行してみてください。5 秒後に “Hi, It is time.” と再生されるはずです。
...ユーザに CSV ファイルをダウンロードさせたいとします。
最初に思いつく方法は、CSV ファイルを作成してどこかのオンラインストレージに配置し、そこからダウンロードさせるというものでしょう。
...公式ページの Installation に記載されている内容に従います。といっても以下を実行するだけ。
なお私の環境は Mac & Homebrew なので以下になります。
...フィリピン帰国後翌日に微熱の発熱があり、その翌朝になっても熱が引かなかったため病院で抗原検査をしたところ、コロナウイルス陽性でした。感染源は不明ですが、医者の方曰く、飛行機内で感染した可能性が高いのではないかとのことでした。
...フィリピンの中でも、マニラやセブといった暑いエリアを想定しています。バギオなどの涼しいエリアは気温、気候が異なるので参考としないでください。
...海外の人から以下の質問をされたときに答えに窮したので整理。
「(質問者=外国人から見て)日本人は親切で礼儀正しい。しかし日本人が日本人を嫌いだと言っているケースを見かける。」これはなぜなのか。
...(将来もしまた渡航したときのために、個人的なメモも兼ねて記録。)
お断り:プロモが新規追加・更新されるに従って、本記事の情報が古くなっている可能性もあります。
...現在仕事の用事でフィリピンのセブに来ています。
ホテルに滞在しているのですが、部屋に虫が無限に湧いてくるという恐ろしいことが起こったので今後の教訓として記録します。(私は虫が大嫌いです。。。)
...これから QR コードを利用したサービスを開発する予定。
それに向けて改めて QR コードについて調べていたら、非常にすばらしい記事を見かけたので、忘れないように保管しておきます。
...PerformanceNavigationTiming.type
が "back_forward"
であれば、ブラウザの「戻る/進む」でページが開かれています。
function printNavigationType() {
const perfEntries = performance.getEntriesByType('navigation');
perfEntries.forEach((entity) => {
console.log(entity.type); // e.g. "back_forward"
});
}
performance
プロパティからは Performance
オブジェクトが取得できます。Performance
オブジェクトの getEntriesByType()
メソッドを使うことで PerformanceNavigationTiming
オブジェクトが取得できます。PerformanceNavigationTiming
オブジェクトの type
プロパティを見ることで、そのページがどのように開かれたのか判定できます。例えば以下のように判定することができます。
...JSX element 'T' has no corresponding closing tag.
#
こんなエラーが出て初めて知りました。長いこと TypeScript 使っていながら意外と知らなかったのでメモ。
const Component: Props = () => {
// ❌ TS ERROR: JSX element 'T' has no corresponding closing tag.
const someFunc = <T>(arg: T) => {
return arg;
};
return <p>It's ERROR (;-;)</p>;
};
const Component: Props = () => {
// ⭕️ (NO ERROR)
function someFunc<T>(arg: T) {
return arg;
}
return <p>It's OK (^_^)</p>;
};
const Component: Props = () => {
// ⭕️ (NO ERROR) 👇 T の後に "," をつける
const someFunc = <T,>(arg: T) => {
return arg;
};
return <p>It's OK (^_^)</p>;
};
こちらの ISSUE が詳しいです。
...個人的には結構悩むポイントだったりするので。
/**
* 関数の中にバリデーションを持たせる場合
*/
doJob();
function doJob(data) {
if (!validateData(data)) {
// handle invalid data.
} else {
// do job.
}
}
/**
* 関数を呼び出す側でバリデーションを行う場合
*/
if (validateData(data)) {
doJob(data);
}
function doJob(data) {
// do job.
}
機能的な面でのそれぞれの利点と欠点は以下が考えられます。
...開発しているアプリで Firebase Authentication の Facebook ログインを利用しています。
ただ、挙動に不可思議な点があって、iPhone でごくまれに “Unable to process request” というエラーが出たり、そもそも Facebook にリダイレクトされないことがあったりといった不具合がありました。
...TypeScript で記載しています。
/** Sleeps for the specified time (milliseconds). */
function sleep(timeMs: number): Promise<void> {
return new Promise((resolve) => {
setTimeout(resolve, timeMs);
});
}
/** Execute function, if it fails, retry after waiting. */
async function tryWithWaiting(
callback: () => any,
waitTimeMs: number,
limitTimeMs: number
): Promise<any> {
if (waitTimeMs > limitTimeMs) {
throw new Error('Timeout.');
}
const res = callback();
if (res) {
return res;
}
await sleep(waitTimeMs);
const extendedWaitTimeMs = waitTimeMs * 2;
return tryWithWaiting(callback, extendedWaitTimeMs, limitTimeMs);
}
/** Returns true with a 10% probability or false with a 90% probability. */
function possiblySuccess(): boolean {
return Math.random() >= 0.9;
}
(async () => {
try {
await tryWithWaiting(possiblySuccess, 100, 10_000);
console.log('SUCCESS (^^)');
} catch {
console.log('TIMEOUT (;-;)');
}
})();
// -> "SUCCESS (^^)" or "TIMEOUT (;-;)"
失敗するたびに待ち時間の間隔を広げながらリトライする処理ですが、このアルゴリズムは、エクスポネンシャルバックオフ(Exponential backoff)というらしいです。
...例えばメールアドレス認証を行う際、以下のように一度アプリ画面を離れたのち、再び戻ってくるというフローになる場合が多いです。
上記の最後の部分である、アプリに戻ってきたタイミングで何かしらの処理を走らせたいというニーズがあり、カスタムフックを作成しました。
...配列の要素がプリミティブな値の場合、重複を取り除くには Set が便利です。
要素がオブジェクトの場合、Set ではなく Map を利用して重複を排除できます。
以下では Map を利用した重複排除の関数を例示します。
...(友人にヘルプを求められ、そのとき対応した内容をメモ)
ワードプレスで表示されない画像があるとのこと。
Amazon Lightsail 上にインストールされた WordPress
...(友人にヘルプを求められ、そのとき対応した内容をメモ)
ブログのワードプレスで以下の通りいくつかアラートが出たものの、良く分からないので助けて欲しいとのこと。
...以下のように書くと、テストなどでモックを使用したい時は外から渡すこともでき、テスト以外のときは呼び出し元のコンポーネントでプロップスを渡す必要もないので便利です。
...自分用メモ。始めて作成した Flutter アプリを App Store 経由でテストフライト配布したときの手順。
組織名がデフォルトの com.example
だと、Apple Developer に Bundle ID を登録するときにエラーとなってしまう。
自分用メモ。始めて作成した Flutter アプリを Google Play 経由で内部テスト配布したときの手順。
組織名がデフォルトの com.example
であるか、またはこれからはじまっているもの(例:com.example.my.app
)は、Google Play Console にアップロードするときにエラーとなってしまう。
App
└ Layer1
└ Layer2
├ Layer3A
└ Layer3B
import 'package:flutter/material.dart';
void main() => runApp(const App());
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(home: Layer1());
}
}
class Layer1 extends StatefulWidget {
const Layer1({Key? key}) : super(key: key);
@override
State<Layer1> createState() => _Layer1State();
}
class _Layer1State extends State<Layer1> {
int _count = 0;
void _increment() => setState(() => _count++);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Current count is $_count')),
body: Layer2(count: _count, increment: _increment),
);
}
}
class Layer2 extends StatelessWidget {
const Layer2({Key? key, required this.count, required this.increment})
: super(key: key);
final int count;
final void Function() increment;
@override
Widget build(BuildContext context) {
return Column(
children: [
const Text('I am a counter.'),
Layer3A(count: count),
Layer3B(increment: increment),
],
);
}
}
class Layer3A extends StatelessWidget {
const Layer3A({Key? key, required this.count}) : super(key: key);
final int count;
@override
Widget build(BuildContext context) {
final String res = count % 2 == 0 ? 'Even' : 'Odd';
return Text('Count is $res');
}
}
class Layer3B extends StatelessWidget {
const Layer3B({Key? key, required this.increment}) : super(key: key);
final void Function() increment;
@override
Widget build(BuildContext context) {
return TextButton(
onPressed: increment,
child: const Text('INCREMENT'),
);
}
}
Prop Drilling(バケツリレー)になっています。
...(個人的メモです。)
Flutter における状態管理方法の選択肢は公式ページにも記載がある。
シンプルに setState を使用する以外では Provider か Riverpod のパッケージを使うのが一般的。
...(Flutter 開発を始めたばかりの時にしがちな setState の誤解の話)
flutter create myapp
した後、setState に関わるところの記述は以下のようになっています。
本記事は Dart で記載しています。https://dartpad.dev/
In software engineering, dependency injection is a technique in which an object receives other objects that it depends on, called dependencies.
あるオブジェクトが、自分が依存する別のオブジェクトを受け取ること。
...Dart で記載しています。https://dartpad.dev/
あるところに鳥と魚がいました。
void main() {
Bird().move();
Fish().move();
}
class Bird {
void move() {
print('move');
print('by fly');
}
}
class Fish {
void move() {
print('move');
print('by swim');
}
}
どちらも動物ですので Inherit することにしました。
...前回、本記事と同様の環境構築を目的とした記事を投稿しています。その手順は Firebase 公式の以下ページを参考に記載しました。
...flutter create -i swift -a kotlin my_flutter_app
その後、Android エミュレータと iOS シミュレータを立ち上げてカウンターアプリが表示されることを確認する。
...