寝る前の習慣ちょっと変えてみた

こんにちわ。

起きた習慣から寝る直前まで触っているもの。
それは【スマートフォン】

寝る前のスマホは良くないと知っていても眠くなるまでなんとなく触り気づいたら数十分経っていた。という毎日でした。
この前は顔にスマホを落とし頬にアザができました。(おバカですね)

睡眠の質が悪くなるし辞めなきゃな〜と思っていたときに、買い物を行った先で書店員さんのオススメの本を見かけ、本を読めば少しはスマホ離れできるんじゃないかと買ってみました。
余談ですが、憧れの田中みな実さんも快適な睡眠のため寝る2時間ほど前からスマホは触らないと言われていました。

2冊買ったのですが、今読んでいる本は「仕事と人生に効く 教養としての紅茶」です。

紅茶は好きでよく飲むのでこの本を買ったというのもあるのですが、紅茶の歴史や各国のお話などが出てきて面白く一章がちょうど寝る前に読むのにいいページ数なので素敵な本を知れてよかったです。
今よりもっと自由に海外へ行けるようになったらロンドンのトワイニング本店へ行ってみたいなと思いました☕
書店員さん素敵な本をオススメしてくださりありがとうございます📕✨

私だけかもですが、寝る前に活字を読むといい感じに眠くなるのも新たな発見でした。
最近は本を電子書籍で読む事が多いのですが、たまには本屋さんへ行き本を買いたいと思います。

もう1冊も読むの楽しみです☺


WebAssemblyを使ってRubyプログラムをWASIアプリケーションとしてブラウザ外で動かす

はじめに

前回の記事ではRubyプログラムをブラウザ上で動かしてみました。今回はRubyプログラムをブラウザ外でWASIアプリケーションとして動かしてみます。Rubyの実行環境込みでパッケージングすることで、可搬性のある配布物を作ることができます。

WASIパッケージを作る

ruby.wasm のページが参考になります。
Dependencies のところに書かれている wasi-vfs と wasmtime を先にインストールします。

wasi-vfsのインストール

wasi-vfs のサイトの Installation の通りです。

$ export WASI_VFS_VERSION=0.4.0
$ unzip wasi-vfs-cli-x86_64-unknown-linux-gnu.zip
$ sudo mv wasi-vfs /usr/local/bin/wasi-vfs

wasmtimeのインストール

wasmtime のサイトの Installation の通りです。

$ curl https://wasmtime.dev/install.sh -sSf | bash

WASIパッケージを作る

まずビルド済の ruby.wasm をダウンロードして展開します。

$ curl -LO https://github.com/ruby/ruby.wasm/releases/latest/download/ruby-3.2-wasm32-unknown-wasi-full.tar.gz
$ tar xfz ruby-3.2-wasm32-unknown-wasi-full.tar.gz
$ mv 3.2-wasm32-unknown-wasi-full/usr/local/bin/ruby ruby.wasm

実行対象のRubyプログラムを作ります。

$ mkdir src
$ echo "puts 'Hello, World!'" > src/my_app.rb

wasi-vfs でパッケージングします。

$ wasi-vfs pack ruby.wasm --mapdir /src::./src --mapdir /usr::./3.2-wasm32-unknown-wasi-full/usr -o my-ruby-app.wasm

実行

wasmtime を使って実行します。実行対象のRubyプログラムをパッケージ内のパスで指定します。

$ wasmtime my-ruby-app.wasm -- /src/my_app.rb
Hello, World!

ヨーロッパ旅行で気をつけること

冬季休暇を利用してヨーロッパ(イタリア、ドイツ、スイス)の3カ国を旅行しました。旅行中に事前に知っておけば役立つと感じたことがいくつかあったので、紹介します。

ヨーロッパのトイレは有料

ヨーロッパの多くのトイレは有料で、利用するためには1ユーロ(2024年1月現在、約160.75円)が必要です。多くのお店でクレジットカードが使えるので、現金を持たずに済むかと思いきや、トイレ利用の際には小銭が必要なので少額でも持っておくことをおすすめします。なお、有料の観光施設内には無料のトイレがあることも多く、そこで済ませると余計な出費を抑えられます。


旅行中にあったドイツのトイレ
1ユーロ硬貨を入れるとゲートが開き、トイレに入れる仕組みです。

駅に自動改札がない

日本のような自動改札がなく、有人改札もありません。代わりに不定期に車内で検札が行われます。また、乗車券は購入後、駅の構内に設置された打刻機で乗車前の日時を刻印し、初めて有効化されます。打刻されていないチケットは不正乗車とみなされ、高額の罰金が科せられることも。。。オンラインで購入したチケットは打刻不要ですが、駅の券売機で購入した場合は必要なので忘れず打刻を行いましょう。

交通機関がストライキで運行中止になることがある

電車や地下鉄などがストライキでストップすることがあります。私がイタリアからドイツへ夜行列車で移動する予定だった当日の夕方に、運行中止の連絡がメールで届きました。
https://news.yahoo.co.jp/articles/c0bc857f91366e4299db7bcbf4a95505d983577d
↑運悪くこのニュースでも取り上げられていたドイツでのストライキに巻き込まれた形です。
急遽夜行バスを予約して目的地に到達することができましたが、旅行前や、当日乗る予定の便に変更がないかチェックすることをおすすめします。

まとめ

ヨーロッパには魅力的な場所がたくさんありますが、現地のルールや上記のような点を知らないと困ることもありますので、事前準備が必要ですね。皆さんも良い旅を!


SwiftUI Mapkitを触る

2023年6月 WWDC2023にてMapKitが大幅に拡張されました。SwiftUIを使うことで簡単に地図アプリを作成できるとのことなので触ってみました。

Mapの表示

MapKitをinportしてMap()で表示できます。

import SwiftUI
import MapKit

struct ContentView: View {
  var body: some View {
    Map()
  }
}


mapStyle()を付与することで地図の見た目を変化させられます

Map().mapStyle(.imagery(elevation: .realistic))

他のもたくさんスタイルがあります

マップにマーカー、アノテーションを表示させる

・マーカー

Markerで表示ができます

extension CLLocationCoordinate2D{
   static let oosaka = CLLocationCoordinate2D(latitude: 34.703124622680484,longitude:135.4960062127632 )
}

struct ContentView: View {
  var body: some View {
   Map{
    Marker("大阪駅",systemImage: "train.side.rear.car",coordinate: .oosaka)
   }.mapStyle(.imagery(elevation: .realistic))
  }
}

座標はGoogleMapで調べました

・アノテーション

Viewなどを設定できます

Annotation("大阪",coordinate: .oosaka,anchor: .bottom){
  VStack{
     Image(systemName: "train.side.rear.car")
     Text("大阪駅")
  }
  .padding(10)
  .foregroundStyle(.white)
  .background(Color.blue)
  .cornerRadius(10)
}

他にもMapCircleなどがあります

 MapCircle(center: .oosaka, radius: 100)
.foregroundStyle(.indigo.opacity(0.5))

検索について

MKLocalSearch.Request()で検索ができます

struct ContentView: View {
@State private var searchResults:[MKMapItem] = []
  var body: some View {
   Map{
    Marker("大阪駅",systemImage: "train.side.rear.car",coordinate: .oosaka)
    MapCircle(center: .oosaka, radius: 100)
    .foregroundStyle(.indigo.opacity(0.5))

    ForEach(searchResults, id: \.self) {result in
      Marker(item: result)
    }
   }
   .mapStyle(.imagery(elevation: .realistic))
   .safeAreaInset(edge: .bottom)
    {
     HStack {
      Spacer()
      ButtonView(searchResults: $searchResults)
      Spacer()
     }
    .background(.thinMaterial)
    }
  }
}

struct ButtonView: View{
 @Binding var searchResults:[MKMapItem]
 var body: some View {
  Button {
   search(for:"playground")
  } label: {
   Label("Playgrounds",systemImage: "figure.stand")
  }
 }
 func search(for query: String){
  let request = MKLocalSearch.Request()
  request.naturalLanguageQuery = query
  request.resultTypes = .pointOfInterest
  request.region = MKCoordinateRegion(
  center: .oosaka, span: MKCoordinateSpan(latitudeDelta: 0 , longitudeDelta: 0 ))
   Task {
    let search = MKLocalSearch(request: request)
    let response = try? await search.start()
    searchResults = response?.mapItems ?? []
   }
 }
}

簡単に実装ができるので面白いですね
緯度経度あれば簡単に地図アプリが開発できそうでした
APIとか駆使して作ってみたいですね


Adobe Auditionを使って音源を伸ばす方法

動画を作成するときにBGMが必要なときがありますよね?フリーの素材で見つけた使いたいそのBGMが短ときはないでしょうか?そんなときはAdobe Auditionを使うと便利です。Adobe Auditionの使い方を紹介します。

動画を作成するときにBGMが必要なときがありますよね?
フリーの素材で見つけた使いたいそのBGMが短ときはないでしょうか?

そんなときはAdobe Auditionを使うと便利です。

Adobe Auditionを使うと簡単に音楽を伸ばすことができます。

音楽をループさせる方法

①音楽ファイルを開き、ファイルパネルで音源を選択して右クリックします。
「マルチトラックに挿入 > 新規マルチトラックセッション」をクリックします。

②「セッション名」や「フォルダーの場所」などを任意のものに設定しOKをクリックします。

③音源がマルチトラックになったので、その音源が選択された状態でエッセンシャルサウンドパネルから「ミュージック」を選択します。

④「デュレーション」にチェックを入れます。
保管方法を「リミックス」を選択し、「ターゲット」に必要な音源の長さを入力します。

⑤そうすると音源が自動で長くなり保管されます。白い波線部分が自動で調整された部分になります。

⑥後はお好きな方法で書き出すだけです。

いかがでしょうか?
やってみるまではややこしそうと思っていたのですが、試してみると意外と簡単にできました。
動画が必要な機会があったときにこの記事を思い出してAdobe Auditionを使ってみてください。