EmacsでC言語モードのタブ幅を設定する
苦しんだのでメモ。
TL;DL
c-basic-offset
の設定も試してみるとよい。
経緯
最近Emacsを使い始めようといろいろ環境構築している。
TAB入力で半角スペース4文字幅でインデントをいい感じにしたい、tab-width
を4
に設定してもきかない。
結論として次のようにinit.el
に書いたらうまくいった。
(add-hook 'c-mode-hook '(lambda() (setq c-basic-offset 4) (setq tab-width 4) (setq indent-tabs-mode nil)))
c-basic-offset
を書かなかったらずっと動いてなかった。
tab-width
設定してもうまく動かなかった場合は試してみるといいと思います。
このページを参考にしました。
AWS CloudFormationについて
AWS SAAの勉強をしています。 AWS CloudFormationについてわからなかったので調べたことをメモ
概要
AWSでインフラを構成する場合は、EC2を作って、AutoScalingグループを構成してELBをアタッチして……のように、AWS マネジメントコンソール?上でどのようなインフラを作って行く。 ただそれだと面倒だし、間違いが入る余地があるので、インフラをJSON/YAMLで定義してコード管理しましょう~という目的のもの。 利用料金はかからない。(構成したAWSリソースの料金はかかる)
AWS ClourFormationで使うインフラの定義をテンプレートという。 複数のAWSアカウント、複数のリージョンで管理できる。
AWS Cloud Development Kit(AWS CDK)
Cloud FormationはJSONかYAMLでインフラを定義するものだけれど、AWS CDKではTypescript、Python、Java、.NETでクラウド環境を定義できる。
おわり
ホントはもっとあるんだろうけど一旦ここまで。
AWS Directory Serviceについて
SAAの勉強をしています。 AWS Directory Serviceについて調べたのでメモ
概要
MicrosoftのActive Directory Domain Service(AD DS)の仕組みをAWSで利用できるようにしたもの。 AD DSは、オンプレミスで動作するディレクトリサービスのこと。コンピュータネットワークのユーザやコンピュータ資源を管理する機能を持っていて、これを使ってSSO(シングルサインオン)や、アカウントの集中管理ができたりする。
AWS Directory Sericeでは、Directory Seriviceの仕組みを使って、AWSリソースへの認証認可を提供したり、オンプレミスで使用していた認証情報と統合するとができる。 マネージド・サービス。
ディレクトリタイプ
AWS Managed Microsoft AD
Microsoft Active DirectoryをAWSのマネージドサービスとして提供するもの。AWSの中で実際にディレクトリサービスを動かすのがこれ。 オンプレミスのデータセンターを廃止したい場合はこれ?
AD Connector
オンプレミスで動くMicrosoft Active Directoryにリダイレクトして認証認可を行うサービス。こっちはAWSの中でディレクトリサービスは動いていない。 既存の認証情報を使ってWorkSpaces、Amazon WorkDocs、AmazonWork Mailなどにログオンできる。 既存の認証情報を使うので、既存のセキュリティポリシ(パスワード有効期限、パスワード履歴など)がAWSサービスへのアクセスでも適用される。 既存のMicrosoft Directory Serviceを動かし続けたい場合はこっち?
おわり
またなにか調べたら追加します。
参考文献
Amazon DynamoDBについて
AWS SAAの勉強をしています。 Amazon DynamoDBについて調べたことをメモ。
Amazon DynamoDBの概要
フルマネージド、サーバーレスのkey-value NoSQLデータベース。 NoSQLなので、SQLは使えない。セッションデータやユーザデータの保存に向いているらしい? key-valueもドキュメントデータモデルもサポートしている。なので、リレーショナルデータベースのように、データ構造が変わったときにテーブルを再定義しなくて良い。 データはすべてデフォルト暗号化される。オンデマンドバックアップで、ユーザが任意のタイミングでバックアップを作り出したり復元できたりする。
key-valueデータストア
キーと値の組み合わせでデータを管理するデータベース。 値には複雑なオブジェクトでもよい。ハッシュテーブルをイメージすれば大体あってそう。 セッションデータストアに向いている。一意のセッションIDに対応して、ユーザプロファイルやメッセージ、その他のデータなどを保存できる。ショッピングカートにも向いている。
ドキュメントデータモデル
JSONのようなドキュメントでデータを管理するデータベース。JSONをそのまま突っ込めるので、アプリケーションの構築が容易? カタログデータベースとか、コンテンツ管理に使える。
DynamoDBのいろいろな機能
機能と言うか、出てきた単語についてずらずらと書く。
オンデマンドモードと読み込み/書き込みキャパシティーモード
DynamoDBの使用率が予測不能な場合はオンデマンドモードを選択して利用すると、自動でキャパシティーを調節してくれる。もちろん支払いは使用した分だけ。 逆に読み込み/書き込みキャパシティーモードは、使用するキャパシティがわかっているときに指定する。同じキャパシティで使用した場合は、オンデマンドモードのほうが高くつく。
DynamoDB Accelerator(DAX)
よく出てくるDAX。こいつはフルマネージドのインメモリキャッシュを使う。読み取りパフォーマンスを向上させる場合に使う。既存のDynamoDB APIコールと互換性あり。……DynamoDBとは別ってこと?
調べてみると、DynamoDB + DAXを使う場合は、アプリケーションはDAXへアクセスし、CACHEにデータが有る場合はそれを、そうでない場合はDAXがAmazon DynamoDBにアクセスして、データを取ってくるみたい。 Application <-> DAX <-> Amazon DynamoDBのイメージ。
「キャッシュを使うから早いよ」という利点と、「キャッシュに溜め込む機能はAmazonで用意するよ」という嬉しさが有る。
DAXとElastiCacheの違い
そういえばElastiCacheもインメモリキャッシュで(NoSQLみたいな単語が出てきてた)な、と思って調べたら、わかりやすい記事があった。
- 可用性やセキュリティのためにDynamoDBのほうが遅い。
- DynamoDBはリクエストのたびに課金されるので、時間単位課金のElastiCacheの方がコストを抑えられる。
- DAXはVPC内に置かないといけない、書き込んでもすぐに反映されない、などのマイナスが有る。
DynamoDB + DAXよりも高速に通信したい場合はElastiCacheを使ったほうがいいらしい。 各VPCにDAXを置かないといけないなら高くついちゃう?
グローバルテーブル
複数リージョンにアプリケーションを展開している場合に、リージョン間のデータのレプリケーションを可能にする機能。 リージョン間でデータの同一性が保たれるので、いちいち別のリージョンにデータを見に行く必要がなくなる、うれしい!
DynamoDB ストリーム
DynamoDB内のテーブルが項目レベルで変更されたときに、その変更を時系列でキャプチャする機能。 これによって、例えばDynamoDBへの変更を他のアプリケーション等に共有することができる。 ストリームを読み取るには、DynamoDBストリームエンドポイントに接続して、APIリクエストを発行する必要がある。 DynamoDBストリームのデータ保持期限は24時間。24時間を超えたデータは削除される可能性がある。(可能性だけ?) なお、ストリームデータを手動で削除する手段は用意されていない。24時間経つまで待つ必要がある。
DynamoDB トランザクション
DynamoDBテーブルに対するオペレーションに対応して、なにか処理をして保存したりできるらしい。
おわり
他にもあったら書き足していきます。
Amazon Kinesis Data StreamsとAmazon Kinesis Data Firehoseの違い
AWS SAAの勉強をしています。 問題を解いていると、Amazon Kinesis Data StreamsとAmazon Kinesis Data Firehoseがよく出てくるのでメモ。
Amazon Kinesis とは?
クリックデータのような大量のデータのストリーミングをうまいこと処理するためのサービスっぽい。 Webページやアプリから送信したデータを一旦Amazon Kinesisで受け取って、処理したいEC2なりLambdaなりに流していく。 いきなりEC2とかに流すのが結構難しいので、それをAmazon提供のサービスでよしなにやりますよ、ということらしい。 aws.amazon.com
そのなかでも、特にデータの配信というところに目を向けると、Amazon Kinesis Data StreamsとAmazon Kinesis Data Firehoseがよく出てくる。
この2つが比べられやすいので忘れちゃってたが、Amazon Kinesis Video Streamsというサービスも有る。 こいつは特に動画のストリーミングに特化したサービス。 VideoChatツールを作るときに使えたりするんだろうか……?
Amazon Kinesis Data Streams
アプリケーションやサービスのログや、クリックデータなどを受け取って、データレイクに送りつけることができる。 その際にAWS LambdaやAmazon Kinesis Data Analyticsと連携して、データを同時に分析することもできる。 フルマネージドのサーバレスサービス。 リアルタイム性を重視する場合はだいたいこっち。
Amazon Kinesis Data Firehose
Amazon S3やAmazon Redshiftなどにストリーミングデータを配信するためのサービス。フルマネージド。 Amazon Kinesis Data Streamで集めたストリームデータを、Firehoseがうまいこと配信してくれる役目? (Data Streamはデータを集めるためのもの、Data Firehoseは集めたデータを配るためのもの)
AWS AppSyncについて
AWS SAAの勉強をしています。 AppSyncがよくわからなかったので調べたことメモ。
AppSyncとは?
まずはAWS公式の概要を見てみます。
サーバーレスな GraphQL と Pub/Sub API を使用してアプリケーション開発を加速する
AWS AppSync は、サーバーレスの GraphQL および Pub/Sub API を作成し、単一のエンドポイントを通じて安全にデータの照会、更新、公開を行うことで、アプリケーションの開発を簡素化します。
よくわからないですが、GraphQLとPub/Sub APIを使う技術みたいです。 あたらしくわからない単語が出てきました。GraphQLとPubSub/APIです。 つづいてこれも調べて見ます。
GraphQLとは?
GraphQLはFacebook社が開発したWeb APIの規格。クライアントがリクエストしたデータのみを返します。 従来利用していたREST APIでは、必要のないデータまで取得してしまうため、速度が遅くなる・メモリ消費が増えるなどの原因になっていた。 一方GraphQLでは、本当に必要なデータのみをリクエストする。イメージとしては、欲しいデータのリクエストをクエリ言語で記述して、対応するデータを取得する。SQLとその結果のような対応関係?
Pub/Subとは?
メッセージ(テキスト、動画、音声など各種データ)を出すパブリッシャーと、メッセージを受け取る人のサブスクライバーが登場人物。 パブリッシャーは、サブスクライバーのことは何も考えずにトピックにメッセージを送信する。サブスクライバーは、自分が欲しいメッセージを受け取るトピックに登録してメッセージを受け取る。
メッセージの送信としてみたとき、送信者と受信者がハンドシェイクしなくてもデータのやり取りをできるようにした仕組みのこと? すべてのメッセージの送信に対して、同期を取らなくて良くなれば、並列的に動くこともできて、処理の高速化が望める。 aws.amazon.com
メモ:GRAPH QLを知るのに使えそうなサイト
2022年の振り返り
2022年の振り返りをします。
作ったもの、触ったもの
- コンピュータシステムの理論と実装をやった。HDLから初めて、NANDの組み合わせでCPUを作り、アセンブラ、仮想マシン、コンパイラを作っていくというもの。とりあえず動くコンパイラっぽいものができて非常に感動した。
- 低レイヤを知りたい人のためのCコンパイラ作成入門もやった。低レイヤに入門したきっかけ。今までに何度か挫折してたけど、今回の挑戦はかなりいいところまでいけた。GCCのプリプロセスの出力と、自作プリプロセッサの出力が一致するところまでできた。セルフホストまで行きたい~けど中断中。コンパイラを書いたことで、デバッグ時のアセンブラの読解が怖くなくなったし、バグの一次情報として規格(ネットに会ったドラフトのだけど)をもとに喋れるようになった。
- ゼロからのOS自作入門は今やっている。写経してるだけだけど、それでもOSの基本的な仕組みのイメージが尽くし、やってよかった。ソフトの動きを追っていて、前よりもOSの気持ちを考えれるようになった。
- VSTOを使ったアドインを作った。業務でらくするのに使用している。VBAでリボンマクロを組むよりもライブラリが豊富だし、使えるようになってよかった。日本語の情報が全然ないので作るのに苦労した。MicrosoftOfficeから逃げ出したいけど、仕事で使っているので仕方なく…。
触った技術
C、C++、Zig、C#、Powershell、OpenGL
Github
去年と比べてコミット数が10倍になった。来年も楽しんでいきたい。