bookmark_borderUSBメモリの使用を禁止、制限する方法 [Windows 10 Home][レジストリ]

USBメモリの使用を禁止または制限する方法を検索すると「グループポリシー」を操作する手順がヒットすることがありますが、Windows 10 Proの機能のためHomeでは使えません。Windows 10 Homeでは別の方法を取る必要があります。

実施の前に

レジストリを操作します。念のため変更を行う前にシステムのバックアップを取得してください。ご参考にされる場合は自己責任にて。

手順

1. Windows + R キーで「実行」ウィンドウを起動する

2. regedit と入力し、OK ボタンをクリック

レジストリエディタを起動します。

3. 画面左側で USBSTOR を探し、クリック

USBで接続されたストレージデバイスへの読み書きの許可を設定する項目です。

HKEY_LOCAL_MACHINE
┗ SYSTEM
  ┗ CurrentControlSet
    ┗ Services
      ┗ USBSTOR

4. 画面右側の Start の項目をダブルクリック

5. 「値のデータ」に 4 と入力し、OK をクリック

恐らく既に 3 が設定されているので、 4 と上書きします。

6. レジストリエディタを閉じ、PCを再起動

これでUSBメモリデバイスの使用が禁止されます。


戻したいときは

USBメモリの使用を再度許可したい場合はもう一度上記の操作をし、Start の値を4から 3 に変更してください。

手順

上記1~4の作業を行う。

5. 「値のデータ」に 3 と入力し、OK をクリック

3 で読み込みと書き込みが許可され、4で禁止になります。

bookmark_border[Mac] Excelが重い・固まるときはこうする

最近Mac版Excelで動作がひどく重いことがあり、調べたところフォントの重複解決やライブラリから設定ファイル削除といった情報が出てきて試したものの全く効果がなく困り果てていました。

そんなこんなであれこれ試しているうちに効いた対処法をメモ書きとして残します。極めて簡単です。


1. セルを全選択する

Excelを開き、対象となるシートを選択したら、シートの左上角のセルをクリックするか command + A で全てのセルを選択します。

2. フォントを「MS Pゴシック」に変更する

セルのフォントを「MS Pゴシック」に変更します。

上部のメニューバーにある「書式」から「フォント」を選択し、「MS Pゴシック」を選ぶか、ツールバーのフォントメニューから直接選択します。意外かもしれませんが私はこれでとんでもない重さから開放されました。

実を言うと「MS Pゴシック」以外のフォントでもいけることが確認できています。(「M+font」など)

私はPythonで出力した50-60KB程度のExcelファイルが大変重く、Arialが設定されていたのでそれを別のフォントに変えたところ問題なく動作するようになりました。


Mac版Excelの動作が重たく感じる場合、Font Bookでの重複解決や設定ファイル削除を試す前に、まずはフォントの変更をおすすめします。皆様の快適なExcel作業の一助となれば幸いです。

bookmark_border結局サーバーレスとは一言で說明すると何なのか

多くのサイトでサーバーレスについてさまざまな説明や定義がありますが、自社製品の宣伝がベースだったり実例紹介が長いものだったりとわかりにくいものも多いので簡潔に説明する試みです。


※筆者はAWS Lambdaユーザーですが、簡潔な說明に振れたため個人的解釈が含まれているかもしれない旨ご了承ください。


結論

アプリ開発者がサーバの運用・管理を意識せずにアプリケーションを実行・拡張できるクラウドコンピューティングの仕組み・考え方のこと。サーバーが存在しない仕組みのことではない。

よく聞く AWS Lambda、Azure Functions、Google Cloud Functions とは何なのか

サーバーレスの仕組み・考え方を実際に実現したクラウドサービスの名称です。

これらのサービスを使うと例えば「このURLにアクセスがあったらこのPythonの関数を実行して」という設定をブラウザ上で行なえます。アプリ開発者はその「URL」と「Pythonのコード」の設定をブラウザ上でぽちぽちするだけで良いのです。

アプリ開発者はOSやWebサーバー、Pythonなどのインストールや設定をスキップしていきなりPythonなどのコードをサーバーに実行可能状態で配置できます。

コードは結局LinuxなどのOSの上で動くわけですが、アプリ開発者側が「サーバーの存在を意識しなくてもすぐサービスを開始できる」のがサーバーレスの趣旨です。(つまり「サーバー」が意味するのは、本来保守が必要なOS, その他基本的なアプリケーションなどのことです。Python以外の言語ももちろん実行できます。)

飛び交っている様々な說明の意味

サーバーレスについて説明するサイトでは概ね以下のような要点が説明されています。

インフラ管理の手間が省ける

意味:本来であれば自前のサービスを世界に公開したい場合、Linuxがインストール済みのマシンを借りて(AWSではEC2など)、自分でOSやWebサーバの設定をして… という作業が必要です。でもサーバーレスの概念を踏襲したAWS Lambdaなどのサービスを使うことでそれをスキップできます。

イベント駆動型

意味:例えばAWS Lambdaでは、AWS Lambda上で自分が書いたPythonのコードのどの関数をどんなタイミングで実行するかを設定できます。例えば「特定のURLにアクセスがあったとき」「特定のデータベースに変更があったとき」などです。「〇〇のとき」のことを「イベント」や「トリガー」と言います。

拡張性が高い

意味:AWS Lambdaをはじめさまざまなサーバーレスのサービスでは、利用者の数が増えてもコードがスムーズに動作するよう、実行するマシンの性能をアップする機能を使えます。まさに、アプリ開発者にサーバーを意識させない「サーバーレス」の概念の恩恵です。

コスト効率が良い

意味:コンピュータを間借りするサービスは契約期間中ずっと、またはコンピュータが起動している時間に対して課金されるのが普通です。しかしサーバーレスのサービスは原則、実際に使用されたリソースに対してのみ課金されます。あまり利用者がいないけど維持費だけがじわじわかかり続けるという事態への対策として有効です。

これらの説明は、サーバーレスが提供する利点や特性を示しています。しかし、これらの情報だけでは「サーバーレスとは何か」という本質的な意味を完全に理解するのは難しいこともあるため、各点を深く理解することが重要です。

サーバーレスの思想

もちろんデータベースと接続したり、他のAPIを叩いたりとし始めるとできることは無限に広がります。

「サーバーレスを使ってこんなサービスを開始しました!」という話でシステムの構成図などを見ると複雑に見えることもありますが、サーバーレスのベースにある考え方はシンプルです。

それは「アプリ開発者をOSやWebサーバーなどの面倒な設定から開放し、『このタイミングでこのコードを実行する』という設定だけでサービスを公開できる世界を提供する」ことです。

bookmark_borderPLA, TPU, ABS, PETG の違い・どれを選べばいいのか [3Dプリンター フィラメント]

3Dプリンターのフィラメントの素材で迷うことがあるのでメモ書きです。

PLA(ポリ乳酸)

それなりの強度があり、安価で初心者でも扱いやすい。とりあえず何か出力したい・プロトタイプを作りたいとき向け。

コスト比較的安価
特性やや硬め。生分解性があり環境に優しいとされる
強度中程度の強度で、剛性が高い
印刷温度180-220℃
欠点高温に弱く、長期間の耐久性に劣る

TPU(熱可塑性ポリウレタン)

やわらかめ。靴底、スマホケースなど向け。

コストやや高価
特性柔軟で伸縮性がある
強度強くて耐摩耗性が高い
印刷温度220-250℃
欠点印刷が難しく、特定のプリンターや専門の経験が必要な場合がある

ABS(アクリロニトリルブタジエンスチレン)

耐久性が強い。機械部品など向け。

コストやや高価だがPLAほどではない
特性PLAよりはやわらかめ。加工しやすい。耐衝撃性、耐久性、耐熱性がある
強度強い
印刷温度210-250℃。ヒートベッドが必要な場合がある
欠点臭いがきつく、換気が必要。印刷が難しい場合がある

ABSは冷却時に収縮する性質があるため、ヒートベッドが特に必要とされる。(ヒートベッドはプリント物の底部を一定の温度に保つ機能や部品のこと)

PETG(ポリエチレンテレフタラートグリコール)

強度が高く、紫外線耐性がある。食品容器、屋外用部品、機械部品など向け。

コストやや高価だがPLAほどではない
特性PLAとABSの中間的な特性。柔軟性、耐候性と化学耐性を併せ持つ
強度高い
印刷温度220-250℃
欠点PLAよりもベッド表面に強く付着することがあり、印刷難易度が高い

bookmark_borderPythonの or は「または」ではない

単にTrueかFalseを返す演算子ではない

Pythonの or は「または」の意味だと說明されることがあります。

x = 10

# x は 10 または 20
if x == 10 or x == 20:
    print("xは10か20です")

# 実行結果:xは10か20です

しかしこのコードの実行結果を見ると、 or は単なる「または」ではないことがわかります。

a = False
b = 123
print(a or b)

# 実行結果: 123
# Trueではない

じゃあ何なのか

公式ドキュメントには下記の說明があります。

式 x or y は、まず x を評価します; x が真なら x の値を返します; それ以外の場合には、 y を評価した結果値を返します。

docs.python.org – 6. 式 (expression)

オブジェクトを返す演算子

or は両端の値のうち、 最初にTrueと評価される値 を返します。

true_value_1 = 100
true_value_2 = 200

print(true_value_1 or true_value_2)

# 実行結果: 100

# true_value_1 or true_value_2 の中で、
# true_value_1 が最初にTrueと評価される値である → 100

両方がFalseと評されるなら、右側の値を返します。

false_value_1 = False
false_value_2 = 0
print(false_value_1 or false_value_2)

# 実行結果: 0

# false_value_1 or false_value_2 の中で、Trueと評価される値はなかった。
# false_value_2 が右側の値である → 0

※より正確には、返されるのは「値や式の評価結果」です。

つまりどういうことか

or が返すのは or の両端の値のどちらかです。どちらが返されるかは、その両端の値がTrueとFalseどちらに評価されるかによって決まります。

Pythonの or はJavaなどの言語と異なり、真偽値(True, False)しか受け取れない演算子ではありません。あらゆる値をオペランドに(つまりorの両側に)持つことができます。

つまり先に登場したif文は厳密に言うと下記の流れをたどっているということです。

x = 10
if x == 10 or x == 20: 
# ↓ 
# if True or False: # or の両端の式がまず計算される
# ↓
# if True: # orの左側の値がTrue。よってorは左側の値のTrueを返す
    print("xは10か20です")

# 実行結果: xは10か20です

両方ともFalseとなる場合は下記のとおりです。

x = 100000
if x == 10 or x == 20: 
# ↓ 
# if False or False: # or の両端の式がまず計算される
# ↓
# if False: # orの両端がFalse。よってorは右側のFalseを返す
    print("xは10か20です")

# 実行結果: (何も出力されない)

どう役立つのか

関数の引数のデフォルト値

関数の引数に偽と評価される値 (None 0 "" など)が渡された場合のデフォルト値を設定できます。

def greet(name=None):
    name = name or "Guest"
    print(f"Hello, {name}!")

greet()  # 出力: Hello, Guest!
greet("Alice")  # 出力: Hello, Alice!

PHPの言語でサポートされているNull合体演算子の代わりのように使えるということです。

hoge = None

# if hoge is None:
#    hoge = "Hello World!"
# ↑↓同じ実行結果
hoge = hoge or "Hello World!"

print(hoge)

# PHPのNull合体演算子に近い
# $hoge = $hoge ?? "Hello World!"

例えばどんなところで役立っているのか

Django(PythonでWebアプリケーションを作るときに使われる、代表的なフレームワーク)でFormのオブジェクトを生成する際は下記のように書くのがお約束です。

form = Form(request.POST or None)

request.POST or None は、 request.POST に値が入っていれば下記のように評価され、

# request.POST に値が入っている場合(Trueと評価される場合)
form = Form(request.POST)

request.POST がFalseと評価される(値が無いなど)場合は下記のように評価されるということです。

# request.POST がFalseと評価される場合(値が入っていないなど)
form = Form(None) # Form() と同義

参考:Logic behind Form(request.POST or None) – StackOverflow