2011年4月29日金曜日

( NTT + au + docomo + SoftBank + EMOBILE ) < Google

Googleが真面目に日本で通信実験やったら
auもdocomoもSoftBankもEMOBILEも
キャリア関係なく潰れそうだなぁ
と予想
結局人間の多いところ(人口密度 数百/km2以上?)にしか基地局も回線もないから
ちょっと人の少ないところに行くと当たり前のように繋がらなくなる

そのくせ通信料は月6千〜1万2千
6千だと月1個iPod shuffleがかえる
1万2千だとiPod nanoかな 1年待てばMacBook Proが買えますね
普通のWinPCなら年1台〜3台程度の計算

ろくにつながりもしないインターネットにこれだけのカネは払ってられない

Googleが本気出して通信試験を日本で始めれば
携帯各社は用無しになる可能性が大きい
あと日本は縦に長いから暑い地域から寒い地域まで
様々な環境で実験ができるよ とか言ってみたり

まぁつまるところ日本にろくなキャリアはないということで

2011年4月20日水曜日

真面目にコンセントの数を数えてみよう

とある文献によると
「理系の条件はコンセントが大量にあること」
らしい
嘘かホントか知らないけど数えてみた
18個
え?

タコ足配線+イカ足配線
といったところ

何に使ってるか


  1. PC(ディスクトップWin7)
  2. MacBook Pro
  3. iBook(10年くらい前のMacノート)
  4. Xbox360
  5. 画面 24W
  6. 画面 19N
  7. 無線LAN
  8. LANハブ
  9. プリンタ
  10. PocketWiFi
  11. スピーカー
  12. AC電源(15V1.6A)
  13. AC電源(5V2A/12V2A)
って感じ
ときどきストーブなり半田ごてなり
いろいろ付くけど
結構使ってるんだなぁ

もし自分で部屋を設計するとしたらひどいことになりそう

2011年4月19日火曜日

iPodで電波時計

先日秋月電波時計で遊んでみようと思ったら
JJY40kHz局が停波中だった

これは福島原発の喪失によって電力が足りなくなるためだが
そのまま今となっては何をやろうとしていたのかすら思い出せない状態だが

こんなモノを見つけた
http://itunes.apple.com/jp/app/jjy-simulator/id431054911


要はiPod/iPhoneなどで電波時計を校正するというものだ

直接40kHzを出すのは難しいので13.3kHzを出す
詳しいことは専門に任せるとして

iPod touch 4Gに付属のイヤホンで使ってみた
数分後には正常(に近い)時間に校正されていた

しかしこの電波時計
RS232端子もあるんだからPCからコマンドで送れるようにしても面白いと思うんだけどなぁ…

2011年4月15日金曜日

自分がニコニコ生放送を使いたくない理由

現状
自分が知ってる中で手軽に生放送をすることができるのは
ニコニコ生放送 と Ustream です
それぞれ一長一短があるけど
ニコニコ生放送で配信はしたくないなぁ
というのが本音
理由はいろいろあるんだけど
視聴者の問題が多い
暴言を吐く人しかいない
それ以外の人はコメントしてくれない

以前に「音声テスト配信」をやっていて
たまたまマイクがミュートの時に来た人がいました
その人は「音声テストなら音を出せ」と
やんわり書いてもこんな感じの暴言を吐いて行きました
テスト配信なんだから音が出ないのも仕方ないでしょ
と言いたいわけですが

ということで
自分がユーザー生放送に合わないだけなのかもしれないけど
ニコ生よりはUstのほうが好きです
Ustが好きな理由は何も無いです
ただ ニコ生よりはUstのほうが気楽 というだけです

2011年4月14日木曜日

Webサーバーについて

前の前のエントリ位で書きましたが
ArduinoはWebサーバーとしても使えます
(ちゃんとしたサイト構築は難しいですが)

その次に「NetduinoにはArduinoには無い使いやすさがある」とも書きました

もちろんArduinoPlusにはLANコネクタやSDカードスロットがあるので
SDに保存したWebページを表示することも可能と思われます
(ArduinoPlusではなくNetduinoPlusです:2011/06/21)

C#でWebサーバーの関数を書いてやれば
HTMLだけではなくSSIやPHPなども可能であり
チャットなど様々な機能を追加することだって可能です
と 思います

というのは
Arduinoには公式でWebサーバーがサポートされていますが
Netduinoの場合
Forumでサンプルが置いてあっても
公式ではないので
安定性に問題があります
(気分により繋がらなくなったりします)

これはさすがに気持ち悪いので
自分でサーバーをつくろうと思ったら
今度は.NetFullのコードは動きません
うーむ・・・ 困った…

それに内部クロックの問題もあります
Netduinoの場合
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");
とやれば 西暦/月/日 時:分:秒 の文字列が取り出せますが
これは電源が入った瞬間を 2009/01/01 12:00:00としているので
2年以上ズレている計算です
AddHourなどで補正してもいいですが
どちらにしろめんどくさい

ということで
Netduinoは高性能なりの使いにくさがあるわけです

誰か日本語フォーラム作ってくれよぉ と叫びたいです
叫びます

まぁ 本家フォーラムを見れば
多少のコードは使えますが
やっぱ英語が読めない自分は辛い


話がそれましたが
要は.NetMicroFrameworkは 使いやすいけど使いにくい


そもそもMSDNも日本語版ねぇし…

2011年4月13日水曜日

Netduino Plus で SDカード に テキスト を 保存 する

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace SD
{
    public class Program
    {
        public static void Main()
        {
            try
            {
                if (Directory.Exists(@"\SD"))
                {
                    FileStream fs = new FileStream
                        (@"\SD\\test.txt", FileMode.OpenOrCreate,
                        FileAccess.Write, FileShare.None, 512);
                    StreamWriter sw = new StreamWriter(fs);
                    sw.WriteLine(
                        "hello world" +
                        DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")
                        + "done.");
                    sw.Close();

                    Debug.Print("\r\n完了");
                    Thread.Sleep(6000);
                }
                else
                {
                    Debug.Print("\r\nSDカードが見つかりませんでした");
                    Thread.Sleep(6000);
                }
            }
            catch (Exception ex)
            {
                Debug.Print(
                    "\r\n不明なエラー\r\n\r\n *********\r\n\r\n" +
                    ex.Message);
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(6000);
                }
            }
        }
    }
}


↑のようなプログラムでSDカードに書き込むことができます
(実験用なのでデバッグコードが書かれています)

ちなみに参照設定を右クリック>参照の追加でSystem.IOを追加してやる必要があります
(普通のWin上のC#の場合 using System.IO; と書き加えるだけでいいので 5分くらい悩みました)

このプログラムでは
  1. SDカードが存在するか確認する
  2. 存在した場合ルートに test.txt というファイル名でテキストファイルを作成する
  3. 正常に完了した場合"完了"と表示する
  4. エラーが出た場合はその旨を表示する
  5. SDカードが存在しない場合はその旨を表示する
という動作をしています
ただ変な文字が書き込まれる場合があるので
SDをフォーマットしてから使用したほうがいいと思います
(おそらくFWのバグで以前の同ファイル名の残骸)

また表示というのはVisualC#の出力ウインドウに表示され
エラー以外は6秒 エラーのみ60秒表示しています

ちなみにSDHCカード等 非SDカード(容量が2GB以上の物)を使用した場合は
SDカードが挿入されていない旨の表示がされるので
注意が必要です(書き込みもされません)

まぁ大体C#と同じ感じに扱えます
というかほとんど同じです
ストリームでファイルを開き
Writeで書き込み
クローズで保存します

ファイルやディレクトリの存在確認もExistsで可能です


NetduinoPlusはさすがにモデルロケットに搭載できるサイズでもないし値段でもないですが
もっと大型のロケットとか ラジコン飛行機などに積んで
加速度や温度を記録すれば面白いかも
2GBという(この用途では)大容量な容量を使うことができるので

ちなみに温度を1箇所分記録させる場合
時間を同時に記録しても多くて30バイト
手持ちのSDカードは2002419712バイトの容量だったので
66747323回
1日に1440回(1分毎)記録しても120年以上記録できる計算です

1日に20回程度なら「長期的な」温度変化も観測が可能ですw


脇道にそれましたが
NetduinoにはArduinoには無い使いやすさがあるので
気が向いたら試してみてください

※ちなみにArduinoでもSDに書き込む程度なら簡単です

ArduinoでHello world

とりあえずサンプルソースをそのまま使っただけですが


#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x1C, 0x2A };
byte ip[] = { 192,168,1, 117 };

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          client.println("<title>Arduino Es T</title>");
          client.println("hello world<br/>");
          client.println("Arduino Ethernet Shield");
          
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

こんな感じです
MACアドレス(0x90, 0xA2, 0xDA, 0x00, 0x1C, 0x2A)はEthernet Shield裏側(Arduino側)に貼られているので
各自対応してください
IPアドレスは気まぐれでこの数値になりましたが
他の端末と競合しないアドレスにしてください
このサンプルの場合
http://192.168.1.117/
にアクセスするとHello worldが表示されます
(もちろんArduinoにソースを書きこんでEthernetShieldをPCと同じネットワークに所属させてあるのが前提)
以上

2011年4月9日土曜日

ロータリーエンコーダ

を使ってるんだが
チャタリングがひどくて実用に耐えない
前に作ったときは大した対策しなくても良かったんだけど
何が違うんだろうね
まぁ心当たりがないわけじゃないけど

大量の印刷

データシート
約400ページ
英語
印刷したいんだが…
両面印刷で200
小さくしてA4が100枚
これはもうインク量とかがね

カートリッジ1個で約250枚印刷できるらしい
両面印刷で120枚程度
となるとデータシート1種類印刷するだけで
インク代だけでも1000円
紙代別
さすがに
辛いものがある

CQ出版あたりから出てこないかなとかw

日本語訳で完全版でたら3kまでなら速攻買いますので
5kならなんとか買うかな

自分の使ってる石が増えるとデータシート読むだけでも嫌になる
iPad2買おうかなぁw

2011年4月8日金曜日

ついでに

こんなのもつくってみた



指定した桁数のランダムな数値を作成
C#intで表せる桁数なら何桁でも行けるはずです

パスワード生成ソフトとかだと20桁とかしかないので
一発で作りたかったなど…
まぁもちろんパスワード生成ソフトとしても使えますね
数字しか対応してないのでおそらく弾かれますが

using System;
using System.Windows.Forms;
namespace Ran
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int i = int.Parse(textBox1.Text);
                string s = "";
                Random myran = new Random();
                while (true)
                {
                    s += myran.Next(0, 99999).ToString();
                    if (s.Length > i)
                        break;
                }
                richTextBox1.Text = s.Substring(0, i);
            }
            catch { }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Clipboard.SetText(richTextBox1.Text);
        }
    }
}
んなかんじ

100桁近い計算を正確に計算 を実装してみた

PCなどでプログラムを書くときは
8ビットや16ビット 32ビットなどのビット長で計算します
しかしこの方法ではあまり大きな数字は計算できません
と言っても32ビットあればだいたいの計算は可能ですが
国家予算とかは無理らしいです
んでこの計算をするプログラムを作れという問題がありました

ということで


作ってみました↓





まだ足し算しか実装していませんが
100桁近くなると計算する方法がないので
答え合わせができません
学校の課題とかなら
5人でひとり1個つくって
すべての答えが同じなら正しい
とかできるかもしれないけど
なにぶん中卒ニートなもんで
周りにプログラミングやってる人もいないし
ということで
正解かどうかはわかりません
筆算でやるのも気力失うし
まぁざっと見たところではいいんじゃないでしょうか

ということで 正確に計算 とか言ってますが 精度は

知らんがな(´・ω・`)
って感じです
ちなみにこのプログラムでは理論上では2万桁くらいは行けるはずです
んなもんやる気になりませんがね

足し算しかないですが
気が向いたら引き算掛け算なども実装するかも
割り算はアルゴリズムが思いつかないので
思いつき次第ですね

あとこのプログラムでは小数点は扱えません
ってことで
何ドル何セント
みたいな計算は無理
何円何銭(?)
とかも無理
整数だけです
まぁセントが扱いたければドルをセントに換算すればいいんだ 計算上2万桁可能なはずだし…
でもセントになると2万桁でも足りなかったり?
んなこたぁないはずだが

あとBloggerのHTMLがカオスになるのなんとかなんないかなぁ