プログラミング

音声/画像データの雑な扱い方

WAVファイルは先頭44バイトを読み飛ばす。 BMPファイルは先頭54バイトを読み飛ばす。 ※ BMPファイルの画像データは「左下」から「BGR」の順なので要注意。

AndroidをUSBシリアルのホストに

usb-serial-for-androidを使用する方法をメモ。 他にFTDriverというのもある。 (1) usb-serial-for-androidのソースを入手 下記サイトからプロジェクト一式をダウンロード(またはgitでclone)する。 usb-serial-for-android (2) Android Studioでプロジェクト…

標準Cライブラリいろいろ(GNUを中心に)

※ 独断と偏見が混ざっています。 glibc 言わずと知れたGNUの標準Cライブラリ 主にLinuxで使われる POSIXなどUNIX系OSの標準機能を提供 組込み系で使うには重くてデカい、無用の機能が多い uClibc 組込みLinux向けのGNUの標準Cライブラリ uClinux向けに開発さ…

比較演算子と型

間抜けなバグにハマってしまった。 代入演算子と違って比較演算子は右辺の型にキャストされる。 何年C言語やってるねん? uint32_t T = 10; int32_t t = -10; if(t >= T){ printf("over!\n"); }

バージョン管理で無視するべきファイル

Visual Studio *.suo bin/ obj/ Android Studio /.gradle/ /.idea/ /app/build/ /build/ /local.properties /*.iml

組込み屋でもアプリがしたい! 第7局

序盤、中盤、終盤、隙がないAIをめざします。 駒たっ石たちが躍動する僕のオセロをみなさんに見せたいね。 方針 序盤:定石を使う。 中盤:従来通り、重みづけテーブルで局面を評価する。 終盤:単純に石の数で局面を評価する。 序盤 1手目 オセロの1手目は…

組込み屋でもアプリがしたい! 第6局

前回、オセロの盤面を64ビット整数で表現するBit Boardをやりましたが、今回はビット演算を駆使したBit Boardの処理の高速化に取り組みます。とくに合法手(その局面で打てる有効な着手)を列挙する処理の高速化に著しい効果がありました。 石の数を数える Bit…

組込み屋でもアプリがしたい! 第5局

ビットボード これまで盤面の状態を表現するのに8×8の2次元配列を使ってきましたが、無駄にメモリを食うので、ビット演算で扱うように変更します。オセロの盤面は8×8=64マスなので、64ビット整数(C#ではulong型)を使えばちょうと盤面上の石の有無を表現でき…

組込み屋でもアプリがしたい! 第4局

「オメーの読みは『浅い』んだよ。手当たり次第に読んでくからムダ読みが多い。読みの量は多いが、そのほとんどがゴミだ」 (『りゅうおうのおしごと!5』) アルファ・ベータ法 これまで、読みの探索アリゴリズムはミニマックス法を採用してきました。ミニ…

組込み屋でもアプリがしたい! 第3局

強くなるには さて、今回からAIのアルゴリズムを改良して強くしていきます。改良の道筋として、大きく3つが考えられます。 評価関数の改良 (読みの質を高める) ミニマックス法→アルファベータ法 (無駄な読みを捨てて、読みを深くする) 演算の高速化の工夫 (…

組込み屋でもアプリがしたい! 第2局

アルゴリズムを改良していく前に、いったんアプリの機能とソースの体裁をきちんと整えておきます。 機能の不備を改善 着手可能判定とパスの処理を追加 終了判定と勝ち負け判定を追加 表示やメッセージを日本語化 リファクタリング 処理を整理して無駄なクラ…

組込み屋でもアプリがしたい!

根っからの組込み屋が車輪の再発明しながらオセロアプリを作ってみようという企画です。 言語は組込み屋でも比較的取っつきやすい(?) C#を使います。まずはノーヒントで作ってみました。(もちろん、木の探索やミニマックス法は教養として知ってます。) 2…

InetAddressUtils

Androidプログラミングのメモ。 org.apache.http.conn.util.InetAddressUtilsは、API-23以降では使えなくなりました。 IPアドレスがIPv4であるか否かを、下記のようにして判定していた箇所は、 if(InetAddressUtils.isIPv4Address(inetAddress.getHostAddres…

Xcodeでプロジェクトの名前を変更

メモ。 プロジェクトのフォルダを丸ごとコピーして名前を変更。 Xcodeで開く。 Project Navigatorでプロジェクト名を変更。 プロジェクトの[General]の[Bundle Identifier]を変更。 [Manage Schemes]でSchemeを変更。 ソースファイルのフォルダ名を変更。 プ…

Android Studioでアプリのバージョン情報指定

Moduleのbuild.gradleに記述する。 versionCodeは整数値、versionNameは文字列を設定する。 【例】 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "net.lipoyang.gppr…

Androidアプリでゲームパッドのイベントを取る

ミニ四駆ラジコンのプロポアプリを作って痛感したのは、タッチパネルUIだとスティックの感触がないから画面から目を離して操作しづらい、ということです。これはラジコンやロボットのコントローラとしては致命的です。というわけで、ゲームパッドを使えるよ…

iOSアプリ公開手順メモ

Androidアプリに比べて手続きが面倒なので手順をメモ。 前提 アプリは開発済み Apple ID は持ってる(私用とは別の開発用IDが吉?) 登録処理には Safari を使うこと (Chromeだと正常動作しない) 概要 Apple Developer Programに登録 (ショバ代を払う) Certifi…

Androidアプリ開発メモ

プロジェクトの作成 Blank Activity アクションバーにメニューが付いてる。古臭い。 Empty Activity 空っぽのアクティビティ。こっちを使う。 ボタン Activity を implements OnClickListener にする onCreate()で、Button button1 = (Button)findViewById(R…

Google PlayへのAndroidアプリのリリース

手順メモ。 事前準備 Google Play Developer への登録する。25ドルかかる。 Googleアカウントの作成 (まあ、たいてい既に持ってることと思う。) Google Play Developerアカウントの作成 apkパッケージ作成 Android Studio のメニューから [ビルド] > [Genera…

CLIラッパの作り方

ネイティブコードのHogeCクラスを含むライブラリHogeC.libを、C#で利用するためのCLIラッパライブラリHogeSharp.dllの作り方をメモします。 プロジェクトの作成 [ファイル]>[新しいプロジェクト]>[テンプレート]>[Visual C++]>[CLR]>[クラスライブラリ]で新…

Android Studioへの移行メモ

Android Studioのセットアップ (1) JDKのダウンロードとインストール こちらからjdk-*u**-windows-x**.exeをダウンロードしてインストールする。 ただし今のところは、JDK8系よりJDK7系のほうが無難らしい。 (2) Android Studioのダウンロードとインストール…

Visual Studioでプロジェクトのフォルダ名を変える

右クリック→「名前の変更」で、ソリューション名、プロジェクト名、名前空間名などは変更できるが、プロジェクト名を変更してもプロジェクトのフォルダ名は元のままで、実害は無いけどもカッコ悪い。そこで手動で変更する方法をメモ。 Visual Studioを閉じる…

apkパッケージの作り方

もうEclipseで開発なんて古いだろうけど、いちおうメモ。 [File]>[Export]>[Android]>[Export Android Application] [Project Checks] で、出力するプロジェクトを選択 [Keystor selection] で、初回は電子署名を新規生成 [Create new keystor]で、保存先、…

C#のToString()のフォーマット指定

すぐ忘れるので、メモ 実数は"F". "F4"としたら小数第4位まで. 整数(10進数表示)は"D". "D8"としたらゼロ埋め8桁 (負号も桁に含む) 整数(16進数表示)は"X". "X8"としたらゼロ埋め8桁 【追記】 string.Format()のほうがsprintf()感覚で使えて便利? str = Str…

セグフォとコアダンプ

C/C++のコードがセグメンテーションフォールト(セグフォ)で落ちる場合、突然プロセスが死ぬのでどこで問題が発生したのか分かりにくいです。そんなときに有効な手がかりとなるのがコアダンプです。 GCCでデバッグ情報つきでコンパイルする (-gオプション) $ …

OpenSSLのビルド(ARM9用)

組込みのARM9用にOpenSSLをビルドする手順メモ。(じゃっかん古い内容を含んでいます…) ソースのダウンロード https://www.openssl.org/source/ からソースをダウンロード]する。 (執筆時点で最新版は openssl-1.0.1l.tar.gz) ビルド ホスト環境は、Ubuntu10.…

Kansai.mrb 2014 Dec でのLT

昨日、Kansai.mrb 2014 Decに参加してきました。LTでしゃべった内容をうpしておきます。

mruby導入メモ

組込みでスクリプト言語を使うことには消極的だったのですが、このところC++でWebAPIサーバを実装する苦行の日々で、少々C++に倦んできました。ここらでmrubyなどやってみようかと思い立ちました。まずはPCのUbuntu上で使って感じを掴んでみようと思います。…

UNIX/Linuxのパイプ

20年くらい日々使っていながら、UNIX/Linuxのパイプの振る舞いをよく分かってませんでした。『易経』に「日に用いて知らず」というのはこれです。ちょっと簡単なコードで実験してみました。 リスト1 test1.c #include <stdio.h> int main(void) { int i; for(i=0;i<5;</stdio.h>…

組込みLinux用ネットワーク設定クラス(C++)

組込みLinuxのC++でネットワークインターフェース(有線LAN/無線LAN)の設定を行なうクラスを作成しました。といっても、ほとんど ifup/ifdown/ifconfig/iwconfigなどのコマンドをC++から叩いてるだけの超テキトーなラッパーです。 ソース NetIf.h NetIf.cc te…