1/fゆらぎでLチカ

投稿日:

 さて、他の人もよくやっている「1/fゆらぎのLチカ」を、私もマネしてやってみる。

 こちらこちらのサイトを参考にさせていただく。よく使われるのはこの「間欠カオス法」だそうである。

間欠カオス法
0.0\leqq x\leqq 1.0として
x<0.5のときx=x+2x^2
x\geqq 0.5のときx=x-2(1-x)^2

 ただし、参考にさせていただいた各サイトによると、この間欠カオス法は、0.0付近や1.0付近に値が貼り付き易いので、0.0や1.0に近くなったら乱数を入れてやるとよいとのことである。実際に試すと、たしかに、長時間ちらつきがなくなったり、消えたままになったりしやすい。そこで、そうなったときに乱数を入れ、中間付近の適当な輝度で光らせるようにしてある。

 青色要素を少なくして、ろうそくの色合い風なちょっと黄色味がかった色にした。

//
//  f1Fluctuation.ino
//    1/fゆらぎでLチカ
//    佐藤俊夫
//    27.06.28(日)1700~
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  int f = 0.0;
  
  f = f1Fluctuation();
  analogWrite(R, 255 - f);
  analogWrite(G, 255 - f);
  analogWrite(B, 255 - (f * 0.2));
  delay(20);
}


int f1Fluctuation(){
  static float x = 0.1;
  if(x < 0.5){
    x = x + 2 * x * x;
  } 
  else {
    x = x - 2 * (1.0 - x) * (1.0 - x);
  }
  if(x < 0.05 || x > 0.995){
    x = random(10, 90) / 100.0;
  }
  return((int)(x * 255));
}



今度は鬱陶しく

投稿日:

 今度はできるだけ鬱陶しく汚くLEDを光らせてみた。 見ていて疲れる。

//
//  badLight.ino
//    今度は3色LEDをできるだけ鬱陶しく汚く光らせたい。
//    佐藤俊夫
//    27.06.28(日)
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  digitalWrite(R, random(2));
  digitalWrite(G, random(2));
  digitalWrite(B, random(2));
  delay(100);
}



蛇の目にLED

投稿日:

 3色・ドライバICなしのLED。Arduinoは20mAくらいしか電流が流せないから、光らせるのに各色いちいち抵抗を付けなければならず、そのたびにブレッドボードでチマチマやるのが面倒くさい。

 それで、昨日作ったAC100Vオンオフモジュールの余りの蛇の目基盤に、同じく余りのピンヘッダと抵抗をつけて、LED基盤にした。

IMG_3055
IMG_3056

 シンプルになって、なかなか良い。



美しくLチカ

投稿日:

 3色LEDにサインカーブでPWMをかけ、できるだけ美しく色変化をかけたい。実はこれは前にもやったが、もうちょっとコードを美しくしたいのであった。

 3項演算子があったらなあ……。

//
//  sinCurvePWM.ino
//    3色LEDをできるだけ幻想的に美しく光らせたい。
//    佐藤俊夫
//    27.06.27(土)
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  static float thetaR = 0.0, thetaG = 0.0, thetaB = 0.0;
  const float PI2 = 2.0 * PI;
  const float Rtic = PI2 / 1000.0, Gtic = PI2 / 900.0, Btic = PI2 / 1100.0;
  
  thetaR += Rtic;
  thetaG += Gtic;
  thetaB += Btic;
  if(thetaR >= PI2) thetaR = 0.0;
  if(thetaG >= PI2) thetaG = 0.0;
  if(thetaB >= PI2) thetaB = 0.0;
  analogWrite(R, 255 - sin255(thetaR));
  analogWrite(G, 255 - sin255(thetaG));
  analogWrite(B, 255 - sin255(thetaB));
  delay(20);
}

int sin255(float theta){
  return((int)((sin(theta) + 1.0) * 127.5));
}



日々思い通りにはいかぬもの

投稿日:

 帰宅。

 今日は日本ITストラテジスト協会関東支部の月例会があったが、仕事と用事が重なり、行けなかった。今回の月例会のテーマ別ディスカッションもぜひ聞きたいと思っていた内容だったので、残念である。人生、なかなか、こうしたいああしたい、と、思ったようには運ばぬものだ。

 忙中有閑。仕事は朝に引けたから、帰りに秋葉原へ寄り、挨拶がわりにヨドバシのスタインウェイをちょっと弾く。

media-20150621

 いつものショパン3曲弾くなど。

 千石電商と秋月電子で少し買い物をする。2000円ほども使えばたっぷり楽しめる。我ながらなんとささやかなこと。

IMG_3029

 今回買ったもののうちでも、出色の傑作は、このたった250円の小さなキットだろう。

IMG_3030

 これは、TTL5VでAC100Vを扱うためのリレーなのだが、昔のリレーとは違って、機械電磁式ではなく、電子式の無接点で、部品点数も極めて少ない。しかも100Vで25Aも流せる。これは、この方のブログ記事で見て知ったのである。

 それから、もうひとつはこれだろう。Arduinoのシールド基盤に小さなブレッドボードを載せることができるもの。

IMG_3031

 帰宅してみると、先週作った「メールサーバお知らせランプ」、赤い点滅で、100通以上の未読がある。

 電子メールを読み出すと、動画のように緑色の点灯に変わる。

 さて、一週間、誤動作なく動いていた「メールサーバお知らせランプ」だが、さっさと回路をバラしてしまい、次の作品を作ることにする。

 秋葉原で買ってきたものを取り出し、半田鏝を温めて、なにやらごそごそと活動する。

IMG_3038
なにやら組み立てる

IMG_3039

 このちっぽけな基盤がAC100VをTTLで扱うためのキモである。

 これを、Arduinoにつなぐ。先日買った超音波センサを、今日買ったブレッドボードシールドに取り付け、回路はこんな具合にする。

IMG_3043

 スケッチを書く。こんな感じだ。

//
//  superSonic2AC100.ino
//    27.06.21(日) 1500~
//    SatoToshio
//      Arduino + 超音波センサ + ソリッドステートリレーで、
//      人が近接したら扇風機などを回す。
//
const int TRIG = 8, ECHO = 9, SSR = 10;
float ranges[10];
int arrcount = 0;
const float THRESHOLDRNAGE = 100.0;

void setup() {
  Serial.begin(9600);
  pinMode(TRIG,OUTPUT);
  pinMode(ECHO,INPUT);
  pinMode(SSR, OUTPUT);
  digitalWrite(SSR, LOW);
}

void loop() {
  float range = 0.0;
  delay(1000);
  range = ranging();
  ranges[arrcount++] = range;
  if(arrcount >= 9){
    arrcount = 0;
  }
  //  THRESHOLDRANGE以下が何割かを調べる。雑音除去のため。
  int rangecount = 0, i = 0;
  for(i = 0; i <= 9; i++){
    if(ranges[i] < THRESHOLDRNAGE){
      rangecount ++;
    }
  }
Serial.println(range);
Serial.println(rangecount);
  if(rangecount >= 6){
    digitalWrite(SSR, HIGH);
  }else{
    digitalWrite(SSR, LOW);
  }
}

float ranging(){
  float time = 0.0, range = 0.0;

  digitalWrite(TRIG,LOW);
  delayMicroseconds(1.1);
  digitalWrite(TRIG,HIGH);
  delayMicroseconds(1.1);
  digitalWrite(TRIG,LOW);
  time = pulseIn(ECHO,HIGH);
  if (time > 0.0) {
    range = (time / 2.0) * 340.0 * 100.0 / 1000000.0;
    if(range > 500.0){
      range = 500.0;
    }
    return(range);
  }else{
    return(9999.0);
  }
}

 で、これで何をするかというと、「人が近づくと部屋のミニ扇風機が回る」というのをやりたかったわけだ。暑いから(笑)。

IMG_3041

 組み付けたプロトはこんな感じだ。100円ショップで買ったアクリルの仕切りグッズにスペーサーで取り付けてある。

IMG_3042

 自分の部屋に入ると、扇風機が回り出し、涼しい。



犬入札

投稿日:

 私はなぜか犬の調達の発注側の担当者で、入札をかけなければならないことになった。

 発注側担当者であるからには、犬についてどんなことでも知っていなければならない。しかし、私は犬については素人であり、そのような部署に配置されて、毎日困り果ててしまっていた。

 そんな日々、これもどうしたわけか、某大手IT企業で営業をしていたはずの知り合いが、なぜか犬屋の営業に転職しており、知り合いの(よし)みで、陰でいろいろと教えてくれた。とても助かった。

 ある日、なんだか、マスチーフとゴールデンレトリバーと(ちん)などを一緒くたにしたような大型犬の写真が問題になった。はっきり言って醜い犬で、肥満しており、目つきもぼんやりと小さく、毛足もボサボサだ。肩の高さは50センチか60センチもあるが、贔屓(ひいき)めに見ても賢そうとは言えない。

「これ、何ですか?」

と、その知り合いの犬屋の営業氏に聞いてみたら「これはチワワだ」という。

「へっ?チワワ!?そんなバカな、チワワは小型犬でしょう?」

「あ、佐藤さん、佐藤さんは犬が専門でないからご存知ないと思いますが、チワワを飼うときは、育たないように餌をあまり与えないようにするんですよ。そうするとずっと小型の愛らしいままなんですが、つい可愛さに負けて、ほしがるだけ餌を与えると、どんどん大きくなってしまって、こういう阿呆(あほ)のような姿になってしまうのです。大きくなっても知能は小型犬のままで、盲導犬とか救助犬とか警察犬とかの使役犬には使えないし、ウドの大木みたいなもんで、病気にもかかりやすくなって、困ったことになるんですよね」

「へぇーっ……そ、それは、し、知らなかったなあ。い、いやあ、いつもいろいろと教えてくださって、本当にありがとうございます」

「いえいえ、どういたしまして。……そういえば、もうすぐ公示でしたっけ、どうか佐藤さん、よしなにお取り計らい下さいよ」

「すみませんねえ、いつも直接お力になることができなくて……」

「いやあ、わかっておりますよ、佐藤さんのお立場は。祈ってくださるだけで結構ですよ」

……などというほのぼのとした会話があった。

 入札は電子入札になった。ところが、この営業氏は電子入札に1分ほど遅れてしまって、入札できなかった。締め切りになるところを、契約担当部署に入札書持参で大慌てで駆け込んできて、システム障害のための不可抗力だ、どうか何卒(なにとぞ)、非電子入札の書面で受付をお願いします、と懇願した。

 契約担当者も渋い顔をしたが、熱心に平身低頭する営業氏に負けてしまい、つい、入札書を受け取ってしまった。

 結局、落札したのはこの営業氏の商店だった。予定価格と比べて適正だし、なにより最も安かったのだから、それはルールどおりといえばルールどおりではある。

 ところが、納品内容の説明を聞くと、例のデカくなってしまって役に立たない、ウドの大木チワワを納品するというのである。契約担当者は腹を立て、

「あなたねえ、本来だったら遅刻した時点で資格喪失してるの、わかってるでしょう?本当なら落札できないんですよ!?それをこんなバカ犬を納品しようって、何を考えてるんですか」

「でも、でもでも、結局は入札をお受けくださったじゃないですか、ひっくり返すのはずるいですよ。仕様書には『犬』としか書いていないはずです。公定の仕様書にしたがって落札したんですよ。それに、約立たずのでくチワワだって、命のある生き物なんですよ、あなたにはそういう万物の霊長としての慈悲ってものはないんですか」

「キミは何を言っているんだ!」

……と、いうようなモメごとに発展して、発注担当の私が契約担当と営業氏の間に立ってオロオロしているというところで、目が覚めた。

 ああ、よく寝た。それにしても、ヘンな夢だったなあ。

 今日もメシは一つ覚え、チョコレート3かけら、()れたてのアイスコーヒー。

撮った写真を並べて動画化

投稿日:

 それで、デジカメの電池がなくなるまでベランダ写真をとり、雲の流れる動画にした。

 しかし、今日は良く晴れていて、雲があまりないので、いまいち雲が流れる感じはしないのであった(笑)。

昨日の雨は

投稿日:

image

 昨日の女梅雨ふうな降り方は、はや梅雨入りかな、とも思わせたが今日は爽やかな初夏の快晴である。

 メシがわりにアイスコーヒーを淹れて、チョコレート三かけ。

 今日は日本ITストラテジスト協会の関東支部月例会に出るつもりでいたが、日にちを間違えていて、月例会は先週行われてしまった。まことに迂闊なことだった。

昨日、日本ITストラテジスト協会関東支部の月例会をすっぽかしてしまった。

投稿日:

 昨日、日本ITストラテジスト協会関東支部の月例会があり、テーマ別ディスカッションが私の仕事にもつながる内容だったので出たかったのだが、どういうわけだか日にちをすっかり来週の30日(土)と取り違えていて、出そびれてしまった。

 しかし、昨日は次女の運動会だったので、仮に日にちを取り違えていなくても、月例会には出られなかったと思う。

 来月もまたスケジュールが合わず、出られない。うーん、最近忙しいのう。

NESMAと野村総研技法

投稿日:

 ソフトウェアの外注で値段の尺度を出すのに、どうも「ダロカン」みたいなのに頼る向きが周囲に多く、定量的な尺度を持ってもらいたいものと常々思っている。

 FPでは規模は出るが、工数、ましてや金額など出ない。それで、SLOC/FPの統計を適切なところから引っ張ってきて、SLOCから人月を出し、人月単価をまた適切なところから引っ張ってきて、それで金額にする、ということをよくやる。これはCOCOMOの技法に似ている。

 ただ、ユーザがIFPUG法でFPを出すなんてことは、きちんとしたIT部署を持っていないと難しいと言わざるを得ない。

 そこで私はよく、「データモデルを迅速に作る」→「NESMA技法と野村総研技法を応用してアレンジした方式でFPを出す」ということをやる。不正確で誤差も大きいが、ダロカンで見積もって根拠がないために紛糾するよりはマシだと思っている。

 野村総研はNESMAに近い迅速方式を公表しており、ドキュメントもこのようにある。

  •  注目される新しいビジネスモデルのプロジェクト見積り手法(野村総研サイト資料)
  •  以前はオランダ・NESMAのサイトには日本語のPDFドキュメントもあったが、今は見当たらないようだ。しかし、NESMAは存外に雑な方法と言うわけではなく、今やISOにも入り、「ISO/IEC 24570:2005」として確固たる権威を持っている。

     ただ、これらの方法を用いるには、誤差が大きいということをよくわきまえ、それを関係者全員に周知徹底する必要がある。そうしないと、後になってまたぞろ紛糾することになる。

     そのことを説明するために、IPAの出している資料類を用いることもする。

  •  ソフトウェア開発データ白書(IPAの資料)
  •  この129ページ辺りの資料を示して説明すると、だいたい多くの人は納得する。