masalibの日記

システム開発、運用と猫の写真ブログです

浮気がばれた・・・

なんでだろう・・・

すぐにバレた。

違う娘の匂いがするって・・・おかしいな~結構な時間が立っているだけど

だって可愛かったんだよ・・・

猫カフェの猫

ということで猫カフェに行って浮気をしてきました。

なぜか猫どもにバレてしまい「くんくん」がしつこい!!いつもは帰ってくるとすぐに撫でてと甘えるのにそれもない。

f:id:masalib:20200605022924j:plainf:id:masalib:20200605022931j:plainf:id:masalib:20200605022936j:plainf:id:masalib:20200605022941j:plainf:id:masalib:20200605022946j:plainf:id:masalib:20200605022950j:plainf:id:masalib:20200605022956j:plainf:id:masalib:20200605023000j:plainf:id:masalib:20200605023007j:plainf:id:masalib:20200605023012j:plainf:id:masalib:20200605023018j:plainf:id:masalib:20200605023023j:plainf:id:masalib:20200605023029j:plainf:id:masalib:20200605023034j:plainf:id:masalib:20200605023039j:plainf:id:masalib:20200605023045j:plain

最終的にはちゅーるで誤魔化した。

Deno.landで環境変数を使う

前回,MYSQLの接続のプログラムを書いたのですが、パスワードとかをソースに書くのは普通はしないです。なのでデプロイも考慮して環境変数に接続情報を記載します。参考にしたのがHerokuにアップするWEBアプリケーションだったのでコマンドベースです。ファイルでの環境変数の設定もあるのですが、自分もherokuにアップする予定なので今回は使いません

続きを読む

Deno.landでhttpサーバーを立てる

Hello Worldでサーバーは立てているのですが これはちょっと違う。ということで node.jsと言ったらexpressでしょ!!

expressやkoaに影響をうけたoakを使っていきます

import {Application,Router} from "https://deno.land/x/oak/mod.ts";

const port =  5000 
const app = new Application()
const router = new Router()

app.use(router.routes())
app.use(router.allowedMethods())

router.get('/hello', ({response}: { response: any }) => {
  response.body = 'Hello World '
} )

console.log(`Server Running on port ${port}`)

await app.listen({port })

実行には--allow-netが必要です

deno run --allow-net simpleServer.ts

router部分がexpressっぽい!!

ちなみに存在しないアクセスの場合は404になるみたい

apiっぽい使い方をしたいので今後は postmanというアプリケーションで確認します

www.postman.com

postmanはapiサーバーを作る時に便利なのでオススメ

Deno.landでのファイルの読み書き

読み書きと書いてあるのですが書きからです

ファイルの書き込み

const encoder = new TextEncoder()
const greetText = encoder.encode("Hello World\nMy Name is Masalib")
await Deno.writeFile("greet.txt", greetText)    
  • ファイルに書き込むには、Deno.writeFileを使います。
  • 第2引数には[Uint8Array]しか渡せないため、文字列は[TextEncoder]でエンコードする必要があります。
  • 実行する時には「--allow-write」が必要です
deno run --allow-write createFile.ts 

これは公式が書いてある

明示的に有効にしない限り、ファイル、ネットワーク、または環境へのアクセスはありません。

のためです。
ちょっとめんどくさいけどセキュリティー的にはいいかも

ファイルの読み込み

let file = await Deno.open("greet.txt")
await Deno.copy(file,Deno.stdout)
file.close

https://qiita.com/niwasawa/items/a4e695c4a5ecd8ce69f1 にはDeno.copyを使うみたいな事が書いてあるのですが現実的なのは変数にいれる事なので

const result = await Deno.readFile("greet.txt");
const dec = new TextDecoder("utf-8");
const text = dec.decode(result);
console.log(text);
deno run --allow-read readFile.ts

書き込みと同様に「--allow-read」が必要です

読み書き時に[TextEncoder]でエンコードやデコードするのがめんどくさいな~

参考URL
https://scrapbox.io/deno-ja/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80

今流行りのDeno.landに入門してみた

フロントエンド側とバックエンド側でちょっと有名になった言語があるのですが言語と言うかシステムなのですがdenoというものがあります.

コンセプトとしてはnode.jsの弱点を補った形らしいのですが私はあまり触ったことがないので入門してみたいと思いました。

Denoは、V8を使用し、Rustに組み込まれた、JavaScriptとTypeScriptのシンプルでモダンで安全なランタイムです。

  1. デフォルトで保護します。明示的に有効にしない限り、ファイル、ネットワーク、または環境へのアクセスはありません。
  2. そのままの状態でTypeScriptをサポートします。
  3. 単一の実行可能ファイルのみを出荷します。
  4. 依存関係インスペクター(deno info)やコードフォーマッター(deno fmt)などの組み込みユーティリティがあります。
  5. Denoでの動作が保証されている一連のレビュー済み(監査済み)標準モジュールがあります:deno.land/std

上記は本家からの引用になります

実際に触ってみてなのですが

  1. node.jsと違って NPM というのでインストールすることはしないんでその都度サーバーからインストールするという方式をとっています。
  2. node.jsのコールバック地獄ないみたいなので本当にうれしい
  3. 今流行りのTyepscriptを標準として使えるのもいいところです。 型宣言できるというのはjava系のバックエンド側やってる人には非常にありがたい

環境的にはWindows10です。 何も問題なくインストールできました。 (念のために管理者権限で実行しています)

iwr https://deno.land/x/install/install.ps1 -useb | iex

いつもどおりHello Worldは超カンタン

deno run https://deno.land/std/examples/welcome.ts

さすがにこれだと・・・Hello Worldっぽくないので

import { serve } from "https://deno.land/std@0.54.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
 req.respond({ body: "Hello World\n" });
}

入門する前に必ず入れて欲しい vscode の拡張があります

marketplace.visualstudio.com

こちらをインストールするとコードの補完してくれると言うのが便利です。 補完するにはモジュールのダウンロードする必要があります。

そのため、新しいモジュールをインポートする時は この状態で

import { serve } from "https://deno.land/std@0.54.0/http/server.ts";

で deno run xxxx.tsをする必要があります。 インストール(キャッシュ)しないと補完してくれないのはちょっとめんどくさいかな・・・

インストール前 f:id:masalib:20200531235042p:plain

インストール後 f:id:masalib:20200531235100p:plain