2019年05月12日

やっとDC A級ヘッドフォンアンプが完成

やっとDC A級ヘッドフォンアンプが完成
下記URLで領布している基板を使って製作しました。

HPA-12 Rev2 FET入力A級DCアンプ
http://nw-electric.way-nifty.com/blog/hpa12-rev2-classA-dc.html

完成度の高い回路です。
趣味程度なので専門家のようにはコメントではありませんが( ̄. ̄;
試聴してみて
前回のヘッドフォンアンプに比べれば迫力はあるなー的な
聞こえていなかった音、特に他の音(楽器)に隠れている音が聞こえる感じです。
#前回は試聴のコメントなし

テスターだけで組み立てることができました。

組み立てるプロセスで学んだこと
・日本製のトランジスタが貴重品になっている(つい数年前まではたくさん売っていた)
・抵抗器(made in japan)でカラーコード表記と値が違っていた(昔の高品質はどこに?)
・購入できる値の範囲がせまくなった(あまり売れない値は生産中止)特に小容量(pF)のコンデンサの入手に苦労する
・パネル加工の工具探しに苦労する(結局、大半は手加工)
・その他
posted by zengaichi at 19:50| Comment(0) | Tools | 更新情報をチェックする

2019年05月01日

C++17でモンテカルロを並列化してみた(4)

g++で記述した改良版に合わせてさらに書き換えてみました。
atomicの処理が減った分だけ、処理が若干早くなった感じがします。

#include <algorithm>
#include <execution>
#include <mutex>
#include <iostream>
#include <random>
#include <array>

int main()
{
static int const NUM = 1000000000;
static int const threads = 10;

static_assert(std::atomic<int>::is_always_lock_free);

constexpr auto nums = []{
std::array<int, threads> a{};
for (auto& e : a) {
e = NUM / threads;
}
return a;
}();

std::atomic counter = { 0 };

std::for_each(std::execution::par_unseq, nums.begin(), nums.end(), [&counter](int num) {
std::random_device rnd;
thread_local std::mt19937 mt(rand());
std::uniform_real_distribution<double> score(0.0, 1.0);
auto cnt = 0;
for (auto&& no = 0; no < num; ++no) {
auto&& x = score(mt);
auto&& y = score(mt);
if ((x * x + y * y) < 1.0) {
cnt++;
}
}
counter += cnt;
});

std::cout << "PI = " << 4.0 * counter / NUM << std::endl;
}
posted by zengaichi at 20:05| Comment(0) | 並列プログラミング | 更新情報をチェックする

2019年04月27日

C++17でモンテカルロを並列化してみた(3)

thread_localを付けてみた。
効果は
スレッドごとに乱数の状態を持つ。
だそうだ。
#include <algorithm>
#include <execution>
#include <mutex>
#include <iostream>
#include <random>
#include <array>

int main()
{
static int const NUM = 1000000000;
static int const threads = 10;

static_assert(std::atomic<int>::is_always_lock_free);

constexpr auto nums = []{
std::array<int, threads> a{};
for (auto& e : a) {
e = NUM / threads;
}
return a;
}();

std::atomic counter = { 0 };

std::for_each(std::execution::par_unseq, nums.begin(), nums.end(), [&counter](int num) {
std::random_device rnd;
thread_local std::mt19937 mt(rand());
std::uniform_real_distribution<double> score(0.0, 1.0);
for (auto&& no = 0; no < num; ++no) {
auto&& x = score(mt);
auto&& y = score(mt);
if ((x * x + y * y) < 1.0) {
counter++;
}
}
});

std::cout << "PI = " << 4.0 * counter / NUM << std::endl;
}
posted by zengaichi at 16:09| Comment(2) | 並列プログラミング | 更新情報をチェックする

2019年04月24日

C++17でモンテカルロを並列化してみた(2)

初期化のところを改良してみた。
#include <algorithm>
#include <execution>
#include <mutex>
#include <iostream>
#include <random>
#include <array>

int main()
{
static int const NUM = 1000000000;
static int const threads = 10;

static_assert(std::atomic<int>::is_always_lock_free);

constexpr auto nums = []{
std::array<int, threads> a{};
for (auto& e : a) {
e = NUM / threads;
}
return a;
}();

std::atomic counter = { 0 };

std::for_each(std::execution::par_unseq, nums.begin(), nums.end(), [&counter](int num) {
std::random_device rnd;
std::mt19937 mt(rand());
std::uniform_real_distribution<double> score(0.0, 1.0);
for (auto&& no = 0; no < num; ++no) {
auto&& x = score(mt);
auto&& y = score(mt);
if ((x * x + y * y) < 1.0) {
counter++;
}
}
});

std::cout << "PI = " << 4.0 * counter / NUM << std::endl;
}
posted by zengaichi at 21:36| Comment(2) | 並列プログラミング | 更新情報をチェックする

2019年04月22日

C++17でモンテカルロを並列化してみた。

ご存知、モンテカルロによる円周率計算です。


#include <vector>
#include <algorithm>
#include <execution>
#include <mutex>
#include <iostream>
#include <random>

int main()
{
const int NUM = 1000000000;
const int threads = 10;
static_assert(std::atomic<int>::is_always_lock_free);
std::vector<int> nums;
for (int i = 0; i < threads; i++) {
nums.push_back(NUM / threads);
}
std::atomic counter = { 0 };
std::for_each(std::execution::par_unseq, nums.begin(), nums.end(), [&counter](int num) {
std::random_device rnd;
std::mt19937 mt(rand());
std::uniform_real_distribution<double> score(0.0, 1.0);
for (auto&& no = 0; no < num; ++no)
{
auto&& x = score(mt);
auto&& y = score(mt);
if ((x * x + y * y) < 1.0)
{
counter++;
}
}
});
std::cout << "PI = " << 4.0 * counter / NUM << std::endl;
}
posted by zengaichi at 21:59| Comment(0) | 並列プログラミング | 更新情報をチェックする

2019年04月20日

VS2019 C/C++善戦

Visual Stdio 2019 C/C++のC++ 17の実装が善戦している模様

Clang 8.0では未実装だがVS2019では次のサンプルを実行できました。


#include <execution>
#include <algorithm>
#include <iostream>

int main()
{
std::vector<int> vec = { 3, 2, 1, 4, 5, 6, 10, 8, 9, 4 };

std::sort(vec.begin(), vec.end());
std::sort(std::execution::seq, vec.begin(), vec.end());
std::sort(std::execution::par, vec.begin(), vec.end());
std::sort(std::execution::par_unseq, vec.begin(), vec.end());

for (int x : vec) {
std::cout << x << std::endl;
}
return 0;
}
posted by zengaichi at 19:08| Comment(0) | 並列プログラミング | 更新情報をチェックする

2019年04月18日

freebsdでC++17のfilesystemを使ってみた。まだ実験中

サンプルコードは下記の通り

sample2.cc

#include <experimental/filesystem>
#include <iostream>

namespace fs = std::experimental::filesystem;

int main(int argc, char *argv[])
{
for (const fs::directory_entry &i:fs::recursive_directory_iterator(argv[1])) {
std::cout << i.path().filename().string() << std::endl;
}
return 0;
}

makefileは下記の通り

#
#
#
sample2: sample2.cc
clang++80 -O2 -o sample2 -std=c++17 -Wall sample2.cc -lc++experimental

<filesystem>がある場合にはリンクは-lc++fsにするらしい(実際にそうかどうかは未確認)
g++の場合には-lstdc++fsと設定。ubuntsu 18のg++も実験中
posted by zengaichi at 22:00| Comment(2) | Unix-Tools | 更新情報をチェックする

2019年04月15日

WebAssemblyをfreebsdのLLVM8.0とwasm-ld80で試してみた(3)

importをさらに試してみました。
CとWASM-ASと互換性を持つようにしました。
index-compile.html

<html>
<head>
<meta charset="utf-8">
<title>WASM test</title>
</head>

<body>
<script>
var worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch('simple.wasm'))
.then(mod =>
worker.postMessage(mod)
);
</script>
</body>
</html>

wasm_worker.js

var importObject = {
env: {
imported_func: function(arg) {
console.log(arg);
}
}
};

onmessage = function(e) {
console.log('module received from main thread');
var mod = e.data;

WebAssembly.instantiate(mod, importObject)
.then( function(instance) {
instance.exports.exported_func();
});

var exports = WebAssembly.Module.exports(mod);
console.log(exports[0]);
};


Cの場合:
(Cのimportの場合にはモジュール名がenvとなるようです)
sample.c

extern void imported_func(int param);

void exported_func()
{
imported_func(42);
}

makefile

#
#
#
simple.wasm: simple.o
wasm-ld80 -entry exported_func --allow-undefined --strip-all -o simple.wasm simple.o

simple.o: simple.c
clang80 -c -Oz -target wasm32-wasm -o simple.o simple.c
#


WASM-ASの場合:
(binaryenではcallの引数渡しの記述が変更?)
(Cと互換性を持たせるためにimportではモジュール名を"env"と指定)
sample.wat

(module
(func $i (import "env" "imported_func") (param i32))
(func (export "exported_func")
(call $i
(i32.const 42)
)
)
)

makefile

#
#
#
simple.wasm: simple.wat
wasm-as -o simple.wasm simple.wat
#
posted by zengaichi at 20:21| Comment(0) | Unix-Tools | 更新情報をチェックする

2019年04月13日

WebAssemblyをfreebsdのLLVM8.0とwasm-ld80で試してみた(2)

サンプルを見るとJavaScriptのコードが短くなっていたので試してみました。

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
<title>WebAssembly</title>
</head>
<body>
<input type="button" id="countup" value="CountUp?" />
<script>
WebAssembly.compileStreaming(fetch('sample.wasm'))
.then(module => WebAssembly.instantiate(module))
.then(instance => {
document.getElementById('countup').addEventListener('click', () => {
var cnt = instance.exports.count();
alert(cnt);
}, false);
});
</script>
</body>
</html>

Apache httpdサーバのデフォルト設定だとapplication/wasmとMIMEを返さないので怒られます。
posted by zengaichi at 22:04| Comment(0) | Unix-Tools | 更新情報をチェックする

WebAssemblyをfreebsdのLLVM8.0とwasm-ld80で試してみた

WebAssemblyをfreebsdのLLVM8.0とwasm-ld80で試してみました。

色々他のサイトを眺めながら試してみましたが、オプションや構築手順が変わっているようです。

下記はページのソースとwasmの読み込みとコンパイル、イニシエートのJavaScriptです。

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
<title>WebAssembly</title>
</head>
<body>
<input type="button" id="countup" value="CountUp?" />
<script>
fetch('sample.wasm')
.then(response => response.arrayBuffer())
.then(buffer => WebAssembly.compile(buffer))
.then(module => WebAssembly.instantiate(module))
.then(instance => {
document.getElementById('countup').addEventListener('click', () => {
var cnt = instance.exports.count();
alert(cnt);
}, false);
});
</script>
</body>


cコードは以下の通りです。__attribute__((visibility("default")))を付けていたが今は不要?

int c = 0;

int count() {
return c++;
}

ビルド手順とオプションフラグが分かるようにmakefileを以下に示します。

#
#
sample.wasm: sample.o
wasm-ld80 -entry count -o sample.wasm sample.o

sample.o: sample.c makefile index.html
clang80 -c -O2 -target wasm32-wasm -o sample.o sample.c
#
#
posted by zengaichi at 19:15| Comment(0) | Unix-Tools | 更新情報をチェックする

2019年04月06日

一生もののツール

ロジカルシンキングとか
テクニカルライティングとか

ベーシックなものほど、ツールとは気が付かないもの
posted by zengaichi at 08:07| Comment(0) | 独り言 | 更新情報をチェックする

2019年02月18日

AVRトランジスタの容量測定

意外と精度が良いかも?
5%~20%の誤差とすれば。
ちなみに測定したのは100pF5%のシロモノ
posted by zengaichi at 20:02| Comment(0) | Tools | 更新情報をチェックする

2019年02月10日

映画にみる耳に痛いお言葉

映画の鑑賞中にセキュリティでも思える耳に痛いお言葉です。

引用
冗談でしょう
規定や手順で”管理している”と思うだけ
模型が好きな男の子と同じよ
何一つ管理下にない
posted by zengaichi at 17:04| Comment(0) | セキュリティ | 更新情報をチェックする

2019年02月09日

専門家の専門外無知識度とセキュリティ

テクニカルなことはよく知っているのだが、
専門外のことになるとリスクを低くしたがるし
さらには己の知識内で判断したがる
さらにはリスクの外に追いやる
posted by zengaichi at 15:41| Comment(0) | セキュリティ | 更新情報をチェックする

2019年02月05日

通勤電車のスマホサーファ


見ざる…スマホで
聞かざる…イヤホンで
言わざる…マスクで

スワイプしながら
車中で身体をゆらゆらしながら
posted by zengaichi at 20:11| Comment(0) | 独り言 | 更新情報をチェックする

2019年01月26日

安全を確保しながら進むのが極意?

セキュリティの構造的には

最初に安全な経路(パス、導線など)を確保してから進む

極々当たり前だが
posted by zengaichi at 17:37| Comment(0) | セキュリティ | 更新情報をチェックする

2019年01月12日

国語力の低下

報告書見ると

普段
ちゃんとした文章を書くことが少ないのか
片言単語しか使わないのか
感情表現が多いのか

国語力の低下を招いているよね
posted by zengaichi at 14:40| Comment(0) | 独り言 | 更新情報をチェックする

2019年01月06日

さっそくAVR トランジスタテスタを改造( ̄. ̄

バッテリの警告が出るので

本家の回路図とキットの回路図を比較すると

キットはUSBから給電するが、キットの回路ではバッテリモニタがオープンのまま

ICのバラつきでまちまちの値になる

本家の回路ではバッテリの電圧を抵抗で分圧しバッテリモニタに接続

分圧した電圧は、バッテリ電圧が9Vだと2.2V付近

そこでP27のLT1004-2.5Vのリファレンスを使い、バッテリモニタのP28とショートさせる

これでバッテリの警告を抑止する。
posted by zengaichi at 21:44| Comment(0) | Tools | 更新情報をチェックする

AVRトランジスタテスタを作ってみた

AVRトランジスタテスタを作ってみた

秋葉原で買ったキットを組み立ててみる

このキットはヨーロッパのオープンソースで公開しているものをキット化したもの

興味がひかれたところは、

hFEの計測でトランジスタのベース電流が10μAだけでなく16mAもサポートしていること
(完成したばかりなので、後日、試すところ)
(ベース電流が小さいとパワートランジスタが計測できない)

それ以外にもLやC、Rも計測できる。
カーボン抵抗5%を測ってみると、それなりに精度はあるみたい。
安物の日本製のハンディテスタと比較してみたところ、下3桁目が異なる程度

忘備録として
ダウンロードしたファイルを展開したパスは
transistortester\transistortester\Software\trunk\mega328
ここにある以下の2つのファイルはINTEL HEXフォーマットで
TransistorTester.eep
TransistorTester.hex

このファイルの2つをTLS866CSに読み込ませる時に注意が必要
前者のファイルはデータ領域に読み込むように指定し、フォーマットをINTEL HEXに変更
後者のファイルはコード領域に読み込むように指定(ファイルの拡張子で自動的にINTEL HEXになる)
コンフィグは手でCKDIV8=0のチェックを外す





posted by zengaichi at 18:11| Comment(0) | Tools | 更新情報をチェックする

2019年01月04日

確度が落ちた、落とされた?

久々にネットワーク診断ツールを使ってみた。

数年前は、診断結果に断定的な情報を表示していたが、
特定する範囲を広げて表示する。
(指摘内容が変わるわけではない)

(・・? フリー版だから?
それとも、転用されないように?
posted by zengaichi at 18:56| Comment(0) | セキュリティ | 更新情報をチェックする