Hiroyuki Nishimura

Hiroyuki Nishimura

49 posts
密にならない新幹線の予約システムを考えてみた

密にならない新幹線の予約システムを考えてみた

コロナ禍の中、新幹線の座席ができるだけ密にならないように予約を入れる予約システムを考えてみた。既にそんな対応を入れてるのかもしれないけれど、自分が頼まれたらこんな感じにするだろうか?って話です😅 まず、座席表の表示モードをA,B,Cの三つ用意。 モードA 一つの予約トランザクションで1列内で1座席以上予約が入ったらその列を全席埋まっている状態で表示。このモードで全車両(自由席、グリーン車を除く)が埋まった状態になったらモードBに切り替える。 モードB 列を通路で分割し、2席側(①)または3席側(②)で全ての席が空席の場合、その①または②側全席を空席として公開し座席表に表示する。このモードで、一つの予約トランザクションで空いている①または②側に1

Logic proでAmplitube4をMIDI音源として利用する

Logic proでAmplitube4をMIDI音源として利用する

Amplitube単体でエクスプレッションペダルなどでWahやVolumeのコントロールは問題なくできるのに、Logic Proのプラグインとして利用するとどうもうまくいかない。結構色々ググったがうまく行ったりいかなかったり安定感がなく、どうにも途方にくれていた所、海外のYoutubeで完璧な方法を見つけたのでメモっとく。 今やわかんないことがあったらGoogleさんより頼りになるねYoutubeさん😅 基本的に原理は単純で、MIDI音源にAmplitubeを使っちゃえばいいというのが結論。 まず作成するトラックは、「ギター・ベース」ではなく「ソフトウェア音源」を選択する。 そして、音源にAmplitubeを選択して作成ボタンを押下する。MIDI制御エフェクト配下にあるのでこれが最初見つからなかったんだよね😅 で、Amplitubeのエディタを開き、「サイドチェーン」でオーディオインターフェースの選択(ここもミソ)。既に録音済みのトラックを入力としてもここで選択可能! 最後にエフェクター置いて、Learnを選んで、接続している MIDIコントローラーの好きなコントローラーを動かしてアサインするだけ。 複数のMIDIコントローラーが接続してあっても、Learnでいじった方を勝手に認識してくれる。

チームワーク支援ツール Lycaon

チームワーク支援ツール Lycaon

現在開発中のチームワーク支援ツールのご紹介です! 自分よりはるかに大きな相手にも挑むアフリカきっての名ハンター、リカオン。20匹ほどの群れで暮らし、団結力はピカイチ。狩りの成功率は7割ともいわれ、ライオンの3割、チーターの5割を圧倒する。最近、このチームワークの秘密が明らかになった。狩りに出るかどうかをクシャミの多数決で決めていると言うのだ。リーダーが一方的に決めず、メンバーのやる気をはかるのがリカオン流。 そんなリカオンにちなんで開発を始めたチームワーク支援ツール「Lycaon」。 https://lycaondemo.bright-l.0am.jp/ 開発プロジェクトの支援ツールとしては、RedmineやBacklogといった素晴らしいツールが存在しますが、もうちょっと「ゆるい」感じのツールをもっとうに開発をしています。 チームを作る まずは、

SailsjsでSQLをログに出す
nodejs

SailsjsでSQLをログに出す

すぐ忘れちゃうのでメモ DEBUG=query sails lift nodeモジュールでdebug,jsを利用しているものは、基本 DEBUG=* sails lift でデバッグログを出力するようになる。 後はソースを拝見して require('debug')('query'); ^^^^^^^^^ 指定している名前空間(上記例ではquery)をDEBUG=で指定すれば、そのログだけに絞り込める。 windowsでpowershellを利用している場合は... $env:DEBUG='query'; sails lift

VueのDataにファンクションをセット
Vuejs

VueのDataにファンクションをセット

Vueで、今まで全然気がつかなかったというか使ってなかったというかこんな使い方ができたのね😅 アプリ共通の関数ってやっぱ必ずありますよね。 Vueの基盤オブジェクトを作っておいてextendするような実装を今までしてたけど、ありモノをそのまま使いたいとかもあるじゃないですか。momentとかunderscoreとか。 今までは、結局、Vueの基盤オブジェクトを作ってそこにラップした関数を定義してたわけですよ。 仮に以下のような使い回ししたい関数があった場合。 $myfunctions = { parsehoge: function(val) { /* ゴニョゴニョ */ }, formathoge: function(val) { /* ゴニョゴニョ */ }, } 今までは... $vuebase = { methods: { parsehoge: function(val) { return $myfunctions.parsehoge(val); }, formathoge:

Javascriptのawait/asyncのloopでハマる
Javascript

Javascriptのawait/asyncのloopでハマる

Javascriptのawait/asyncのループ処理でハマったのでメモ。 深く考えず、というかこう書けばいいと勝手に思い込んでたが以下のコードだとawait axios.postが非同期で動いてしまう。 await this.appendix.map((blob) => { var config = { header: { "Content-Type": "multipart/form-data", }, }; try { var data = new FormData(); data.append("

VuejsからスレッドセーフにjQueryでの操作を行う
Javascript

VuejsからスレッドセーフにjQueryでの操作を行う

Vuejsの仮想DOMがレンダリングされる前にjQueryでのDOM操作を行うとスレッドセーフではないので色々と問題が発生する。よくsetTimeoutで実行を遅らせたりするのを見かけるが、クライアント環境でうまく行ったり行かなかったり。 全てにおいて完全と言うわけではないが、VuejsにはnextTickという仮想DOM構築後のコールバックがあるのでそれを利用してjQueryの操作を行うという技。 onEditClick: function (event) { //Vue側のDOM変更が入る操作; .... this.$nextTick(() => { //jQueryでDOM変更が入る操作 $('#foo').hide(); $('#hoge').show(); }); },

VS Codeでnodejsアプリをデバッグ
nodejs

VS Codeでnodejsアプリをデバッグ

VS Codeでsailsjs開発の続きです。今回は、VS Codeで開発アプリのデバッグを行うための設定。 まず、Node Debug 拡張機能をインストールします。 その後、デバッグの設定をVS Code上で行っていけばいいんですが毎回同じことの繰り返しになるのでデバッグ用の設定ファイルを作成しちゃいます。 プロジェクト内に.vscodeというフォルダを作成し(既にあればそこへ)以下の内容の launch.json ファイルを作成します。 { // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version"

VS Codeでsailsjs開発
Javascript

VS Codeでsailsjs開発

5年ほど前、オリンピックに向けて飲食店のメニューをバイリンガル表示するWEBアプリを作ろうかと、その時nodejsでフレームワークに採用したsails。当時はバージョン0.10とか0.11とかだったけど痒い所に手が届くもやりすぎないフレームワークでかなり気に入って使ってた。ドキュメントも英語だけど結構ちゃんと書いてくれてたしね。 5年ぶりそんなsailsjsを弄ってみる(特に作るもんは決めてないけど) 5年前は、Macでviメインで開発してたんだけど、今回はWindows、Linux、Mac環境で動くVS Codeを利用してみる。 sailsjsのバージョンは1.2.4。開発環境は、会社のWindowsマシン。 Sails本家 nodejsのインストール nodejsからダウンロードしてまずはnodejsのインストール。 sailsjsのインストール nodejsをインストールすればnpmも利用できるようになるので、以降必要なパッケージはnpmでインストールです。 Powershellを立ち上げて npm install sails

サーバー用途としてラズパイと上手く付き合う

サーバー用途としてラズパイと上手く付き合う

普段は業務用サーバーをゴニョゴニョ触っている輩が初めてラズパイ(Raspberry Pi4)でお家サーバーを構築しようとし、かなり戸惑った訳ですが、良いきっかけなので気がつき改善できた点を簡単にまとめておきます。 とにかく電源を安定させる! ほんと小学生の科学の実験の付録みたいというか、電池と豆電球そのものというか(汗)回路内には全く電源を安定させるような仕組みは入っていないようです。ちょっと電源を供給しないといけないデバイスをUSBに接続するとあっという間にCPUの電圧低下。最初のうちはそんなことが起こっているなんて全くわからずかなりハマりました。 GPIOをオバーライドするような電源ボードを購入し、GPIOから安定した電源を供給してあげるのが一番良さそうです(2000円ぐらいから、ページ下にリンク貼っときました) 自分は、SSDとかHDDが挿したいだけだったので、それぞれ外付けケース側で電源を供給するタイプで回避をしました。また、電源の無いポータブルタイプのケースでも写真のようにUSB電源タップで電源を取得したら良い感じに電圧低下を回避できました。 色々工夫の方法はあるかと思いますが、とにかく電源を安定させないとそこから先何をやってもトラブルだらけです(笑) 発熱に注意! raspbian(buster)にはその設定は見つけられてないのですが、ラズパイは特定のCPU温度に達するとシャットダウンするようです。

ラズパイのCPU温度を監視する
ラズパイ

ラズパイのCPU温度を監視する

ラズパイのCPU温度を定期的に監視し、異常があったらメールを送信する。 メール送信に必要なものをインストール。bcはシェルでの小数点計算用。 $ sudo apt install ssmtp mailutils bc ssmtpの設定 $ sudo vi /etc/ssmtp/ssmtp.conf #自分のメールアドレス root=hoge@hoge.com FromLineOverride=YES # SMTPサーバ名とポート番号 mailhub=smtp.hoge.com:587

ラズパイ(Raspbian)に ownCloud を Docker で構築する

ラズパイ(Raspbian)に ownCloud を Docker で構築する

家のクラウド環境のサーバーをラズパイに変更しようかと思いネットで色々とググってみるとDockerに関し間違った内容がクローン記事が広まってるのでちゃんとした内容を掲載しとく。 まずDebian系でDockerをインストールするならdockerではなく、フリーの方のdocker-ceだす(汗) てことで、まずdocker-ceのインストール。 あくまでお遊びなのでラズパイをサーバーにしてownCloud運用するとか、良い子の皆さんは真似をしないでね! Dockerのインストール 基本的にhttps://docs.docker.com/engine/install/ubuntu/を参照して作業すれば良いだけなんだけど、ちょっとラズパイ環境ではうまくいかないところもあったので 以下にコマンドを羅列しときます。 $ sudo apt remove docker docker-engine docker.io containerd runc $ sudo apt

ASP.NET Core MVCにおけるViewモデルの考察
C#

ASP.NET Core MVCにおけるViewモデルの考察

MVCにおけるViewモデルの考察 CRUD(作成、読み取り、更新、削除)パターン大抵の業務アプリの画面は、CRUD(作成、読み取り、更新、削除)パターンとなると思いますが、単純なマスタテーブルのメンテナンス画面とは異なりViewモデルそのものについて何がいいのか考えさせられることが多々あります。 ということで、アクションの立場に立ってCRUDの各処理を実行する際どのようなインターフェースが必要になるか整理してみます。 なお、なんのデータかは具体的ではないので、とある「案件のデータ」という表現をしていきます。 案件データの表示GETメソッドで、クライアントは案件の識別子(更新時)またはパラメータ無し(新規作成時)でリクエストを行い、サーバーは案件のデータを読み取り結果をクライアントにレスポンスし表示します。レスポンスするデータ(Viewモデル)

ownCloudでファイル共有
ownCloud

ownCloudでファイル共有

ownCloudでファイル共有するには大きく分けて、「グループやユーザー間での共有」、「公開リンクによる共有」の2つの方法があります。 グループやユーザー間での共有 フォルダやファイルを設定したグループやユーザー間で共有する場合に使用します。 共有するフォルダやファイルの共有アイコンをクリックします。 右側にペインが表示されますので、「ユーザーとグループ」を選択し、検索用フィールドにユーザー名かグループ名を一部入力すると候補が表示されますので選択することで、共有を許可するグループやユーザーを設定できます。 社内メンバー間でファイルを共有する場合に便利ですね。 ExcelやWordなどで作成した開発ドキュメントなどは、gitやSVNよりも、このような共有フォルダを利用する方がいい様な気がします。 公開リンクによる共有 共有するフォルダやファイルの共有アイコンをクリックし、右ペインで「公開リンク」を選択します。 「公開リンクを作成」ボタンを押下します。 適当に「リンク名」を入力し、「パスワード」「期限」を入力します。 パーミッションは、

Windows10でいつの間にかnet viewがエラーとなりエクスプローラにネットワーク上のPCが表示されなくなる
Windows

Windows10でいつの間にかnet viewがエラーとなりエクスプローラにネットワーク上のPCが表示されなくなる

https://support.microsoft.com/af-za/help/4034314/smbv1-is-not-installed-windows-10-and-windows-server-version-1709 上記URL内容の通り、OSバージョン1709からSMBv1が完全にサポートされなくなり、 SMBv1クライアントまたはサーバーが合計15日間使用されていない場合(コンピュータがオフの時間を除く)、それぞれ自動的にアンインストールされます。 コンピュータブラウザサービスはSMBv1に依存しているため、SMBv1クライアントまたはサーバーがアンインストールされている場合は、サービスがアンインストールされます。 つまり、従来のNetBIOSデータグラムブラウジング方式ではエクスプローラネットワークにWindowsコンピュータが表示されなくなります。 ってことで、Windowsのファイル共有ができなくなります。 ...なんてこった! 対応方法は、「Windowsの機能の有効かまたは無効化」でSBM1.0をインストールします。 ただし、15日間の猶予でアンインストールされてからでないとアンインストールの対象となってしまうようです。 Windows と Windows

NLogLoggerProvider
C#

NLogLoggerProvider

去年、.NET CORE rc版で実装を行った際、デフォルトのLoggerがいまいち使いにくかったのと、Debugがログファイルに出力できなかったため作ったNLog用のLoggerProvider。 今はもうNugtで同じようなものがありますけど(笑) NLogLoggerProvider.cs namespace SqlRock.Logging { public class NLogLoggerProvider : ILoggerProvider { private bool _disposed = false; public NLogLoggerProvider() { } public Microsoft.Extensions.Logging.ILogger CreateLogger(string

ausearchでハマった
Linux

ausearchでハマった

久しぶりにLinuxのお仕事で監査ログの収集。 いくつかのツールは試したが、ターゲットがRH7のサーバーであるのでデフォルト利用できるauditを利用して監査を行い、そのログを集計サーバーに送信するというシェル芸で行くことに。 auditに特定のディレクトリに対する操作の監査を行うルールを作成し、1日1回、cronでausearchを実行し監査ログをフィルタ、ログを解析し特定のフォーマットに変換、集計サーバーにSFTPで送信って感じな簡単な内容。 実装~単体テストが終わって、cronに仕込んで1週間ほど様子見と気軽にしていたんだが、何故かcronから実行すると、ausearchで監査ログをフィルタした結果が0件となってしまう。 ausearchには、日付も指定しているので… 「これは、cron実行時にLC_TIMEがうまいことセットされないんでは?」と勝手な妄想にハマり込み、今度こそと数日間ごにょごにょ(汗) 色々やっても全然うまくいかず、man ausearch(英語)を隅から隅まで読んでみたら…cron実行時は、

MVC6

Application Initialization Module (IIS)

IISにて、Application Initialization Moduleを利用しアプリをプリロードする設定メモ。 詳細は https://www.iis.net/configreference/system.webserver/applicationinitialization 1.サーバーの役割にてApplication Initialization Moduleをインストール 2.アプリケーションプール詳細設定にて、開始モードをAlwaysRunningに変更 3.サイト詳細設定にて、有効化されたプリロードをTrueに変更 4.Web.Configにて動作を設定 <system.webServer> ... <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true" remapManagedRequestsTo="Loading.html"/> <add

MVC6

Mac・LinuxでMVC6(asp.net5)を動かす

この記事はもう過去のプレビュー版での話になってしまったので、現在は https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-debian-8-or-debian-9-64-bit を参照のこと。 折角クロスプラットフォームになったdnx。実際にMac・Linuxで動かしてみた。 環境構築 Linux編 今回は、Debian8での構築。 Monoのインストール 普通にapt-getでmonoはインストールできるけれど、現在mono3.xになってしまう。MVC6を動かすには、mono4.xが必要とのことなので、リポジトリを登録して、apt-getする。 Monoのサイトできちんとした説明があるので詳細はWebで! http://www.mono-project.com/docs/getting-started/install/linux/ # apt-key adv --keyserver keyserver.ubuntu.

Javascript

Angulrajsのng-gridでDatePicker

Angulrajsのng-gridで編集時にDatePickerを使おうとしてハマったのでメモ。 解決ネタは、http://blog.mitsuruog.info/2015/02/input-date-trouble-tips-in-angularjs.html ng-gridでは、カラムの編集用のコンテンツをテンプレートとして設定できるので、columnDefsで editableCellTemplate : '<input type="date" ng-class="\'colt\' + col.index" ng-input="COL_FIELD" ng-model="COL_FIELD" data-date-format="yyyy/MM/ddTHH:mm:

MVC6

MVC6で認証処理の実装

基本的な考え方はMVC5と同じだが、MVC6で認証もサービスになったので忘れないようにメモ。 ちなみに、VS2015でテンプレートを利用すれば予め認証関連を自動生成してくれる...が業務アプリではなかなか使えないのが悲しいなぁ。 参考URL:https://github.com/leastprivilege/AspNet5AuthorizationPlayground Startup.cs public class Startup { public void ConfigureServices(IServiceCollection services) { // 認証されたUser以外はアクセス禁止 --> var defaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); services.AddMvc(setup => { setup.Filters.Add(new AuthorizeFilter(defaultPolicy)); }); // <-- 認証されたUser以外はアクセス禁止 // 必要があればリソースに対するアクセス権(