みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

楽天モバイルをつかってみて

2021年09月21日 19時15分54秒 | IT・デジタル
2年ほど格やすスマホを利用してきました。

ただし、ひとつ おとしあなが。

詳細な通信の しくみを しらずに契約して、実際に つかってみると、電池の へりが はやいのです。おなじ機種をつかっている ははの ばあいは 電池が ながもちしています。設定は ほとんど おなじ (どちらのスマホも わたしが設定しました)。契約したプランが ちがうだけです。

どうやら、わたしが契約した回線ではグローバルIPアドレスが わりふられるために、無用のパケットが頻繁に着信して端末のスリープが さまたげられ、電池が はやく へっていくようです。ほとんど まちうけの状態でも、1日で電池が20%へります。そんな こんなで、ライト ユーザなのに ふつかに1回充電する始末。

我慢して つかってきましたが、やはり電池の へりが 気に なります。

楽天モバイルが3ヶ月無料のキャンペーンをやっていたので、ためしに つかってみる ことに しました。

今月の はじめに つかいはじめて そろそろ はつかに なります。楽天モバイルは まだ新興の通信事業者なので、電波の はいりぐあいが わるいかと おもっていましたが、わたしの行動圏内では ほぼ つながっています。

自宅でも近所でも つながります。都心の地下街でも、地下鉄の駅でも、地下鉄が駅間を走行している あいだも ずっと つながっていました。えらいっ! 都会の生活では地下で つながるかどうかも重要なのです。

楽天モバイルは かなり がんばって基地局を整備しているようです。

でも、なかには電波が はいらない大型スーパーも。いまのところ、その おみせの なかで つながらなくても おおきな問題は ありません。そこでバーコード決済 (○○ペイの たぐい) を つかう わけでは ないので。

ただ、9/11の午後に突然 楽天回線に つながらなくなって、びっくりしました。つながらないと、なにが おきているか 確認することも できません。あとで大規模障害と しりました。以前から つかっていた回線契約をのこしてあったので、その回線が つながって、実害は ありませんでしたが。

障害が発生したときは、他の通信事業者の回線に ふりかえて通信できる しくみがあると たすかります。鉄道では、事故や災害で不通に なったときに、並行して運行する他の鉄道事業者の便に ふりかえる あつかいが 普通に おこなわれています。モバイル通信でも、通信速度をおおはばに制限して かまわないので、最低限の情報を収集できる程度の通信が確保されると安心です。

※ この記事の本文からは漢字の訓を排除しています。

出力反復子が さすデータの かた

2017年06月30日 21時58分02秒 | IT・デジタル
C++でのコーディング。文字列のキーとともに文字列を格納するコンテナを定義しました。便利に つかっていましたが、取得した文字列をデータ列と みなして解釈し、そのデータ列を任意のコンテナに格納する機能を実装したいと おもいました。たとえば、キーを指定して取得した文字列を (コンマ区ぎりなどの) 数値列と みなして、それぞれの数値を任意の かた (intやdoubleなど) に変換してコンテナに格納する機能は、利用する機会も おおいでしょう。

データ列の かたは いろいろ かんがえられるので、外部からはget()メンバ関数をよびだし、そのget()メンバ関数が内部でデータ列の解釈方法を指定して別のメンバ関数をよびだすように構成します。
class A
{ public:
	...
	// 外部からはこの関数をよびだす。
	// データの かたに よって分岐させるためのヘルパ関数
	template <class OutIter>
	 OutIter get(const std::string &key, OutIter oi) const;

protected:
	template <typename T> struct StringParser;

	// 実際の処理では、上記のget()が以下のget()をよびだす
	template <class Parser, class OutIter>
	 OutIter get(const std::string &key, Parser parser, OutIter oi) const;
	...
}

// データ解釈用の関数オブジェクト群
template <typename T> struct A::StringParser
{
 T operator () (const std::string &s);
};

template <> struct A::StringParser<int>
{
 int operator () (const std::string &s) { return std::atoi(s.c_str()); }
};
template <> struct A::StringParser<long>
{
 long operator () (const std::string &s) { return std::atol(s.c_str()); }
};
// and so on...

template <class Parser, class OutIter>
 OutIter A::get(const std::string &key, Parser parser, OutIter oi) const
{
	while (...) {
		...
		// いろいろな処理
		...
		*out_to++ = parser( elem);
				// かたによる処理の ちがいをparserで吸収
	}
	return oi;
}

// クラス外からはこのget()をよびだす
template <class OutIter>
 OutIter A::get(const std::string &key, OutIter oi) const
{
	return get(key, StringParser< decltype(*oi) >(), oi);
}

void f(A &a)
{
	std::vector<int> v;
	a.get(key, std::back_inserter(v));
	...
}

でも、これは不正なコード。decltype(*oi)がintに なることを期待していますが、そうは なりません。back_inserter()で生成される反復子の かた (クラス) はback_insert_iterator<Ctn>ですが、back_insert_iterator<Ctn>::operator *()が かえす かたは そのクラスに対する参照 (back_insert_iterator<Ctn> &) です。decltype(*oi)はback_insert_iterator<Ctn> &になります。これに対応するStringParserは ありませんから、コンパイル エラーが でます。

関連記事: 2014年9月5日: だまされてる?

上記のA::get()を以下のように かきかえることも できません。
template< class OutIter>
 OutIter A::get(const std::string &key, OutIter oi) const
{
 return get(key, StringParser< typename std::iterator_traits<OutIter>::value_type >(), oi);
}

iterator_traits< back_insert_iterator<Ctn> >::value_typeはvoidなので、上記の第2パラメータはStringParser<void>()に なってしまいます。もちろんvoid用のStringParserは定義できないので (文字列からvoid値を取得するのは無意味ですし、データの解釈方法も判別できません)、この方法でも問題を解消できません。

たしかに出力反復子の もどりがたを一般的に定義することは できません。でも、ポインタと おなじ はたらきをする反復子など、特定の反復子に ついては正当な かたを定義できるのだから、これくらい できても いいんじゃないかとC++の仕様に文句をいうわけです。

しかたが ないので
template <typename T, class OutIter>
 OutIter A::get(const std::string &key, OutIter oi) const
{
	return get(key, StringParser<T>(), oi);
}

void f(A &a)
{
	std::vector<int> v;
	a.get< decltype(v)::value_type >(key, std::back_inserter(v));
	...
}

として しのぐことに しました。うーん。不格好だし、ながったらしいなぁ。

template <class Container>
 void A::get_push_back(const std::string &key, Container c) const
{
	return get( key,
		StringParser< typename Container::value_type >(),
		std::back_inserter( c));
}

void f(A &a)
{
	std::vector<int> v;
	a.get_push_back(key, v);
	...
}

結局、push_back専用のメンバ関数を用意することに。ようやく すっきりしました。ほかにpush_front版やinsert版も かんがえられますが、この関数はデータ列を先頭から解釈して順番にコンテナに格納することから、頻繁に つかうのはpush_backでしょう。ほかのバージョンは「不格好」版をつかうことにします。

※ この記事の本文からは漢字の訓を排除しています。

ハード ディスク レコーダーが起動しない

2016年03月04日 22時20分14秒 | IT・デジタル
テレビをみるのは きまって夕食どき。それも、厳選して録画した番ぐみだけをみます。

きょうも夕食まえにハード ディスク レコーダーの電源をいれました。ところが、異常をしらせるランプが点滅するばかりで起動しません。

なん回か再起動してみても症状は解消されません。ハード ディスクの寿命が きたのでしょうか。説明書に よると、このランプが点滅する ばあいは修理が必要みたいです。

録画してあった番ぐみをみられないのは残念ですが、テレビをみなくても生活の うえで こまることは ありません。この際ですから、レコーダーの修理が完了するまで、しばらくテレビなし生活をおくりましょう。

※ この記事の本文からは漢字の訓を排除しています。

知らないうちに携帯料金値上げ

2015年11月10日 22時44分35秒 | IT・デジタル
auの携帯電話を使っています。以前と比べて請求額が高くなっていることに気づきました。
電話料金の明細をたどっていくと、請求額が高くなったのは7月でした。6月利用分までの基本料金に比べて、7月利用分からの基本料金が20円高くなっています。

どうして?

よくよく見てみると、7月発行の「口座振替のご案内」に、小さな文字で「WEB de 請求書割引は、6月ご利用分をもって割引を終了いたします」と書かれています。

利用者に紙請求書の廃止を促してWeb請求書に移行させるときは割引があると言って大々的なキャンペーンを張ったのに、その割引を廃止するときはこっそりと廃止するんですね。こういうこっそり値上げは大嫌いです。携帯電話は3社の中から選ぶしかないのでこのまま使い続けますが。

ICレコーダー電池ぎれ

2015年11月04日 22時50分00秒 | IT・デジタル
音楽をききながらプログラミングしよう。

そう おもいたってICレコーダーの電源をいれようと しましたが、はいりません。電池ぎれです。充電しました。

今度こそ音楽をききながらプログラミングしよう。

その ふつか後、またICレコーダーをひっぱりだしました。今度は ちゃんと充電できている はずです。電源をいれると、内蔵どけいの ひづけがリセットされていました。つかっていなかった期間は2~3ヶ月程度の はずですが、電池が完全に放電されていたようです。

とにかく充電は されています。音楽をききながらプログラミングに かかります。気分が いい。のりに のってアルゴリズムを検討していたら……

30分で電池ぎれ。バックアップ電池が内蔵されていて、その充電に まわされたのでしょうか。電池が過放電の状態に なっていたのかも しれません。なん回か充電して つかってをくりかえすうちに復活するでしょう。

※ この記事の本文からは漢字の訓を排除しています。