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|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|

2015-02-04 時間を取り扱うCプログラム

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
  
// 2014年4月1日 08:30からの経過時間(分)から日時を出す
int minutes2dateAndTime(int min, char *s)
{
	// 1900年から、2014年4月1日 08:30までの経過秒数→1396308600秒
  
	time_t fixed_sec = min * 60 + 1396308600; //1900年からの秒数に変換
 
	struct tm *tm = localtime(&fixed_sec);
 
	// 文字列にして戻す(別の形式でも良いが、とりあえず"2018/1/1 0:00"の形で)
 	// mainの方でメモリ確保して貰って、こっちで書き込むという形にする(コピーが面倒だから)
 
	memset(s,0,sizeof(s));
 
	sprintf(s,"%d/%02d/%02d %02d:%02d",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
 
	return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
  
// 2014年4月1日 08:30からの経過時間(分)を算出する
int dateAndTime2minutes(char *s1)  
{
//	char s1[] ="2014/4/3 8:08";
// 	char s2[] ="/ :";  // デリミタは"/", " ", ":" の3つ
 
 	char* tok;
 
 	// 2014年4月1日8:30の累積分数
 
	struct tm base_tm;
	base_tm.tm_year = 2014 - 1900;  // 2014年
	base_tm.tm_mon  = 4 - 1;  // 4月
	base_tm.tm_mday = 1;  // 1日
	base_tm.tm_hour = 8;  // 8時
	base_tm.tm_min  = 30; // 30分
	base_tm.tm_sec  = 0;  // 0秒
 
	time_t time = mktime(&base_tm);
	int base_min = (int)time/60;
 	
	///////
 
	struct tm tm;
 	
	tok = strtok( s1, s2 ); /* 初回 */
	tm.tm_year = atoi(tok)-1900;
 
	tok = strtok( NULL, s2 );  /* 2回目*/
	tm.tm_mon =  atoi(tok) -1 ;
 
	tok = strtok( NULL, s2 );  /* 3回目 */
	tm.tm_mday = atoi(tok);
 
	tok = strtok( NULL, s2 );  /* 4回目 */
	tm.tm_hour = atoi(tok);
 	
	tok = strtok( NULL, s2 );  /* 5回目 */
	tm.tm_min = atoi(tok);
 
	tm.tm_sec = 0; //秒はデフォルト0 
 
	time = mktime(&tm);
	int target_min = (int)time/60;
 
	return target_min - base_min;
  
} 

2017-02-04 SAIで黒いアイコンを赤くする方法

(Step 1) アイコンをコピー → [ファイル]→[クリップボードからキャンパス作成]→

(Step 2) [レイヤー]→[輝度を透明度に変換]

(Step 3) [合成モード]→[カラー2値化]

(Step 4) [不透明度]→80%くらい

(Step 5) [不透明度保護]くりっく

(Step 6) 赤を指定して、2値ペンで塗りたくる

以上


2018-02-04 副業シミュレーション

/*
  gcc -g second_job.cpp -o second_job
 
 
  考え方
  
  (1)8時間労働、8時間睡眠、8時間余暇を基本として考える。
  (2)8時間余暇の中には、通勤時間1.5時間 食事時間1.5時間が含まれるものとする
  (3)とすれば、残りの余暇5時間をどのような使い方をするのかが問題となる。
  
  (4)十分な余暇は、基本的に正業のパフォーマンスを上げるものであるとする。
  (4)余暇を使った副業は、収入になるものとする
 
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct person {
  double first_business_hour;
  double sleep_hour;
  double commute_time;
  double meal_time;
 
  double max_remain_time;
  double second_business_hour;
  double final_remain_time;
 
  double fb_fee;
  double sb_fee;
  
  double fatigue_func;
  double cost;
 
  struct person *prev;  /* 前の構造体を示すポインタ */
  struct person *next;  /* 次の構造体を示すポインタ */
} PERSON;
 
 
double min(double a, double b)
{
  if (a > b)
	return b;
  else
	return a;
}
 
double diff(double a, double b)
{
  if (a > b)
	return a - b;
  else
	return 0;
}
 
 
double fatigue_func(double time)
{
  if (time < 1.0){
	return 0.5;
  }
  else if ((time >= 1.0) && (time < 3.0)){
	return (1.0 - 0.5)/(3.0 - 1.0) * (time - 1.0) + 0.5;
  }
  else {
	return 1.0;
  }
}
 
const double First_Business_hourly_fees = 2000;
const double First_Business_extra_fees = First_Business_hourly_fees * 1.25;
const double Second_Business_hourly_fees = 1000;
 
 
int main()
{
  srand(13);
 
  PERSON* first_p_person= (PERSON*)malloc(sizeof(PERSON));
  PERSON* last_p_person= (PERSON*)malloc(sizeof(PERSON));
 
  PERSON*  p_prev_person = first_p_person;
 
  for (int i = 0; i < 100; i++){
	
	PERSON* p_person= (PERSON*)malloc(sizeof(PERSON));
	memset(p_person, 0, sizeof(PERSON));
 
 
	//////// ポインタの貼り替え //////////
	p_prev_person->next = p_person;
	p_person->next = last_p_person;
	p_person->prev = p_prev_person;
	p_prev_person = p_person;
	//////////////////////////////////////
 
	p_person->first_business_hour = 8.0 + 2.0 * (double)rand()/RAND_MAX;    // 8~10時間
 
	p_person->first_business_hour = 8.0;    // 8~10時間
 
	p_person->sleep_hour = 7.0 + 1.0 * (1.0 - 2.0 * (double)rand()/RAND_MAX); // 6~8時間
	p_person->commute_time = 1.0 + 0.5 * (1.0 - 2.0 * (double)rand()/RAND_MAX); // 0.5~1.5時間
	p_person->meal_time = 1.0 + 0.5 * (1.0 - 2.0 * (double)rand()/RAND_MAX);  // 0.5~1.5時間
	
	p_person->max_remain_time = 
	  24.0 - 
	  p_person->first_business_hour -
	  p_person->sleep_hour - 
	  p_person->commute_time - 
	  p_person->meal_time;    // 最悪でも3時間の、最良で9時間の余暇時間ができる
 
#if 1
	p_person->second_business_hour = p_person->max_remain_time * (double)rand()/RAND_MAX; //余暇の時間を適当に振る
#else
	p_person->second_business_hour = 0;
#endif
 
	p_person->final_remain_time = p_person->max_remain_time - p_person->second_business_hour;
	
	p_person->fb_fee = 
	  min(p_person->first_business_hour, 8.0) * First_Business_hourly_fees +
	  diff(p_person->first_business_hour, 8.0) * First_Business_extra_fees;
	
	p_person->sb_fee = p_person->second_business_hour * Second_Business_hourly_fees;
	p_person->fatigue_func = fatigue_func(p_person->final_remain_time);
 
	p_person->cost =	
	  p_person->fb_fee * p_person->fatigue_func + p_person->sb_fee;
  
	//printf("%d:cost = %f\n", i, p_person->cost);
 
  }
 
 
  double total_cost = 0.0;
  
  PERSON* p_person = first_p_person->next;
 
  printf("本業時間,睡眠時間,通勤時間,食事時間,余暇時間,副業時間,残余暇時間,RATIO,収入\n");
 
  while(p_person->next != last_p_person){
	total_cost += p_person->cost;
	
	printf("%f,%f,%f,%f,%f,%f,%f,%f,%f\n",
		   p_person->first_business_hour,
		   p_person->sleep_hour,
		   p_person->commute_time,
		   p_person->meal_time,
		   p_person->max_remain_time,
		   p_person->second_business_hour,
		   p_person->final_remain_time,
		   p_person->fatigue_func,
		   p_person->cost
		   );
	
	p_person = p_person->next;
 
  }
  
  printf("total cost = %f\n", total_cost);  
 
 
}
syntax2html

2019-02-04 Test_of_PosiView_test2.mp4