「プログラミング」に関する日記(12)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

日記

昨日言っていた案の実装。太字が提案内容です。

まずまず悪くないんじゃないでしょうか。
Nginxは「PCソフト」だし、VPSを契約しようと思ったのは「TGWSAdmin」をクラウドで管理するため。VPSでは、具体的に何かをした報告より、何かをしたい「プログラミング」の「アイディア」があって日記に書いていたわけで、TGWSの「更新」に使いたいと思っていたのでした。
見当違いなのは「funyak」ぐらいのものですが、これは許容範囲です。うちの日記は、関係ない話題も並列して書くので、関係ないカテゴリが一緒に出てくるというのも大なり小なりあるわけですな。

統計にかかる時間はおおよそ1秒以内で、それを使うのは10ミリ秒前後。平たくいって、一瞬です。
待てど暮らせど終わらないのに途中経過を見たら頓珍漢だった前回とは大きな違いです。
この速度なら、編集中にリアルタイムで提案内容を更新するなんて芸当もできそうです。

しかも、テーブル名と列名を差し替えるだけでアンパンマンDBにも適用可能で、実際に既に統計データは作っています。
アンパンマンDBはアンパンマンDBで、カテゴリの親子関係にするには不適切だけど、密接に関わりがあるカテゴリというのがあるので、もしかしたら日記以上に効果を発揮するかもしれません。

日記

過去の投稿内容からカテゴリを提案する機能ね、うん。
一応ね、考えてたんですよ、いろいろ。
遺伝的アルゴリズムによりパラメータを調整していって、重要度の低いキーワードは軽視するように、重要な固有名詞等を自動で見つけられるように、とか。
ええ、ええ、考えてたんですよ。
まず最初は、パラメータ調整なしで、やりますよね、調整の材料がそもそもまだないんですからね。
これで多少なりともそれっぽい結果が出たら、張り切って先に進めるぞ!ってね。

そして、長い長い時間をかけて実行して、出た結果が、これだあ!!

VPSの記事に対し、

  • Bomber丸World(企画中のゲーム)
  • CGI(サーバーサイト技術)
  • NeoMupl(自作の音楽プレイヤー)
  • PCソフト
  • アンパンマンDB(自分のサイト)
  • 更新(自分のサイトの更新情報)
  • ドラクエ(ゲームソフト)
  • ふにゃさん(自作ゲーム)
  • プログラミング

完全に何もかも外れとまでは言えないけど、かすっているのがいくつかあるだけで、提案と呼ぶにはあまりにお粗末な…。
もしかして、単純に出現頻度の高いカテゴリが出てきているだけなのでは…?

ちょっと…心折れたんで、この件はしばらく放置で…。

Visual Studio CodeとVPS

Visual Studio Code

PHPの整形は、いろいろある中で、php cs fixer(小文字のほう)がうまく使えました。
PSR-2に従って整形してくれるらしいのですが、命名規則までは直してはくれないようです。
コーディング規則の最終確認にはSideCIを使っているのですが、ここでチェックすると、警告はある程度までは減っても、ある程度は残ってしまうんですね。
SideCIは本当に最終確認で、気軽にここで調整というわけにはいかないので、できるだけ手元でさっと確かめたいのですが、そのあたりの環境はまだ構築できていません。

VPS

マストドンをちょっとやってみたくてVPS始めたんですが、うまくいかなかったので、もう一個やりたかったこと、.NETのWebアプリケーションをLinux上のサーバーで動かすというのに挑戦しています。
今あるサイトをここのサーバーに置き換えるのではなく、新しいことを始めたい、というところです。
もちろん、軌道に乗ればサーバー移転も考えますが。
先日学習していたdotnetコマンドの件は、これの準備段階ということで、とりあえずハローワールドですが成果が出ました。

dotnet

例えば、C#で作っているfunyakのステージデータが正当なものであるかどうかを検証するには、同じC#で作ったプログラムを使うほうが簡単だったり仕様の不一致が防げたりして都合がいいわけです。

まだFTPを入れていなくて、手元で作ったWebアプリケーションを向こうで試せないので、ちょっとFTPも入れておこうと思います。

Visual Studio Code

インストールしてみました。
主にPHP開発環境として。
今までは秀丸を使っていて、Visual Studio 2015にもPHP Toolsを入れていたのですが、どちらもコードの自動整形が利かなかったんですね。
Visual Studio Codeがどこまでできるかわかりませんが、とりあえず試してみます。

.NET Core

Dockerであれこれやるのはいったん置いといて、使い慣れたC#をLinux完了で動かすため、.NET Coreについて勉強中。
さくらのVPS無料お試し期間中にできる限りのことはやっておきたいのです。
とりあえず、手元のWindows環境での.NET Coreの実行には成功。
Linux環境ではまだ試していませんが、dotnetコマンドで実行ができるようです。

長い長い文字列のURLエンコード

リンクチェック。
外部リンクはリンク切れしていても自分ではどうしようもないので、内部リンクのみ。
ゲーム記のリニューアルでたくさんのURLが変更になったのでやっておきました。
いくらかリンク切れがあったので、今直せる、直して意味があるものは直しておきました。

プログラミングコーナー更新。
以前から言っていた、長い長い文字列のURLエンコードの話です。
記事中でも書いたけど、そもそもこんなことしなくて済むようにしたほうがいいんじゃないかな、というのが私の中での結論です。

カービィハンターズZとUri.EscapeDataString

ゲーム記の新方式への移行が完了。
そしてカービィハンターズZのページを公開。
ゲーム記のほうは管理画面がまだまだできていませんが、管理画面で頑張らなくてもあんまり問題ない設計にはなっているので、そのへんは急がずぼちぼちやっていこうかと思います。

ゲーム記の件が落ち着いたので、以前TGWSAdminで問題になっていたデータ送信の問題の対処についての話を書き始めました。
実はサンプルコードはとっくの昔に作ってGitHubにアップしてるんですけどね。
mifumi323/EscapeLongDataStringSample
ただ、これに関しては、ちょっと言いたいことがあるので、プログラムだけでなく、解説とかも入れていこうかと思います。

VPSについて。
一応OSをインストールして、セキュリティの設定をするところまではしたけど…うーん、ここから先、サーバー構築とかしなきゃいけないのよね…。
そこらのやっすい共有レンタルサーバー並みの環境を構築するだけでも、不慣れな私には結構な作業ですし、じゃあそこまでしてその先に求めるものは何なの?って話で。
共有じゃLet's Encrypt使えねーなめんどくせーなVPSならできんじゃねぐらいの気持ちで始めてみたのですが、ちょっと、手間の天秤計算すると割に合わなさそう…。
当初は、今のこのサイトを移転するのを視野に入れて考えていたのですが、今は、TGWSAdminの自宅PC以上の安定稼働のためにVPSを使うのがいいんじゃないかという気がしてきています。

プログラミングコーナー

シンタックスハイライトについて検討中。
今まではSHJSを使っていたけど、古くて更新も途絶えたライブラリなので、代替になるものを。

サーバーサイドで色付けしてしまうGeSHiがひとつ。
クライアント側に負担をかけないというのが長所。
ただ、直接style指定していて、事実上色のパターンを選べないというのが欠点。

もう一つが、JavaScriptでハイライトするhighlight.js
割と評判がよくて、今でも更新が続いているライブラリです。
言語は自動判定が可能(というよりそれがメイン)で、カスタムパッケージとして、必要な言語だけをインストールすることも可能。
スタイルも各種用意されています。

うん、特別な事情がない限りは今後はhighlight.jsがいいかな。

日記とプロフィール

TGWS_Wikiがうまくできたので、日記とプロフィールに適用してみました。
日記はもともとTGWS_Wikiを使うようになっていたのですが、プロフィールは今回やっと適用したので、これからは記入が楽になりそうです。
日記は日記で、スタイルシートがちょっと相性悪かったので、少し調整を加えました。
アンパンマンDBも似たような仕組みを使っていますが、影響を受ける記事数が非常に多いので、ちょっと様子見です。
動作が確認出来たら適用します。
コードのシンタックスハイライトにも対応させたらプログラミングコーナーのWordPress化も必要なくなるかな…?
いや、カテゴリのこともあるし、それはさすがにないか。

CocosSharpとMarkdownとWordPressとアクセス統計とMifuminator

CocosSharpとか使えるかなーとか思ったり。
サンプルがビルドできないけど。
funyakのフロントエンド開発には何を使うかいまだに決まってないんですよね。
一応WPFでそれっぽいものは作っているけれど。

各コンテンツで使っているマークアップ言語についても検討中。
アンパンマンDBははてな記法に似せて作ったTGWS_Wiki構文を使っているけど、手早く自作したものだから、機能不足なんですよね。
Markdownが最近ははやっているらしいけど、あまり私の理想には合わないような…。
段落を自動で入れてくれて、テーブルを簡単に作れて、柔軟なリンク指定ができて、普通の文章でマークアップが誤爆しにくく、カスタマイズ性が高い、というのが欲しいんですよね。
やっぱりTGWS_Wikiを改良するかな…。

WordPressのアカウントを管理者アカウントと投稿用アカウントに分割。
管理者アカウントは表に見せたくないものでね…。
いざWordPressを設置してみると、他のサイトで間に合うことが多くてなかなか最初の記事作成に着手できないですね…。

恐らく私以外誰も見ていないであろうアクセス統計のページを微修正。
ランク外に出たものは統計の対象外になってしまうために、再びランクインしたときに、ランクアップしてきたのか、全く新規の項目なのか区別がつきませんでした。
ランク外に出て見えなくなってしまった項目も、内部的には記録するようにして、正確なランク変動がわかるようになりました。

Anpanatorの実装のMifuminator、Packagistに公開しました。
mifumi323/mifuminator - Packagist
使い方とか全然書いてないし、requireしただけでは何も動かないので、まだ一般には使い物にはならないとか思いますが、Packagistの練習も兼ねて。

Xamarin

マルチプラットフォーム開発のXamarinお試し中。
思ったよりは難しくなさそう。
でもiOSの開発にはiPhoneとMacが必要…。
テストの為だけに2機追加はつらいかな。

配列

プログラミングコーナーの配列のページを更新。
最近よく使われているJavaScriptを追加したのと、VB.NETにも形だけは下限指定の配列表記があったのでそれも追加。

HTML5.1

レスポンシブイメージが実際便利だったので、他にもHTML5.1で便利な機能がないかと思っていたのですが、案外目立って便利なものは少ないみたいですね。
table要素のsortable属性とか使えたら便利かなと思ったのですが、どうにも使えない模様…。

Webテスト環境とproject.lock.json

テスト環境のスタイルをかなり露骨にしてみました。
テスト環境であることを検出すると、背景にTestという単語がうっすら浮かび上がります。
明るい背景でも暗い背景でも対応できるように、白と黒の文字を両方入れています。

VS2017で追加されたファイルに個人情報が!
プロジェクトの構成情報の保存にproject.jsonが使われているのですが、そのキャッシュ情報にあたるproject.lock.jsonに個人フォルダのパスが保存されるようです。
自分一人で使う分には特に問題はありませんが、オープンソースとかでソースを公開しているときは、project.jsonは公開してproject.lock.jsonは非公開にしておく必要がありそうです。

HTML5.1

いつの間にやらHTML5.1なんてのが出ているではないですか。
HTML5で違和感のあった部分が現実に即したものになっていたり、あと、レスポンシブイメージですね。
うん、レスポンシブイメージはいろんなところで使えそうです。

.NET Standard

Visual Studio 2017が動かなかったのは、後ろに操作画面が隠れていたからでした。
ウィンドウの表示順ってWindowsの基本なんだからこういうとこしっかりしてほしいですね。
で、試しにいじっていたら、.NET Standardという気になるものが。
マルチプラットフォームのライブラリを作れるようにするための規格だそうで、従来のPCLをもっと統一的な扱いにしたもののようです。
これ自体はVS2015のころからあったようですが、標準に入るのは今回からだったかと。
従来のPCLと置き換えて使っても適切なバージョンを選んでいればそのままで動くらしいので、置き換えられるものは置き換えていこうかと思います。

配列

プログラミングコーナー久しぶりに更新。
配列の話です。
要素数を指定する言語、最大インデックスを指定する言語、何も指定せず自動拡張に任せる言語、いろいろありました。

無題

動画のサムネイル画像を猛烈に作りまくるプログラム作りました。
WPFで作ったら意外と動画編集ソフトでマクロ組むより早くできましたね。
これというのも検索エンジンと優秀なサンプルプログラムのお陰。

アンパンマンDB

管理メモの高速化など。
SQLはどのように組めば速いのかというのは、実装に大きく依存する。
それがよーくわかりました。
テストサーバーと公開サーバーで2種類のSQLの速度が逆転していました。
それも大幅に。
ちなみに、速度差を調べたのは、データの存在をINNER JOINで調べるかEXISTSで調べるか、というものでした。

<前 次>