読者です 読者をやめる 読者になる 読者になる

コンパイラかく語りき

文系新卒プログラマーのメモ

nodemailerでconnect ECONNREFUSED 127.0.0.1 が出てしまう場合の対応(Gmail対応)

ローカル開発中にnodemailerのエラーに遭遇。

connect ECONNREFUSED 127.0.0.1 

調べてみたら、設定が足りていなかった。

 

SMTP設定

SMTPのconfigを設定する。

gistbe104f76b8a98f462f30be21c99745f1

 

これでひとまず、自分から自分へのgmail送信はできた。自分の場合はprocess.envを経由して設定項目をやり取りしている。そこは各自書き換えください。

 

参考

参考元の記事では、portというコンフィグ項目があったけど、おそらくデフォルトポートが使われるはずと予測して、消してしまった。

stackoverflow.com

node-cronはTimeZone指定ができるよ

node.jsアプリケーションでcronを実行する場合、node-cronを使うことが多いです。

 

github.com

 

cronの実行時間を指定する際、TimeZoneを指定できると気づいたのでメモ。

 

Asia/Tokyoタイムゾーン

Asia/Tokyoタイムゾーンの例は以下の通り。

gistfbbc9d099cbbc8e5c80111b41212948c

 

この例では、東京時間で毎日12時に、処理が実行されます。

 

利用可能なタイムゾーン

node-cronは内部的にmoment-timezoneを利用しています。(2017/04/23現在)

 

github.com

 

moment-timezoneはIANA Timeのmoment.js向けサポートですので、利用可能なタイムゾーン一覧についは、以下を参照ください。

 

IANA — Time Zone Database

【JavaScript】Array.prototype.sliceとArray.prototype.spliceの違い

Arrayの標準メソッドにはsliceとspliceがあります。紛らわしいですよね。しかも挙動まで似ています。

ちょっと自分の中で違いを忘れてきてしまっていたのでメモ。

 

Array.prototype.slice

配列の一部をコピーします。

 

gist1ab3b38c61b8413eae2b4981cfc614c7

 

developer.mozilla.org

 

Array.prototype.splice

配列の一部を切り出します。

 

gist72ba484578e82059e984e8137959909d

 

developer.mozilla.org

 

違い

  • 元の配列に変更を加えるかどうか
  • 第二引数が「終了位置」か「個数」か

 

ちなみに、spliceの場合は第三引数以降で追加要素を指定できますね。

giste2c3e4ae5c6ec8eed702be74237dcfa7

【JavaScript】配列の中からペアではない単一要素を見つけるにはXOR(排他演算子)が便利

プログラミングの問題を解いていて、ベストプラクティスを発見したのでメモ。

 

問題

奇数個の要素を持ったInt型の配列Aが与えられる。その中からペアにはならない単一の要素を見つける。

A[0] = 9, A[1] = 3, A[2] = 9,

A[3] = 3, A[4] = 9, A[5] = 7,

A[6] = 9

この場合、9は2つのペアに、3は1つのペアになり、7だけがペアにならない。このような数を返す関数を作成する。

 

リンク: OddOccurrencesInArray coding task - Learn to Code - Codility

 

回答

gist4c7df1ad4317972841aa87128b670b46

 

developer.mozilla.org

 

Elmをインストーラ経由のものから、npm管理へと移行

半年ぶりくらいにElmを触りましたが、0.17から0.18へとアップグレードしました。0.17は公式のインストーラ経由でインストールしたのですが、これを機にnpm管理に移行しました。

 

インストーラ経由のElmを削除

Elmそのものを削除。

$ sudo rm /usr/local/bin/elm

Elm周辺のツールを削除。

$ sudo rm /usr/local/bin/elm-*

 

公式系のツールはこれで削除できるはずです。他にも独自にインストールしていた場合、↑のコマンドでは消し漏れがあるかもしれません…。 

 

npm経由でインストール

$ npm i -g elm

参考: Elm 0.18への対応方法 - Qiita

 

 

cpp 日本語文字列についてメモ

言語100本ノックに挑んだら、いきなりつまづいてしまった

 

www.cl.ecei.tohoku.ac.jp

 

"パトカー"の出力ができていないさそう。なにやら文字化けが表示される。ひょっとしたら文字コード周りの問題か…?

 

マルチバイト文字列とワイド文字列

そもそも、cppの文字列にはマルチバイト文字列とワイド文字列が存在するらしい。

 

C/C++での日本語文字列の扱い、どうすればよいか - minus9d's diary

 

マルチバイトとか文字コードとか…あまり得意ではない…。ので、軽く調べてみた。

 

・マルチバイトとは従来のchar型みたいに1Byte文字と2Byte文字を分けて考える概念のこと
ユニコードとはWCHAR型の様に日本語や中国語やアルファベットや数値などを区別無く扱う概念のこと

 

charとUnicodeとワイド文字をごっちゃにしないために

 

なんてわかりやすい…。

 

ワイド文字列にはwstring

 

上記の記事では、char[] strw = L"こんにちは" と、文字型の配列を利用している。個人的にはstringを使っていきたいので、もうちょっと調べる。

 

どうやらwstringというものがあるらしく、これを使えばワイド文字列を扱うことができる。

 

wstring - C++ Reference

 

しかも、使えるメソッドはstringと同じ。

 

つまり、string にせよ、wstring にせよ、そこに含まれる機能はどちらも std::basic_string が提供しているものですから、 まったく同じ使い方ができます。

 

Programming Place Plus C++編【標準ライブラリ】 第2章 string

 

それと、Lや_Tのような標準マクロを使ってリテラルを宣言できます。

 

ちなみにユニコード設定でもマルチバイト設定でも両方で通用するようにプログラミングするには

char * text = "文字列";
とか
WCHAR * text = L"文字列";
という書き方ではどちらか片方に限定した書き方なのでダメです。
TCHAR * text = _T("文字列");
と書くのが正解です。

 

なんて分かりやすい解説。

 

wstringを使うときはLが必要なときがあります

 

普通にstringで良かった

ここまで書いておいてアレですが、wstringをごにょごにょといじっていたところ、stringで良いことに気づいた

 

string型の変数に代入した"パタトクカシーー"自体は出力されていた。問題は、添字でのアクセスができていないことだった。

 

gistd4ca5fabb1497b7aac2d2be3b760559e

 

自分の環境ではUTF-8がデフォルトだったらしく、文字コードについて悩む必要はそもそもありませんでした。コンパイラやcppのバージョンにも寄るんでしょうけど。

 

そもそも、今時は多バイトunicodeが標準な気がするので(要調査)、2バイトunicodeのワイド文字列は不適切かもしれませんね。すくなくとも、100本ノックをこなすレベルでは、必要なさそうでした。

 

添字アクセスするには…?

ICUというライブラリを使えば、以下のように書けるようです。

 

gist7003eeb1a669bd5568299006b58cfd6f

 

Unicode string indexing in C++ - Stack Overflow

Python3で標準入出力(競技プログラミング用)

最近Pythonデビューをした者です。 手始めに競技プログラミングで素振りをしようかなと。まずは入出力のお勉強。

単純な入出力

gistd81cb35385f34d5b0e127a5b4dfc85ff

入力の型

gistca87e0960b731deba07e1ff0c7d5782e

1行データの分割

gistafc68ac34d7db66f39071f71e05eb4aa

複数行の入力

gist3b54862ef4079ba91b532913fd153876

以上、個人メモでした。

参考記事