読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Cコンパイラを知るための基礎知識まとめ

ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み

ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み

目次

  • 目次
  • はじめに
  • 抽象構文木 (Abstract Syntax Tree: AST)
  • アセンブラ(アセンブリ言語)とは?
  • 代表的なアセンブラ命令(ニーモニック)
    • MOV
  • 参考資料

はじめに

コンピューターの基礎的な知識を得たいと思い、

シンプルなC言語コンパイラとして有名な8ccを写経しながら、

Cコンパイラの勉強をしています。

github.com

 

元々、情報系出身じゃないので、

色々知らない知識が出てきたので、

メモとして残しておきたいと思います。

 

続きを読む

凸二次計画法を高速に解くc言語ソルバーを自動生成できるCVXGENの使い方

離散凸解析と最適化アルゴリズム (数理工学ライブラリー)

離散凸解析と最適化アルゴリズム (数理工学ライブラリー)

 

目次

  • 目次
  • はじめに
  • CVXGENとは?
  • CVXGENの特徴1: ライブラリフリーのcソルバーを自動生成できる
  • CVXGENの特徴2: 非常に高速なソルバーを生成できる
  • CVXGENの制約事項
  • CVXGENのライセンス
  • CVXGENの使い方
    • コメント
    • 各タグの意味
    • Parametersで使うことができる属性
  • C言語ソルバーの使い方
    • コードの実行方法
    • 最適化のデータ
    • ZERO_LIBRARY_MODE
    • 最適化の収束判定
  • 参考資料

はじめに

先日、凸最適化のモデリングツールとして、

MATLAB製のCVXや

myenigma.hatenablog.com

Python製のCVXPYを紹介しましたが、

myenigma.hatenablog.com

実際にロボットの制御などで凸最適化を利用したい場合、

高速に実行できるように、

C++などに最適化のコードを移植する必要があります。

しかし、モデリングの過程や、

ソルバーの中身はかなりブラックボックスなので、

移植は大変です。

 

そこで、モデリングツールでありながら、

モデリングした対象を実行するc言語ソフトを自動生成する

CVXGENというツールを使ってみたので

その時の使い方をメモしておきたいと思います。

 

続きを読む

Jenkinsで個人コードの自動テスト環境を作る方法

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

  • 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/06/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る

目次

  • 目次
  • はじめに
  • Jenkinsとは?
  • Jenkinsのインストール
    • Mac
  • 同じPC上のソフトの自動テスト環境の作り方
    • 1. Jenkins上で新規ジョブを登録する
      • 古いビルドを破棄する
      • gitリポジトリの設定
      • SCMのポーリングをオン
      • テストスクリプトの設定
      • E-Mail通知の設定
    • 2. gitのhookで下記のjenkinsのURLを叩くようにする
  • Pythonでテスト環境を作る時の注意点
    • ライブラリへのパスが通らない時
  • C++のテスト環境を作る時の注意点
    • cmakeが使えない時のgtest
  • Jenkinsからメールを送る設定
  • Jenkinsにログイン出来なくなった時
  • 参考資料

はじめに

以前、

C++とPythonのテストコードの書き方の概要を紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

ちゃんと定期的にテストを実行しないと、

結局、気づいた時には通らないテストだらけになり、

放置された状態になってしまいます。

 

そこでやはり利用したいのが、

自動テストシステムですが、

すべてのコードを公開するわけではないので、

Travis CIやCircle CIなどの外部サーバのシステムはすこし使いづらいです。

 

そこで、オンプレにインストールできる

Continuous Integration(CI)ソフトとして有名な

Jenkinsを自分のMacに入れて、

自動テストするように設定しました。

 

その時の設定方法をメモとして残しておきます。

続きを読む

体重, 体脂肪率, 筋肉量, 体水分量, 心拍数, 骨量, 脈波伝播速度を計測し、可視化してくれるIoT体重計 Withings Body Cardioを買った話

目次

  • 目次
  • はじめに
  • Withings社の IoT体重計 Body Cardioとは?
  • Body Cardioの購入
  • Body Cardioの良い所と気になる所
    • 良い所1: 非常に多くのデータを計測できる
    • 良い所2: USB充電で電池いらず
    • 良い所3 スマホのアプリとiOSのヘルスケアが連携できる
    • 良い所4: 現在地の天気や気温が見れる
    • 気になる所1: 結構重量がある
    • 気になる所2: アプリのグラフ表示のカスタマイズ性が低い
  • 参考資料

はじめに

以前から、

毎日体重を測る習慣はあったのですが、

その結果をグラフ化するために、

毎回iPhoneのアプリに計測結果を入力していました。

しかし、毎回入力するのが面倒だったり、

体脂肪もグラフ化できるといいなと思ってました。

 

そこで、それらの問題を解決するために、

IoT体重計であるWithings社の Body Cardioを

購入してみました。

 

今回は、このWithings Body Cardioの概要と

実際に使ってみての特徴を紹介したいと思います。

 

続きを読む

海外ではタクシー配車サービスUberとLyftが日本人にとってすごく便利という話

シェアリング・エコノミー ―Uber、Airbnbが変えた世界

シェアリング・エコノミー ―Uber、Airbnbが変えた世界

目次

  • 目次
  • はじめに
  • UberとLyftとは?
  • スマホアプリのインストール方法
    • Uber
    • Lyft
  • アプリの使い方
    • 1. 配車位置の指定
    • 2. 目的地を設定する
    • 3. 車種を選択する
    • 4. 配車を決定して車が来るのを待つ
    • 5. 車に乗り込んで、目的地で降りるだけ
  • タクシーと比べて、UberやLyftの何が日本人にとって良いのか?
    • 1. 英語を話す必要がほとんど無い
    • 2. 料金が安い
    • 3. タクシー配車の前に事前に目的地までの値段がわかる
    • 3. たまに水のボトルがもらえる
    • 4. 普通のタクシーを探すより、大抵早くタクシーに乗ることができる
    • 5. 領収書が自動でメールで送られてくる
  • 6. 英会話の練習にもなる
  • ドライバーの人の経験談
  • 最後に
  • 参考資料

はじめに

アメリカに住みはじめて、

UberとLyftというタクシー配車サービスを

頻繁に使い始めました。

 

はじめはなんとなく利用するのを躊躇していたのですが、

一度使い始めると、

便利過ぎて今では最低週一回は利用しています。

 

UberやLyftのようなシステムは、

タクシーの規制のため、

日本では普及していませんが、

海外旅行をする時など、

事前に準備しておき、現地で利用すると

するとかなり便利ですので、

使い方等をまとめておきたいと思います。

 

続きを読む

pybind11を使ってPythonからC++コードを実行する方法

Cython ―Cとの融合によるPythonの高速化

Cython ―Cとの融合によるPythonの高速化

目次

  • 目次
  • はじめに
  • pybind11とは?
  • シンプルなサンプルコードの実行方法
    • 1. pybind11をDL
    • 2. c++のコードを書く
    • 3. pybind11のバインドc++コードを書く。
    • 4. C++コードをコンパイルする。
      • Macの場合
      • ubuntuの場合
    • 5. pythonコードで読み込ませる
  • デフォルト引数
  • C++コードの変数をpython側で利用する
  • C++クラスのバインディング
  • 継承
  • 関数のオーバーロード
  • Enum
  • STLのコンテナのやり取り
  • pybind11がサポートしているコンパイラ
  • サンプルコード
  • より詳しいPythonとCコードの連携方法を学びたい人は
  • 参考資料

はじめに

Python Advent Calendar 2016の17日目の記事です。

 

何かのシステムを作る時に、

はじめはPythonでプロトタイプを作り、

pandasで入力データを流し込みつつ、

matplotlibで結果を確認しながら、

システムを作ることが多いです。

 

その後、そのシステムのより最適化するために、

C++に移植したりすることがあるのですが、

システムをいきなりPythonからC++に移植するのではなく、

システムの一部をC++に移植して、

残りのPythonシステムはそのままで実行したい時があります。

これにより、元のシステムからの移植の際に

バグが混入していないかが、確認しやすくなったり、

どの部分をC++に変えることで計算が早くなるのかが

わかりやすくなります。

 

そこで今回は

C++11のコードをPythonから利用できるようにする

pybind11というツールの概要と、

いくつかのサンプルを紹介したいと思います。

 

続きを読む

2011年からのVimのアドベントカレンダーの記事約600件の中のおすすめの記事

仕事ですぐ役立つ Vim&Emacsエキスパート活用術 (SoftwareDesign別冊)

仕事ですぐ役立つ Vim&Emacsエキスパート活用術 (SoftwareDesign別冊)

目次

  • 目次
  • はじめに
  • Big Sky :: モテる男のVim script短期集中講座
  • Vimステッカーを作ったお話 - Self Reference
  • vim-jpがつないだVimプラグイン開発者とVimパッチ職人、もしくはなぜ最近Vimコミュニティが活発になったのか - Humanity
  • 「Vimを使い始めようと思うんですけど、おすすめを教えてください」 - ぼっち勉強会
  • Macを購入したら絶対に導入したい!私が3年間で厳選した超オススメアプリ10選! - かなりすごいブログ
  • vimrc アンチパターンを自動でチェックする
  • 【Vim入門】ノーマルVimで使えると便利かもなコマンド10つ
  • あんまり見かけない気がする Vim の Tips 11 + 1 選
  • 『実践Vim』を読んで学んだ、おすすめVimデフォルト機能33個
  • 参考資料

はじめに

Vim Advent Calendar 2016 の 10 日目の記事です。

 

年末になると、

Vimのアドベントカレンダーの記事を読んで、

最新の機能を試してみたり、

使っていないvimrcの機能を削除したりするのが、

自分の中で恒例の年末行事になっています。

 

調べてみたところ、

2011年からVimのアドベントカレンダーが始まっており、

(2012年には、アドベントカレンダーなのに、

何故か一年間記事のリレーが行われています笑)

下記が2015年までのVim Advent Calenderのリンクです。

 

今回、自分のVimの復習のために、

2011年から2015年までのアドベントカレンダーの記事を

流し読みし、その中で新たな発見があった記事を紹介したいと思います。

 

自分のようにVimの基礎から再復習したい人の参考になれば幸いです。

 

続きを読む

制御初心者のための線形・非線形, 連続・離散システム入門

線形離散時間システム入門 - 基礎からScilab/MATLABシミュレーションまで

線形離散時間システム入門 - 基礎からScilab/MATLABシミュレーションまで

目次

  • 目次
  • はじめに
  • 非線形システムの線形化
  • 連続システムから離散システムへの変換
    • オイラー法
    • Zero-Order Hold: ZOH法
    • Pythonによる連続システムから離散システム変換関数
  • システムの安定性
    • 線形システムの安定性
    • 非線形システムの安定性
  • 参考資料

はじめに

個人的な感覚ですが、

制御技術を学んでいると、

線形・非線形、連続・離散というのは、

なんとなく理解できますが、

実際に制御システムを設計したい時に、

具体的にどのようにすればいいかというのは、

わかりにくいと感じていました。

 

今回、

実際に制御システムを設計する上で必要な、

線形、非線形、連続・離散システム関連の

基礎的な内容をまとめておきたいと思います。

 

続きを読む

車両モデリングのためのタイヤの力学とスタビリティファクタの基礎

目次

  • 目次
  • はじめに
  • 車両のスリップを表す値
  • スリップ率 (すべり率)
  • スリップ角 (すべり角)
  • タイヤ特性
  • タイヤモデル: 線形モデルとMagic Formula
  • ステアリングファクタの見積もり
  • 参考資料

はじめに

以前書いた記事の内容が長くなってしまったので、

myenigma.hatenablog.com

タイヤの力学関係と、

スタビリティファクタ関連の内容をこちらに移動しました。

続きを読む

Python製凸最適化モデリングツールCVXPYの使い方

A First Course in Optimization Theory

A First Course in Optimization Theory

目次

  • 目次
  • はじめに
  • CVXPYとは?
  • インストール方法
  • CVXPYによる最小二乗法のサンプルコード
  • シンプルな最適化問題を解いてみる(その2)
  • ナップサック問題をCVXPYで解いてみる
  • シンプルなモデル予測制御をCVXPYで解いてみる
  • CVXPYを使う時の基礎
    • 名前空間
    • 最適問題の変更
    • 最適化問題が解けない場合の状態管理
    • ベクトルと行列
    • 制約条件
    • パラメータ
  • CVXPYにおける関数
    • 演算子
    • インデクシングとスライシング
    • 転置
    • べき乗
    • スカラー関数
    • 要素関数
    • ベクター/行列関数
  • travis CIでCVXPYを利用する時の設定
  • 参考資料

はじめに

先日、最適化技術の一つである

線形計画法や二次計画法の紹介をしましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

最適化の式が、そこで紹介した標準形と同じでないと

最適化が実現できないという問題があります。

 

実はかなりの数の最適化の問題は、

上手く数式変換することで

上記の標準形に変換することができます。

このような変換を自動的に実施するソフトを

最適化モデリングツールと呼ぶのですが、

今回はこの最適化モデリングツールの一つであり、

Python製のCVXPYというツールの紹介をしたいと思います。

 

続きを読む