2024年11月5日火曜日

Unit5が終わった

Google様のAndroidトレーニング「Compose を用いた Android アプリ開発の基礎」のUnit5まで終わった。

以前作ったアプリではRetrofit + moshiを使っていたのだけど、このコースではRetrofit + KotlinSerializationの組み合わせを推奨しているみたい。moshiはどこに行った?

通信するアプリでは、まず最初にManifestファイルへ権限設定をしておくのが良さげ。大体、後回しにすると忘れる。

build.gradle.ktsでの依存関係はデフォルトで作られたものをそのまま使うとうまく動かないケースがあり。

implementation(libs.androidx.core.ktx)implementation("androidx.core:core-ktx:1.12.0")に変更した。

pluginsの部分も差し替えないと、エミュレータで試したときにエラーになった。

 plugins { 
 id("com.android.application") 
 id("org.jetbrains.kotlin.android") 
 id("org.jetbrains.kotlin.plugin.serialization") version "1.9.0" 
}

この辺りは設定ファイルの書き方とかをちゃんと勉強しないとダメだなぁ。とりあえず作り方を一通り見たら、設定ファイルの書き方を改めて勉強しよう。

2024年10月31日木曜日

アウトプットした方が心の安定が保たれるという噂

というか、インプットに偏りすぎるのは自分のためにも良くない、という噂があり。
たまにXに「身体が痛い」「頭痛がひどい」と呟く程度のアウトプットしかしていない、インプットに激しく偏っている自覚があるので、自分の精神のためにアウトプットをしようと。

勉強していることとかを書けばいいかと思ったけど、ZennとかQiitaに書いちゃうと、ゴミになって迷惑かなと思うので、ここならいいかと。なんとなく復活させる。

実は仕事がちょっと暇なので、Android開発の勉強をしている。どうやら来年の1月からAndroid開発案件が降ってくるらしいので。 ということで、この辺りから。
で、どうやって勉強しているかというと、Google様のトレーニングコースをやっている。

Compose を用いた Android アプリ開発の基礎

量が多くて、サラッと流すと全てが忘却の彼方に飛んでいきそうだし。
しっかりやるといつまでも終わらない。
とりあえずもうちょっとでユニット5が終わりそうなところなので、これで「知らなかったなぁ」と思ったことをまとめていく。

果たして続くのか。

2020年9月18日金曜日

SESで添付付きのHTMLメールを送る

この情報は2020年9月時点の情報です。
先日、お仕事でAWS SESを利用して、動画を添付したHTMLメールを送るというのをやったのですが。
結局ボツになりまして。
もったいないので、ここに概要を貼り付けておこうかと。

ちゃんと動くかどうかは保証しません。なんかあっても私を責めないでください。
HTMLメールはファイルとして用意して、readTemplate()でstringとして読み込むようになっています。
動画はS3からmp4をダウンロードして、base64エンコードします。

タイトルが日本語だとbase64エンコードしないとダメだったりと、いろいろ面倒な感じになっていますが。
    try {
      // HTMLメール本文
      const templateStr = await this.readTemplate()
      const encodedTemplate = Buffer.from(templateStr).toString('base64')
     
      // 動画部分
      const encodedStr = <ここはS3からmp4をダウンロードし、base64エンコードする>


      const fromEmail = 'noreply@hogehoge.jp'

      // Subject
      const subject = '動画のお届けものです'
      const encodedSubject = Buffer.from(subject).toString('base64')

      const boundary = `----=_Part${ Math.random().toString().substr( 2 ) }`


      const rawMessage = [
        `From: "${ fromEmail }" <${ fromEmail }>`,
        `To: ${ address }`,
        `Subject: =?utf-8?B?${ encodedSubject }?=`,
        'MIME-Version: 1.0',
        `Content-Type: multipart/mixed; boundary="${ boundary }"`,
        '\n',
        `--${ boundary }`,
        'Content-Type: text/html; charset=UTF-8',
        'Content-Transfer-Encoding: base64',
        '\n',
        encodedTemplate,
        `--${ boundary }`,
        'Content-Type: video/mp4; name="movie.mp4"',
        'Content-Transfer-Encoding: base64',
        'Content-Disposition: attachement; filename="movie.mp4"',
        '\n',
        encodedStr,
        '\n',
        `--${ boundary }--`
      ]

      const rawParams: SendRawEmailRequest = {
        Source: 'noreply@hogehoge.jp',
        Destinations: [address],
        RawMessage: {
          Data: rawMessage.join('\n')
        },
      }

      AWS.config.update({region: <ここはregionを指定>})
      const ses = new AWS.SES()
      const sendPromise = ses.sendRawEmail(rawParams).promise()
      return new Promise((resolve, reject) => {
        sendPromise
          .then((data) => {
            console.log('send success: ', data.MessageId)
            resolve(true)
          })
          .catch((err) => {
            console.log('send error: ', err)
            reject(err)
          })
      })
    } catch(error) {
      console.log(`sendEmail error(to: ${address}): `, error)
      throw error
    }

2016年8月23日火曜日

Java正規表現確認用のサイト

自分向け備忘録。

http://java-regex-tester.appspot.com

Direct Connect

金持ちにしか関係ないと思っていたダイレクトコネクトを設定する機会がやってきた。

 - 多分誰かが何かを依頼したのであろう、Direct ConnectのVirtual Interfacesにエントリができていた。ステータスはPending acceptance 
- とりあえずVPCのマネジメントコンソールでVGWを作る。リージョンに気をつけて、適当に名前をつける
 - 前述のVirtual Interfacesを作成したVGWと繋げる。
     - チェックボックスにチェックを入れ、Accept Virtual Interfaceをクリック
     - VGWを選択してAcceptをクリック
- なんか繋がったっぽい感じになるまで待つ
- VPCを用意する。必要に応じてサブネットも作る。
- VPGにVPCをアタッチする
- VPGにパケットを流すサブネットのルートテーブルに、エントリを追加する

最後の手順を忘れて、「あれ?繋がらん」と苦悩したのでした。

接続先サーバがpingを通さなかったので、疏通確認はncで。

$ nc -v -w 1 < IP address> -z

2015年4月8日水曜日

rbenv-gemsetsを使う。

$ rbenv exec gem uninstall bundler
$ rbenv exec gem list

$ rbenv versions
$ rbenv gemset create 2.2.1 basic
$ mkdir -p ~/Study/Rails1
$ cd ~/Study/Rails1

$ echo basic >.rbenv-gemsets
$ rbenv gemset active
basic
$ rbenv exec gem install bundler
$ rbenv exec gem which bundler
$ gem list
$ cd ..
$ gem list

rbenv-gemsetsはAnsibleでインストール。
Bundlerをアンインストールして、全部gemsetで管理するように切り替えた。
gemsetはRubyのバージョンごとに作るので、まずrbenv versionsでバージョン確認。とりあえずbasicとしておいた。

作業用ディレクトリに移動してそこで有効にするgemsetを記述した.rbenv-gemsetsファイルを作る。rbenv gemset activeで確認すると、なぜかbasic以外にもglobalと表示される。gem envを確認してもglobalというgemsetがあるかのようにGEM PATHSに表示されるけど、実際には該当ディレクトリがない。謎。
深く考えずにbundlerをインストールすると、ちゃんとGEM PATHSのbasicの下にインストールされるし、他のディレクトリに移動してgem listを見るとbundlerは表示されない。

あとは、gemをインストールするときにちゃんと該当ディレクトリで.rbenv-gemsetsファイルを記述するようにすればきっときれいな状態になる...はず。

Bundlerもgemsetsで管理するならrbenv-default-gemsの設定は確認する必要あり。
つづけてRailsアプリを作るなら
$ cd ~/Study/Rails1
$ rbenv exec gem install rails
$ rbenv exec rails new myapp
$ cd myapp
$ rails server
みたいな感じかと。

2015年4月6日月曜日

TeX on Yosemite

あー、大切なTeX環境が動かないということで。TeX環境を作りましょう。

1. http://tug.org/mactex/ からMacTeXをダウンロード。Yosemiteだとインストールで障害が出たりするよとか書いてあって怖い。 ghostscriptになんかあるらしいけど、とりあえずインストールする。

2. PATHとMANPATHは勝手に通るという噂だが通っている気がしないので.zshrcに
export PATH=$PATH:/usr/texbin
を追加。MANPATHはとりあえず放置。

3. TeX Live Utilityを起動して更新をかける。そうするとエラーになるので、メニューから「更新があるか確認」を実行。その後もエラーメッセージが出たりするので、深く考えずにTeX Live ユーティリティを再起動してもう一度更新をかけると、そのうち文句を言わなくなる(Yosemiteの問題という噂)。多分、大丈夫だと思う。

4. texmf.cnfの編集
$ kpsewhich -var-value TEXMFLOCAL
/usr/local/texlive/texmf-local
$ sudo vi /usr/local/texlive/texmf-local/web2c/texmf.cnf
shell_escape_commands = \
bibtex,bibtex8,bibtexu,upbibtex,biber,\
kpsewhich,\
makeindex,mendex,texindy,xindy,\
mpost,upmpost,\
repstopdf,epspdf,extractbb
$ sudo mktexlsr

5. ヒラギノフォントを使えるように設定。https://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Mac#i9febc9bを参照。PDFへの埋め込みも可能にしておく

6. sudo kanji-config-updmap-sys status で埋め込まれるフォントを確認しておく

7. MacTeXで入るghostscript(9.10)だとeps fileが表示されないそうなので、新しいバージョンのものを入れる。ダウンロード先はhttp://pages.uoregon.edu/koch/
最新は9.16だった。

8. TeXShopを起動して、環境設定をする。値はhttp://uenohara.hatenablog.jp/entry/2014/02/02/224140を参考に。

[書類]

  • [設定プロファイル]
    • pTeX(ptex2pdf)
  • エンコーディング
    • Unicode(UTF-8)


[内部設定]

  • [pdfTeX]のTeX
    • pdftex --file-line-error --synctex=1
  • [pdfTex]のLaTeX
    • pdflatex --file-line-error --synctex=1
  • [TeX+dvipdfmx/TeX+dvips+distiller]のTeX
    • ptex2pdf -e -ot "-synctex=1 -file-line-error"
  • [TeX+dvipdfmx/TeX+dvips+distiller]のLaTeX
    • ptex2pdf -l -ot "-synctex=1 -file-line-error"
  • [BibTeXエンジン]
    • pbibtex

このあとbrew doctorをやったら/usr/local/share/man/deのパーミッションエラーが出たのでchownした。なぜ、そこだけなんだ...