プログラミング

秀丸おじさんのVSCode入門

※この記事はかなり偏った思想にもとづいて書かれています。20年以上も秀丸を使い続けてきたおじさんだけど、ついにVSCodeへの移行をはじめている。VSCodeはたしかにすごく便利なのだけど、長年秀丸を使ってきた者にとっては痒いところが多々あるのも事実。と…

gitのベアリポジトリ、ノンベアリポジトリとは?

ベアリポジトリ(bare repository) = 作業コピーを含まないリポジトリ ノンベアリポジトリ(non-bare repository) = 作業コピーを含むリポジトリ ベアリポジトリは集中管理用 つまり、リモートリポジトリはベア、ローカルリポジトリがノンベアが基本 ノンベア…

固定小数点計算ふたたび

前回の 固定小数点の再発明 - 滴了庵日録 ではROMサイズがかえって増えるという残念な結果になったので、C++でクラス化することはあきらめてC言語で書きなおした。 fixed24.h #ifndef _FIXED24_H #define _FIXED24_H #include<stdint.h> typedef int32_t fixed24; #def</stdint.h>…

固定小数点の再発明

Adafruit TrinketのようなROMが数キロバイトしかないマイコンでは、float型を用いると浮動小数点のライブラリがROM容量を圧迫してしまう。そこで固定小数点クラスを作ってみた。【2019/05/24 追記】 Arduino IDEでビルドしてみたところ、AVRマイコンではfloa…

CMakeメモ

CMakeとは? 簡単な設定ファイル( CMakeLists.txt )を書くだけで Makefile を生成してくれるツール Linux, Windows, Macなど各々のビルド環境のしきたりに沿った Makefile がおまかせで生成される。 コマンドラインベースのツール CMakeの使い方 CMakeLists.…

ゲージ表示用の.NETフォーム コントロール

ゲージ表示用のコントロールをProgressBarをベースに作った。ProgressBarからの変更点は、 アニメーション表示しない バーの色はForeColorで設定できる ニュートラルの値(Neutral)を基準にプラスマイナスの表示 using System; using System.Drawing; using S…

メモ:C#でスレッド

今どきはC#ならasync/awaitが使えるのでThreadを使う機会は減ったけどやはり使う時は使うものである。たまにしか使わないと忘れるのでメモ。 (1) スレッドの起動 ThreadStartというデリゲートを使うのがポイント。というかC#の妙ちくりんなところ。短い処理…

C#のイベント処理

C#のイベント処理の書き方、なんか珍妙ですぐ忘れるのでメモ。 イベントの型の定義 // イベント引数の型 public class HogeEventArgs : EventArgs { public string HogeData; } // イベントの型 public delegate void HogeEvent(object sender, HogeEventArg…

Androidアプリの書き方思い出し(2)

設定データの保存/読み出し SharedPreferencesを使う。 おなじみのキーバリューストア方式である。 // 保存 SharedPreferences pref = getSharedPreferences("Hoge",MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("Key1"…

Androidアプリの書き方思い出し

画面遷移 サブ画面に移るには、Intentを作ってstartActivityする。 Intent intent = new Intent(getApplication(), サブ画面Activityのクラス名.class); startActivity(intent); サブ画面のActivityを作るには、[Projact]ウィンドウの[app]を右クリックして[…

x86インラインアセンブラ (2)

x86インラインアセンブラ - 滴了庵日録 のつづき。 メモ 配列もC言語の変数名がそのまま使える。 ただし、アドレスのスケーリングは明示する必要がある。 32ビット整数ならスケーリングは *4 (任意の数を指定できるわけではない)。 ブロック転送には、esiとe…

Webアプリでデータの保存

HTML5+JavaScriptでローカルにデータを保存する実験。 データの保存にはWebStorageを用いる。 WebSotrageはKey-Valueストア方式。 永続保存されるlocalStorageとブラウザ閉じたら消えるsessionStorageがある。 保存/読み出しはsetItem/getItemメソッドを使う…

Webアプリで加速度センサ

HTML5+JavaScriptで加速度センサのデータを取得する実験。 PCのブラウザで開いても何も起こらないが、スマホのブラウザで開くと 向き・加速度・角速度のデータが表示される。スマホでも角速度センサ(ジャイロ)を持たないでは角速度は表示されない。 z軸は画…

Webアプリでマルチタッチ

HTML5+JavaScriptでマルチタッチを取得する実験。 なるほど。マウスでは発生しないタッチ特有のイベントがあるのね。指が触れたとき、動いたとき、離れたときに各タッチのIDと座標がイベントから得られるのはAndroidアプリやiOSアプリと基本的に同じ考え方。…

VC++のDLLをC#で使うなど

VC++でDLLを作る [新しいプロジェクト] > [Visual C++] > [Win32アプリケーション] でプロジェクトを作成。 ここでは名前を MyCppDll にしたとする。 [アプリケーションの種類] は [DLL] を選択。 MyCppDll.cpp を下記のように編集してビルド。 #include "st…

Node.js と Socket.IO

Node.js と Socket.IO とは Node.js : サーバーサイドをJavaScriptで書けるやつ Socket.IO : Node.jsでWebSocketができるやつ 今回やること WindowsのPCにNode.jsをインストールし、ローカルで実験。 Socket.IOを用いて、Node.jsとブラウザ間でWebSocket通信…

Xorshiftアルゴリズムで乱数

XorshiftアルゴリズムとはXORとシフトだけで品質の良い疑似乱数を生成するアルゴリズム。 // 周期 (2^32 - 1) 版 Xorshiftアルゴリズム #include <stdint.h> static uint32_t x = 2463534242; void xorshift32_seed(uint32_t seed) { if (seed != 0){ x = seed; } } ui</stdint.h>…

VC++でWindowsフォームアプリ

VC++でWindowsフォームアプリを作る方法メモ。 すでにオワコンだが 昔はVC++にもWindowsフォームアプリを作るテンプレートがあってちゃんとサポートされていたけど、今はテンプレートもなくなってる。もうとっくにオワコンである。そもそも、わざわざVC++で.…

Processingで魚眼

魚眼のことがちょっとだけ分かった。Processingたのしい。 魚眼でレナさん メモ スケッチ PImage srcImg; // 元画像 PImage dstImg; // 処理後の画像 int W,H; // 画像のサイズ int R; // レンズの半径 int D; // レンズの中心から投影面までの距離 void set…

専門外分野のメモ

JavaScriptに関するメモ 高速化について 重いスクリプトの<script>要素は、<head>要素内でなく、<body>要素内末尾に書いた方がページの表示が速い。 JS MinifierとかYUI Compressorとかでコードの圧縮(コメントやら空白やら改行を除去)すると読み込み時間短縮。 evalは処理コスト</body></head>…

Processingネタ

ProcessingでBox2D Box2Dとは Box2Dはゲーム用の2D物理演算エンジン。 C++, Java, C#, Python, JavaScript, ActionScriptで利用できる。 Processingでも利用することができる。 Processingへの導入方法 [スケッチ] > [ライブラリをインポート] > [ライブラリ…

C言語のプログラムにLuaインタプリタを組み込む

ここではWindows/VC++環境で、C言語のプログラムにLuaインタプリタを組み込んでみる。 Luaライブラリのダウンロード Lua Binariesより、Windows用のライブラリをダウンロードする。 32ビット版ならlua-x.x.x_Win32_dllw4_lib.zip 64ビット版ならlua-x.x.x_Wi…

ARMインラインアセンブラ

IAR EWARMで動作確認。GCCインラインアセンブラ構文を採用しており、他でもだいたい同じっぽい。VC++でのx86のインラインアセンブラに比べるとちょっとC言語の変数にアクセスする記法が分かりにくいかも。 基本 VC++と同様に__asmキーワードを用いてインライ…

C#とC++のラムダ式

ラムダ式(lambda expression)とは 要するに名前のない関数 (無名関数、匿名関数)、その場で書く関数 (関数リテラル) 値と同じように変数に代入したり関数に渡したりできる。 C#とC++では微妙に書き方が違う。 C#は (引数) => {処理} C++は [キャプチャ](引数…

画像の回転

Processingって、ちょこっと画像処理の実験とかするのにちょうどよさげ。 ためしに簡単な画像の回転をやってみた。 回転行列 画像の回転の基本は高校の数学で習う回転行列。 え、今は高校で行列習わないの??? それはアカンやろ! 画像を回転するスケッチ(…

Processingやってみた

Processingとは Javaベースのプログラミング環境 Javaベースだけどクラス原理主義じゃない簡単な言語 ArduinoにそっくりなシンプルなIDE (というか、Processingのほうが先) グラフィックの描画が得意 Processingの良さ (※個人の感想です) 余計なしきたりとか…

C++11のスマートポインタ

前提 C++のnewはJavaやC#のnewのようなつもりで気安く書いてはいけない。 なぜならC++には言語レベルではガベージコレクタが無い。 newしたオブジェクトは自己責任でdeleteしなければならない。 自動解放の仕組みをライブラリレベルで提供しているのがスマー…

いまさらC#でasync/await

いまいち理解が定着してなかったのでおさらい。 asyncなメソッドからTaskを起動してawaitする。 awaitするといったんそのメソッドからリターンする。 タスクが完了するとそのメソッドに戻り、awaitの続きから処理される。 つまり、途中で中断/後で再開するの…

x86インラインアセンブラ

VC++では、__asmキーワードを用いてx86のインラインアセンブラのコードを書くことができる。 メモ C言語の変数名がそのまま使える。 語順はギブミーチョコレート語順。ARMと同じ。モトローラ系やH8とかとは逆。 ARMと違ってレジスタ⇔メモリのやりとりもmov命…

transformの行列

HTML5のCanvasのtransformメソッドの6つの引数は、アフィン変換行列を表す。 context.transform(a,b,c,d,e,f); 平行移動 右にΔxピクセル、下にΔyピクセル 拡大・縮小 x軸方向にs倍、y軸方向にt倍 回転 時計回りにθ回転 蛇足 いうまでもないが、それらの合成…