2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|

2017-11-17 山手線の同時走行車両数 [長年日記]

山手線 29駅

平日朝ラッシュ時:最大49本(外回りが25本、内回りが24本)

平日日中時:30本(外回りが15本、内回りが15本)

休日日中時:38本(外回りが19本、内回りが19本)

山手線の一周は34.5㎞ 時間は平均60分±1分


2017-10-24 gdb の使い方(http://ikubo.x0.com/unix/gdb.htm) [長年日記]

gdb の使い方

gdb の使い方


% gdb <プログラム名>

 gdb を終了する q quit
 ヘルプの表示 h help
 プログラムの実行    
 プログラムを止める    
 プログラムを続行する    
 プログラムを止めたい場所(ブレークポイント)を指定する b break
 現在設定しているブレークポイントを表示する   info break
 ブレークポイントを解除する (現在止まっている場所を解除する) cl clear
 ブレークポイントを解除する (ブレークポイントを指定する) d <番号> delete <番号>
 全てのブレークポイントを解除する d delete
 次の行を実行する (関数に入らない) n next
 次の行を実行する (関数に入る) s step
 関数から抜け出す   return
finish
 現在行を超える行まで実行を継続する
 (ループ内の最後の行でこれを実行することで、ループを抜けるまで実行を継続させる)
u until
 スタックを見る bt backtrace
 現在、自分のいるスタックフレームを見る f frame
 スタックフレームを移動する f <番号> frame <番号>
 スタックフレームを1つ上に移動する   up
 スタックフレームを1つ下に移動する   down
 値を見る p print <変数名やアドレス>
 メモリのダンプ x x/<回数><表示形式><フォーマット>
表示形式は、u (10進) x(16進) s(文字列:NULLで終了) i (マシン命令)
フォーマットは、b (バイト) h(ハーフワード:2バイト) w (ワード:4byte) g(ジャイアントワード:8バイト)など
 現在行の前後を表示 l list
 プログラムが停止するごとに、値を表示する   display <表示したいもの>
 display するものの一覧   info display
 display するものを削除する   undisplay <番号>
delete display <番号>
 ある変数が書き換えられたら止まる   watch <調べたいもの>
 watch するものの一覧表示   info watch
     
 breakpoint, watchpoint, display を一時的に無効/有効にする   disable / enable
 関数を呼び出す   call <関数名>
 値を書き換える   set var <変数名>=<値>
 シグナルを送る   signal <シグナル名 or 番号>
     

2017-09-28 "My neighborhood association is possibly awesome isn't it?" [長年日記]

The other day, I did a group interview as a work of a neighborhood association spokesperson.

In that group, there was one foreigner (native English), however,

I am sure that "I am second to none to speak nonsense English"

I was not too worried.

-----

Yeah, I really did not have to worry at all.

He was speaking fluent Japanese,

For details,

The director of the public relations department was talking in English, and

One of the interviewees is engaged in English translation.

-----

"My neighborhood association is possibly awesome isn't it?"

The population is small, so it is difficult to compare my company with my neighborhood association directly, however,

My neighborhood association may be more responsive to globalization.


2017-09-23 パソコン→SSH→ラズパイから、テレビ画面が変化したのを見て、次女が驚いていました。 [長年日記]

(昨日の続きです)

(Continuation from yesterday)

>sudo apt-get install lirc

Add the following to the last line of /boot/config.txt

>ls -l /dev/lirc0

で、デバイスファイルを確認

Check the device file

>sudo /etc/init.d/lirc stop

>mode2 -d /dev/lirc0

を押下して、リモコンを赤外線リモコンモジュールに向けて何かボタンを押してみると、色々表示されます。

Press and pointing the remote control towards the infrared remote control module and try pressing something, it will be displayed variously.

ここから学習ファイルの作成しました。

I made the learning file from here.

>irrecord -n -d /dev/lirc0 lircd.conf

(操作は、省略)

(Operation is omitted)

This is the file that I made.

Here is a hard copy.

バファローDVRーW1V2/1.0T HDDレコーダーのリモコンが壊れた人は、このデータを使って下さい。

The person who Buffalo DVR - W1V2 / 1.0T Person broke, can use this data.

Here is /etc/lirc/hardware.conf after change

学習が正常に取り込めたかどうかは、このコマンドで確認できます

You can use this command, if this learning was successfully works.

>irw

で、irsendが上手く動かないので(という事実と報告、多数)、以下の2つの画面を上げて、動作を確認する。

So, since irsend does not work well (facts and reports, many), make the following two screens and check the operation.

と、

and

-----

あとね、"reboot"では、なんかデバイスリセットできないみたいですよ。

Also, it seems that you can not reset the device somewhere in "reboot".

私の場合、ネットワークのリセットもできないので、電源切った後で、SDカードの差し入れもしました。

Since I can not reset the network in my case, I also re-inserted the SD card after turning off the power.

ハードウェア系は、色々トラブル多いですよ。

Hardware system has many troubles.

-----

パソコン→SSH→ラズパイから、テレビ画面が変化したのを見て、次女が驚いていました。

From the PC → SSH → Razpai, the second daughter was surprised to see the TV screen changed.


2017-09-22 で、あわてて、ラズパイで、学習リモコンを作ることにしました。 [長年日記]

以前、バファローDVRーW1V2/1.0T HDDレコーダーのリモコンが壊れ、代用品を注文したことがあるのですが、今度も壊れかけたら ―― 「リモコン発売終了」 P

reviously, when the remote controller(RC) of Buffalo DVR - W1V2 / 1.0T HDD recorder broke, I ordered a substitute RC. This time the RC also broke again but - "The RC "Remote release finished"

真っ青になりました。

I looked pale.

で、あわてて、ラズパイで、学習リモコンを作ることにしました。

So, in haste, I decided to make a learning RC with "Raspverry PI".

久々に、秋葉原の「秋月電子通商」に行ってきましたが、―― 最近、秋葉原は、輪をかけて「気持ち悪く」なっています。

I went to "akizukidenshi company" in Akihabara for a long time. Recently, Akihabara has become "uncomfortable" more and more.

『私は、秋葉原に部品を買いに来ただけです』と記入された、そういうシャツ売っていないかな。

I wonder if someone try to make a shirt, printed "I have just come to buy electric-parts in Akihabara"

メイドさん。お願いですから、私の歩く方向を塞がないで下さい。

Hi, Maid-san . Please do not close my walking direction.

-----

●欲しい赤外線リモコン受信モジュール"GP1UXC41QS"を1つ ―― だけど、5個セット(250円)だったし

- I wanted one infrared remote control reception module "GP1UXC41QS" - but it was a set of 5 pieces (250 yen) (残り4個)

●欲しい赤外線LED "OSI5LA5113A"は1つ ―― だけど、10個セット(100円)だったし

- I wanted one infrared LED "OSI5LA5113A" - but it was a set of 10 pieces (100 yen) (残り9個)

●欲しいトランジスタ "2SC1815Y"は1つ ―― だけど、10個セット(80円)だったし

- I want one transistor "2SC1815Y" - but it was a set of 10 pieces (80 yen) (残り9個)

●欲しい抵抗1/4W 100Ω、10KΩ は1個づつ ―― だけど、100個セット(100円だし)だったし(残り99個)

- I wanted one 1/4 W 100 Ω, one 10 K Ω - but it was 100 set (100 yen)

誰か、1個づつ1セット部品欲しい人いたら差し上げますので、切手代として100円玉を、私に送付して下さい。

If someone wants one set parts one by one, I will give it, so please send me a 100 yen coin as stamp fee.

-----

This is the circuit diagram.

This is the circuit picture.

(続く)

(To be continued)


2017-08-23 Androidとパソコンを繼ぐ方法 [長年日記]

MTPモードにする方法

USBを差す→ステータスバーを下向きにドラッグ →USBに関する通知パネルが表示される→ MTPを選ぶ


2017-08-17 泉小さん還暦をお祝いする会 進行スケジュール案 [長年日記]


2017-08-10 Windowsでexeの実行時間をざっくり測りたい [長年日記]

echo %time% & hogehoge.exe > nul & echo %time%


2017-08-09 windowsでunix系の/dev/nullみたいなことをしたい [長年日記]

hogehoge.exe > nul


2017-08-08 シミュレーションプログラム「バーチャル株式会社 エバタ 」 [長年日記]

/*
  gcc -g hiseiki.cpp -o hiseiki
*/
 
/*
  まず「基本形」 普通の会社を想定する 
  
  景気の波がある
 
  非正規雇用はいつでも解雇できる。
  正規雇用は解雇できない。
 
  必要な労働力は人数で換算できる。
  景気の波は
 
  景気循環には、3~4年周期の「キチンの波」、約10年周期の「ジュグラーの波」、20~30年周期の「クズネッツの波」、約50年周期の「コンドラチェフの波」の四種類があるとされ、それぞれ、在庫投資、設備投資、建設投資、技術革新が原因とされてきた。しかし、これらの周期性の計測や、因果関係に確定的な根拠があるわけではない。現在のところ確実に観測できるのは約4年周期の波だけで、しかも設備投資がそれを主導するように同調的に変動している。周期問題の分析は今後の課題に残されている。
 
  今回は、約10年周期の「ジュグラーの波」を採用する。
 
  企業の寿命は考えない。雇用期間は20歳から60歳までの40年
 
  一人の人間が生み出す利益は、年齢とともに単調的に増加する(長期雇用のメリット)
  一人の人間の人件費も年齢と共に単調的に増加する
  
  年齢に応じて100人いるとすると4000人
  提供労働力は、年齢に応じて増えていく(給料も増えるが、能力はそれを超えると考える)
  需要労働力は、変動する
 
  需要労働力に対して、提供労働力が大きいと、損害になる 1200円→2400円 2倍
  需要労働力に対して、提供労働力が小さいと、(競争に負けるので)、やはり損害になる
  需要労働力と、提供労働力が一致していることが望ましい
 
  正規社員 1.25 → 2.50  (http://www.mhlw.go.jp/file/06-Seisakujouhou-11650000-Shokugyouanteikyokuhakenyukiroudoutaisakubu/0000120286.pdf)
  非正規社員 1.00 のまま
 
  その金が支払われるのは、その能力がある(あるいは教育に投資をしていると仮定する)
 
  正規社員は退職せず、非正規社員は問答無用で解雇できるものとする
 
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> 
 
 
 
typedef struct person{
  int age;  // 20歳~60歳 のいずれか
  int position;  // 1:正規社員 0:非正規社員
  double productivity;  // 生産力 正規社員の場合 
 
  ///////////
  struct person *prev;  /* 前の構造体を示すポインタ */
  struct person *next;  /* 次の構造体を示すポインタ */ 
 
} PERSON;
 
 
typedef struct company{
  int payroll;
  double productivity;  // 会社としての生産力の合計   
} COMPANY;
 
 
PERSON *p_first_person, *p_last_person;   //社員リスト(あえてグローバルで保持)
 
// 社員用リストの先頭と終端を作成するルーチン
/*
  リストの先頭と終端をはグローバルでも良いのであるが、
  一応、メインルーチンの方で、陽に定義できるように、
  ここでは、返り値としている
*/
 
double min(double a, double b){
    if (b > a) 
        return a;
    else 
        return b;
};
 
double juglar_cycles(int year)
{
  // 10年で変動するsin周期
  // ベースとするのは2017年とする(単なる仮説)
  
  int x = (year -7) % 10;
  double y = sin( (double)x /10.0 * 2 * 3.141592654);
 
  return y;
}
  
 
 
 
void init_person_list(PERSON **p_first_person, PERSON **p_last_person)
{
  PERSON *p_top_person = (PERSON *)malloc(sizeof(PERSON));
  if(p_top_person == NULL) {
    printf("メモリが確保できません\n");
    exit(EXIT_FAILURE);
  }
  memset(p_top_person, 0, sizeof(PERSON)); // ゼロクリア
 
 
  PERSON *p_tail_person = (PERSON *)malloc(sizeof(PERSON));
  if(p_tail_person == NULL) {
    printf("メモリが確保できません\n");
    exit(EXIT_FAILURE);
  }
  memset(p_tail_person, 0, sizeof(PERSON)); // ゼロクリア
 
  *p_first_person = p_top_person;
  *p_last_person = p_tail_person;
 
  (*p_first_person)->prev = NULL;
  (*p_last_person)->next = NULL;
  (*p_first_person)->next = (*p_last_person);
  (*p_last_person)->prev = (*p_first_person);
 
  return;
}
 
// 社員オブジェクトを生成して、社員用リストに追加するルーチン
void add_person(PERSON *p_ref_person)
{
 
  PERSON *new_p_person = (PERSON *)malloc(sizeof(PERSON));
  if(new_p_person == NULL) {
    printf("メモリが確保できません\n");
    exit(EXIT_FAILURE);
  }
  memset(new_p_person, 0, sizeof(PERSON)); // ゼロクリア
  memcpy(new_p_person, p_ref_person, sizeof(PERSON)); // 引数の動的メモリの内容コピー
 
  // personの追加属性記述ここから
 
 
 
  // personの追加属性記述ここまで
 
  PERSON *p_person = p_last_person->prev;
 
  p_person->next = new_p_person;
  new_p_person->prev = p_person;
 
  p_last_person->prev = new_p_person;
  new_p_person->next = p_last_person;
 
  return;
}
 
void delete_person(PERSON *p_person)  
{
  // ポインタを貼り替えて
  p_person->prev->next = p_person->next;
  p_person->next->prev = p_person->prev;
  
  // そのメモリを解放する
  free(p_person);
 
  return;
 
}
 
 
int main()
{
  
  // 社員格納用リストの作成
  init_person_list(&p_first_person, &p_last_person); 
  
  //20歳から59歳までの正規社員、各世代100人づつ、合計4000人を作成する
  
  /////// PERSONを作成する ///////
  for (int age = 20; age < 60; age ++){
    for (int i = 0; i < 100; i++){
      
      PERSON person;
      
      person.age = age;
      person.position = 1;  // 1:正規社員 0:非正規社員
      person.productivity = 1.25 + (2.50 -1.25) / 40.0 * ((double)age -20.0); //20歳 1.25 60歳 2.50まで線形変化
      
      add_person(&person);
    }
  }
  /////// PERSONを作成する ///////  
  
  
  COMPANY company;
  
  company.payroll = 0; // 従業員数ゼロリセット
  company.productivity = 0.0; // 生産力ゼロリセット
  
  double sum_profit = 0;
  
  for ( int year = 2017; year < 2040; year++){
    
    //// 年齢を1歳加算し、定年
    // ===== PERSON ループを回す========
    PERSON* p_person = p_first_person->next;  
    while (p_person != p_last_person){
      
      p_person->age += 1;
      p_person->productivity = 1.25 + (2.50 -1.25) / 40.0 * ((double)(p_person->age) -20.0); //20歳 1.25 60歳 2.50まで線形変化
      
      if (p_person->age >= 60){ // 60歳になったら定年
        delete_person(p_person);
      }
      
      p_person = p_person->next;
    }
    // ===== PERSON ループを回す(ここまで)========
    
    //// 100人の20歳の新入社員を入社する
    for (int i = 0; i < 100; i++){
      /////// PERSONを作成する ///////
      PERSON person;
      
      person.age = 20;
      person.position = 1;  // 1:正規社員 0:非正規社員
      person.productivity = 1.25 + (2.50 -1.25) / 40.0 * ((double)person.age -20.0); //20歳 1.25 60歳 2.50まで線形変化
      
      add_person(&person);
    }
 
    /////////// ここから生産力算出ループ
 
    company.productivity = 0; // 生産力ゼロリセット
    company.payroll = 0 ; // 従業員数ゼロリセット
 
    // ===== PERSON ループを回す========
    p_person = p_first_person->next;
    while (p_person != p_last_person){
      
      company.payroll += 1 ; // 従業員数一人加算
      company.productivity += p_person->productivity; // 生産力加算
      
      p_person = p_person->next;
    }
    // ===== PERSON ループを回す(ここまで)========
    
    //printf("company.payroll = %d\n",company.payroll); // company.payroll = 4000
    //printf("company.productivity = %f\n",company.productivity); // company.productivity = 7437.500000
    
    double potential = juglar_cycles(year) * 1500.0 + 7500.0; // 景気ライン
    double border = 7000.0; // 利益のボーダー
    
    double profit = min(company.productivity, potential) - border;
    sum_profit += profit; 
    
    //printf("year = %d company.productivity = %f potential = %f profit = %f sum_profit=%f\n",year,company.productivity, potential, profit,sum_profit);
    printf("%d,%f,%f,%f,%f\n",year,company.productivity, potential, profit,sum_profit);
    
  } //  for ( int year = 2017; year < 2040; year++){
  
  return 0;
}