Setting-Construction
2025 01 26 Emacs Setting Update
ずーーーーーっとやりたいと思っていたEmacsの設定棚卸しとアップデート、ようやく着手して一段落つきました。
何した?
1. leafの導入
なんだかわからないまま使っていたuse-packageをやめてstraight.elを導入したけど、leafがいいって聞いたので、設定をleafに書き換えた。
たくさんエラー出た。。
ちょっとでも依頼内容端折ったり適当するとChatGPTが意図しない内容返してくるのでホントに苦戦した。
たまにstraight.elならインストールできたのにleafだとインストールできないパッケージもあった。
そういうのはめんどうだから設定からスポイルした。
straight.elだとGitHubを指定してインストールできるが、leafだとそのあたりうまくいかなかった。
leafでも「:vc」キーワードがあるのだが、なんかうまくいかなかった。。
2. 各プログラミング言語用設定の整理と追加
html及びテンプレートファイル用、CSS用、JS系など既にある設定のの見直しと、今まで先延ばししていた他言語の設定ファイルを追加した。
eglot関連でまだ実際には使わないLSPのインストールは対象URLだけメモして先延ばしにした。
3. codeiumの導入
これも先延ばししていた、AIの導入。
とりあえず無料で始められるCodeiumを導入した。
Codeium + eglot + Corfu がどうもうまく連携取れていない感じだけど、ひとまず動かないこともない状態になったので一段落とした。
4. 全然分かってないこと
元々companyを入れていたのだけど、今回Corfuに変えてみた。
全く理解していないので、現在の設定でいいのかどうかも分かっていない。
困る
他の方設定を参考にしようにも千差万別の設定内容で、自分の困ってるに微妙にハマらない。
初心者や弱々な人でもこういう設定にしたい、このパッケージはこうするとよい。など見やすく分かりやすいドキュメントサイトがあればいいのになって思った。
今後
今後は実際にコーディングしながら、自分のスタイルに応じて設定を追加したい。
この記事を書いている時も、Codeiumが動いて文章提案してくるのちょっとウザい。
setting ntp on Ubuntu
EC2のUbuntu14.04にntpを設定
事の発端は、AWSのS3へのアクセスのための認証に使用しているCognitoコードで認証エラーがでるようになった。
エラー内容はInvalidSigunatureException なんかタイムスタンプが早すぎるみたいなエラー内容。
Nodeのアプリを再起動しても、AWSのCognitoの設定をみても解決せず。 タイムスタンプが早すぎるって意味わかんねーよってdateコマンドを実行してみたら、あら時刻ずれてるじゃない。。
要はCognitoでトークンを生成するためのタイムスタンプがずれるのでどうしたってエラーになっちゃう問題。
時刻がずれていることが原因と分かったので、暫定措置として時刻をあわせる(日本標準時)。 ※サーバーはUbuntu14.04
sudo ntpdate ntp.nict.jp
※前提としてntpdateがインストールされていること
いろいろ調べていたら、EC2でUbuntuを使うならNTPサーバーを利用して下さい的な感じだった。
NTPを入れる
根本解決のため、NTPサーバー機能をいれる。
sudo apt-get install -y ntp
そんで設定ファイルを編集する。 /etc/ntp.conf
- デフォルトの時刻サーバーをコメントアウト
- 代わりに
server ntp.nict.jp
を3行書く
上記の設定と内容の説明については他人の記事をご参照ください。
編集したらNTPサーバービスを再起動する
ぐお、タイムゾーンが
作業したサーバー(どちらもUbuntu14.04)のうち、1つがUTC、1つがJSTのタイムゾーンになってて、キモティ悪かったので、揃える。
sudo timedatectl set-timezone Asia/Tokyo
これでOK
docker reinstall
Dockerを再インストールした
Dockerが全然触らないうちにどんどん進化していってしまったので、一旦アンインストールして、入れ直した。
環境はmacOS 10.11 えるかぴたん
やったこと
- docker-machine(boot2docker)の中身を全て削除
docker-machine rm default
とか
- docker-machineを完全削除するらしいツールを使って削除実行
- Virtualboxを確認して環境が残っていないか確認
- .bash_profileに記述していた環境変数設定を削除
- homeディレクトリ直下の.dockerみたいな隠し領域も削除
- 公式から改めてdocker for mac をダウンロードしてインストール
- ついでに改めてKitematicもダウンロードしてアプリケーションディレクトリに配置
ハマったこと
単に自分が愚かなだけなんだけど、最初、docker-machineを削除した後にターミナルを再起動?しなかったため、Docker関係の環境変数が残ったま間の状態で新しく入れたDockerに対してdocker -v
とかやってエラーを出してた。
ターミナルを再起動して解決
ここまで
今日はここまで。
今後、先送りしてたswarmモードとやらを試したりしたい。
Pelicanのレイアウト作成
Pelicanで使う自分用テーマを作成した
静的サイトジェネレーター用の基本的なブログレイアウトを一つ作っておくと使い回しができると思い、Python製のPelicanから着手することにしてみた。
結論から言うと、なかなか時間がとれないのもあって、足掛け2ヶ月かかった。
その1:ベースとなるレイアウトを素組する
htmlとCSSのみでできるだけレスポンシブな簡易ブログ用のレイアウトを考えて作った。
https://github.com/sakadonohito/site-base-theme
flexboxを中途半端に使っているのと、Pelicanテーマ作り終わってからフィードバックしている部分もある。ホント適当。
CSSはSCSSからWebpackでビルドしているけど、限りなく必要ないレベル。 EmacsならSCSS保存する時にCSSをビルドしてくれるのでホント不要な構造、しかも作り終わる前にWebpackは2がでちゃってバージョンが古いというオマケつき。 そうです、Webpack使ってるぜアッピルがしたかっただけなのです。
その2:Pelicanのテーマを作る
- ググって出てきたシンプルなテーマをコピーして
- 作ったベースレイアウトにまるっと取り替えて
- 変数部分がちゃんと展開されるように調整して
- パーツをバラす
みたいな感じで作成。
結局よくりようしたのは公式ドキュメント
ハマったところ
1. 見本にしたテーマのパーツ毎の役割がよくわからなかった
categories.html
とcategory.html
ってあって、最初複数形のはカテゴリ別の一覧表示で単数系のは1記事のパーツかと思ったら、複数形はカテゴリ名の一覧で単数系が特定のカテゴリでの記事一覧だった。
タグの場合はさらに1記事用パーツレイアウトにはめ込む用の記事に関連づいたタグを横一列に並べるtaglist.htmlなんてのもあって、さらに混乱した。
2. ビルド失敗した時どこでエラーが発生したのか分からない
ビルドのエラーログの出力設定があるのか調べていないだけなんだけど、テンプレート作成している時にビルドエラー発生したけど、どこの編集のせいか分からない(1行文法エラーで失敗したぜ!的なメッセージがでるだけ)のでこまめにビルドして確認しながらじゃないと迷路に迷い込む。
ショートカットキーのタイポとかで変な場所に意図せず文字を入力してしまっているのに気づかず、ビルドが失敗した時には、身に覚えがなかったので解決に時間がかかった(2分探索みたいにコードを消したり戻したりしながらビルドしてエラー箇所を探した)。
3. 記事データのリストオブジェクトは生成するページのコンテキストに依存するものがある
period_Archives.html
っていう特定の期間の記事リストを表示するためのパーツの上でarticlesという記事リストオブジェクトは全体じゃなくて、その期間の記事リストオブジェクト。全記事のリストは代わりにall_articlesてのある。じゃぁ常にall_articlesを使えば?ってなるんだけど、TOPとか他の場所だとこのall_articlesは空欄。
4. 年月毎に記事のカウントを取ったりURL分ける方法の説明がおろそか
結論からいうと、URLについては設定ファイルに
MONTH_ARCHIVE_SAVE_AS = '{date:%Y}/{date:%m}/index.html'
他にも
AUTHOR_SAVE_AS とか
PAGE_SAVE_AS なんかもあるのよ
とか書いておくと、/2017/03/みたいなパスで2017年3月の記事の一覧ページが生成される。今にして思うと年のフォルダ&月を意味するファイルの組み合わせでよかったんじゃないか説もある。
年月の記事カウントについては全記事を年でまとめた記事リストの記事リストを作成して「記事リスト」をさらに月でまとめてカウントを取るみたいなことをやる。 これはそんなようなことをするサンプルのテーマがたまたま見つかったから作れたけど見つからなかったらアーカイブのページが断念したと思う。
こんな感じ
<section>
<p>Archives</p>
{% if all_articles|count %}
<ul>
{% for year, date_year in all_articles|groupby('date.year')|sort(reverse=NEWEST_FIRST_ARCHIVES) %}
{% for month, articles in date_year|groupby('date.month')|sort(reverse=NEWEST_FIRST_ARCHIVES) %}
<li><a href="/{{ year }}/{{ '%02d' % month }}/">{{ year }}年{{ month }}月</a>({{ articles|count }})</li>
{% endfor %}
{% endfor %}
</ul>
{% elif articles %}
<ul>
{% for year, date_year in articles|groupby('date.year')|sort(reverse=NEWEST_FIRST_ARCHIVES) %}
{% for month, articles in date_year|groupby('date.month')|sort(reverse=NEWEST_FIRST_ARCHIVES) %}
<li><a href="/{{ year }}/{{ '%02d' % month }}/">{{ year }}年{{ month }}月</a>({{ articles|count }})</li>
{% endfor %}
{% endfor %}
</ul>
{% endif %}
</section>
正直リストオブジェクトをパイプで次の処理に渡せるのjinjaのドキュメント見なかったら想像もできなかったので、このパターンのサンプルくらいPelicanのドキュメントにも載せておいてほしい。
Pelicanを試す
Python製の静的サイトジェネレーターPelicanを試す
Hugo,Hexo,Jekyllと試してきて、せっかくなのでPython製のものも試そうとPelicanを試した。
インストール
mkdir <<blog>>
cd <<blog>>
pip install pelican Markdown
pelican-quickstart
なんかいろいろ聞かれるので適当に答える。今回はS3にFTPで物理コピーをする運用のため、デプロイに関する質問は全てNo。
記事を書く
記事はcontent以下にreStructuredTextもしくはMarkdownで書きます。 content以下にディレクトリを配置するとそのディレクトリ名がカテゴリ名扱いされるらしい。当分はいいや。 もちろん、カテゴリはテキストファイルないのヘッダー?に記述できますので、カテゴリが必要だからといってディレクトリでわかなければいけないわけではありません。
pelican content -s pelicanconf.py
でoutputディレクトリに静的ファイルが生成されます。
簡単ですな。
Jekyllを試す
Jekyllを試す
Ruby製の静的サイトジェネレーターを試してる。
インストール
以下下記URLを参考にいろいろ試したけど、情報が古くコマンドが変わってた。 参考
gem install jekyll
mkdir _site _posts _site assets
mkdir -p assets/css
構造はこんな感じ
├── _config.yml
├── _layouts
│ ├── layout.html
│ └── post.html
├── _posts
├── _site
├── assets
│ └── css
└── index.md
jekyll serve --watch
で編集内容が即時される。
こんな感じでやっていこうと思います。
レイアウトがとてもダサイ感じなので、テーマをちゃんと作っていきたい。
Ruby製だから?ヘルプが分かりやすい。
静的ファイルを生成したい場合はjekyll build
で_siteディレクトリに生成される。
Hexoを試す
JavaScriptの静的サイトジェネレーターHexoを試す
JavaScript(Node.js)ベースの静的サイトジェネレーターを試してみようと思った。
インストールと初期設定
npm install -g hexo-cli
hexo init <<blog-name>>
cd <<blog-name>>
npm install
hexo server
これでHexoがインストールされサイトを開始できる
hexe server
で開発用のサーバー起動状態になりhttp://localhost:4000
にアクセスできる。
_config.ymlを編集する。
title: "サイトタイトル"
subtitle: "サブタイトル"
description: "サイトの説明"
author: <<author>>
language: ja
timezone: Asia/Tokyo
url: http://<<site-domain>>
root: /
permalink: :year/:month/:day/:title/
languageはja
にしてtimezoneはAsia/Tokyo
にした。
urlは公開したいドメイン、rootはトップレベルにした。
permalinkの設定は:year/:month/:day/:title/
のデフォルト設定のままにした。
記事の追加
hexo new <<post-name>>
これでHugoみたいに初期状態のができる。 このあたり、Hugoと同じ感じで出来るので入りやすい。
当初、React製の「gatsby」にしようかと思ったけど、なんか違うと思ったので、止めた。
Publicファイルの生成
hexo generate
これでファイルがpublicフォルダに出力されるので、後は目的の場所にアップロードするだけ。
今回はここまで。
WordPressからHugoへ移行
開発メモブログをWordPressからHugoへの移行
- WordPressから記事をエクスポート
- Hugoをインストール
- エクスポートした記事を放り込む
WordPressから記事をエクスポート
- WordPressにHugo向けにエクスポートするプラグインを入れてデータを出す
Hugoをインストール
brew install hugo
hugo new site techblog
cd techblog
書き出した記事を放り込む
プラグインを使ってエクスポートした記事データはHugoのcontent/post
のpostディレクトリ相当のものが吐き出されているので、中身をcontent/post/
にぶちまける。
細かい設定
テーマを入れる
適当なテーマをインストール。今回はPolymer。
themeディレクトリがなかったら作ってその中でgit clone
したらいいよ。
config.tomlを編集
title,baseurl,languageCode,theme,paginateを修正する。
後で独自ドメインでGitHubPagesで運用するため、canonifyurls = trueを設定する。
GoogleAnalyticsのコードを入れるため、config.tomlに以下を追記
[params]
googleAnalyticsUserID = "<<code>>"
またURLの構造を検討する。 今回からパーマリンクを以下のようにした。permelink設定を追加
[permalinks]
post = "/:year/:month/:day/:slug"
これでyyyy/mm/dd/slugというようなURLになる。
URL構造を変更したため、取り込んだ記事のURL属性を消して代わりにSlug属性を追加。結構時間かかった。
新しい記事を追加する時には
hugo new post/<<post-name>>.md
で記事の初期状態のものが作られるので後は内容をMarkdownで記述していく。
GitHubPagesで公開する
- GitHubにリポジトリを追加
- hugoコマンドで出力されるpublicディレクトリの静的ファイルをコミット
- settingsのGitHub Pagesの項にあるCustom domainにドメインを入れて保存。
- hugoのpublicにCNAMEというファイルを追加。内容は公開ドメイン名
- 再度publicディレクトリの内容をコミット
- DNS(今回はRoute53)でCNAMEの設定をする。
今回はひとまずこんな感じ。 今後は記事の追加だけじゃなく、テーマを自作していきたい。
Oracle Setup
Ubuntu14.04にOracle11gを入れる
大まかな手順
- 必要なものをいれる(unzip, libaio1, unixodbc, alien)
- oracle download(rpmパッケージだけどな!)
- /sbin/chkconfigを作ってあげる
- alienでrpmパッケージをdebに変換
- インストール
- 設定ファイル周りの編集(パスが違うとか、memory_targetの変更とか)
- hostsに外向けIPとhostnameの対応を追加(一番大事!)
嘘でしょう。。。
長い間悩まされていた問題が解決したかもしれないので、ここに書いておきましょう。
実際に解決したかどうかは、会社と自宅とPocket-Wifiで何回かネットワークを切り替えてから。
悩まされていた問題
会社やPocket-Wifiでは問題ないが、なぜか自宅のWifi環境だとMacのVM上のUbuntu(開発環境)のネットワークが繋がらなくなる。
VMのネットワーク設定を「Macと共有」の時は問題なくて「自動検出」にするとVMのUbuntuのIPが正しく設定されない。
ひとまず解決?
前提として、このUbuntuはDesktop 14.04LTSです。なのでUbuntuServerの場合は違うかも。
/etc/NetworkManager/system-connections/ 配下のネットワークの設定ファイルのファイル名に日本語(マルチバイト文字)が含まれていたので、ASCII文字のみに変更。
/etc/NetworkManager/system-connections/ のファイル名を変更したものを開く
この設定ファイルの中の「connection」にあるidの設定を変更したファイル名に合わせる。
これだけでネットワークつながるようになった。というかipが正しくふられるようになった。
まさかのマルチバイト文字ファイル名問題?