【小ネタ集】ちょっとした便利な技や、忘れそうになる初歩的な技術
ChatGPTなどにMarkdownのコードを出力させる方法
「Markdownで出力してください」と記載してもコードを含むようなコードがブラウザ側が勝手にレンダリングされるので、Markdown形式でコピーできるようにうまく出力することができなかったが、原因が分かった。コードを出力する際に「`」(バッククォート) 記号でコードを閉じるのだが、コードを閉じた際にそれで一つの区切りとしてしまっているのでそれ以降の文字がMarkdownからブラウザが勝手にレンダリングされている。
解決策
バッククォート以外でコードを囲むように指定する。
「Markdownで出力してください。ただしコードを囲むときは @を用いてください」
PythonとJavaScriptで文字列の先頭・末尾で文字をマッチさせるときの違い
$1.23
のように先頭に$がついて、末尾は数字で終わる数字を例として考える。
この場合 Pythonでは \A
、JavaScriptでは ^
が先頭にマッチする文字を検索、
末尾は Pythonが \Z
、JavaScriptが $
になる。
JavaScriptのほうが一般的な書き方で、Pythonの正規表現はこれ以外にも少し他の言語と書き方が異なるので注意が必要。
import re
def to_cents(value):
return int(m.expand(r'\1\2')) if re.match(r'\A\$(\d+)\.(\d\d)\Z', amount) else None
String.prototype.toCents=function(){
return /^\$\d+\.\d{2}$/.test(this) ? parseInt(this.slice(1,).replace(".","")) : null
}
JavaScriptでSetを使った時にその個数を知りたい時の実装
よくしてしまう実装として Setを一度 Array.from
を用いて 配列に変換して length
で値を取得するが、Set
オブジェクトには prototype
として size 関数が実装されている。
そのため、 new Set().size
で値が取得できる。
JavaScript で文字を一文字ずつ分割する
str.split("")
でも可能ではあるが分割代入をするには スプレッド構文を使うことができる。
[...str].map(s => 以後の処理)
文字列は一種のイテラブルオブジェクトであり、それぞれの文字は個別の要素として扱われるため、文字列を分割することができる。
Pythonでdatetimeオブジェクトから値を取り出す指定方法
Format Symbol | Description | Example |
---|---|---|
%Y | 西暦(4桁表記。0埋め) | 2025 |
%m | 月(2桁表記。0埋め) | 02 |
%d | 日(2桁表記。0埋め) | 11 |
%H | 時(24時間制。2桁表記。0埋め) | 12 |
%M | 分(2桁表記。0埋め) | 21 |
%S | 秒(2桁表記。0埋め) | 12 |
%y | 西暦の下2桁(0埋め) | 32 |
%l | AM/PMを表す文字列 | AM |
%x | 日付をMM/DD/YY形式にしたもの | 02/11/25 |
%X | 時刻をhh:mm:ss形式にしたもの | 12:11:21 |
%a | 曜日の短縮形 | Mon |
%A | 曜日 | Thursday |
%z | 現在のタイムゾーンとUTC(協定世界時)とのオフセット | +0900 |
%Z | 現在のタイムゾーン | JST |
筆者は今まで時間・分・秒のデータを取り出すのに、strftime("%H:%M:%S")
と記述していたが、strftime("%X")
で取り出し可能。また、MM/DD/YY
形式ではあるもの strftime("%x")
で日時は一気に文字列に変換できるので、分割代入を使えば一度に月・日・年が取得できる。
m,d,y = time.strftime("%x").split("/")
print(m,d,y)
FlutterでMacOSでアプリを起動するときにネットワーク処理をおこなうとき
Image.network
や Dio
などで画像を表示したりAPIでデータを表示したりするときなどの処理をおこなうとき、MacOSのデスクトップアプリで起動する際にはセキュリティの許可をファイルに記述する必要がある。
macos/Runner/DebugProfile.entitlements
のファイルに以下を追記する。
<key>com.apple.security.network.client</key>
<true/>
JavaScriptでDateを扱うときの注意点
実装例として今日の日付と誕生日の年、月、日を引数とした値で何日差があるか。生後何日かを調べる実装を紹介する。
function ageInDays(year, month, day){
const now = new Date();
const birth = new Date(year,month-1,day)
return `You are ${Math.floor((now-birth)/(24*60*60*1000))} days old`
}
注意点として、new Date(year,month-1,day)
、monthは0indexから始まるので指定の月を入力したい場合は、-1
をして考える必要がある。