読者です 読者をやめる 読者になる 読者になる

AnnictAccess安定稼働開始。

アニメ視聴管理サービスannict
annict.com
が公式に提供しているAPIを使って自分のアニメ消化がどれだけ遅れているか
可視化できるWEBアプリを作ってはいたものの、サーバのOSが古くてリリースできない状況だった。
先日サーバのOSをアップデートしてAnnictAccess
github.com
をslack内のユーザに使ってもらって動作テスト。

想定していなかったエラーが出ていたが匿名の皆さんのおかげで
エラーログを吐かなくなり安定稼働の兆しが見えてきた。

イヤホン修理。

いつもはソフトウェアエンジニア(プログラマ)として働いたり、
趣味でコーディングしたりしていますが、
今回は断線してしまったイヤホンのプラグ交換。
ネットにいくつか交換方法が載ってたので、結構参考になりました。

段ボールに刺して固定するのはナイスアイディアだと思いました。
d.hatena.ne.jp

ページング多すぎてうざかったですけど一番わかりやすかった。
monostudio.jp


f:id:ckoshien:20170202155110j:plain
上から
・半田付け後にボンドで固めたところ
・根本を熱収縮チューブで固定
・付属のカバーをつける
・完成
半田ごてを使うのは中学の技術の授業と
折れた傘の骨を無謀にも半田で接着しようとしたころですかね。
もう15年ぐらい半田ごて触ってなかったです。

Spring始めました。

Seasar2がEOLということで、Springの勉強を始めました。
tech.pjin.jp

JOY全国採点GP集計システム稼働開始。

ここ1週間ぐらいで一気に作り込んだJOYの全国採点グランプリ集計システム
徐々に稼働開始。
今回はDBサーバがバッチを使って100万件の曲IDに対してAPIを叩きに行くので
マルチスレッドを勉強したり。
付け焼刃だけど一応動いてます。
高速化を狙って100件ずつバッチinsert方式で実装したら
マルチスレッドで動いてるせいかレコードの重複エラーでプロセスが落ちるので、適度にリトライかけてやらないといけない。
データ取得に関してはまだ完全に自動化できていないという感じ。

マルチスレッドで17時間ほどCPU占有し続けるのでDBサーバとAPサーバ分けました。
これも初めての試みだったりします。
後はDBのデータ量が半端ないのでインデックス張ったり。
このあたりが結構参考になりました。
qiita.com

マルチスレッドのスレッドプールはだいたい6ぐらいで運用してます。
1日で1か月分のデータしか取れないので全部のデータ取り終わるまで
後何日かかることやら…。
github.com
github.com


データ取得状況

年月 開始 終了
2016年01月 01/17 22:20 01/18 16:52
2016年02月 01/18 18:00 01/19 05:36
2016年03月 01/19 08:00 01/20 16:42
2016年04月 01/20 01:00 01/20 18:57
2016年05月 01/20 19:10 01/20 08:45
2016年06月 01/21 12:30 01/21 22:16
2016年07月 01/21 22:30 01/22 18:58
2016年08月 01/22 19:00 01/23 11:36
2016年09月 01/23 12:30 01/24 0:06
2016年10月 01/24 1:00 01/24 16:36
2016年11月 01/14 01:00 01/14 14:49
2016年12月 01/14 17:00 01/15 13:37

Bootstrap導入

巷で噂になっているCSSフレームワークのBootstrapですが
↓今更ながら、このあたりを参考に導入してみました。
techacademy.jp
元々JQueryをメインで使っていたのでまだあまり使いこんではいませんが、
CSSのおかげで見た目がそれらしくなったなーと。
github.com
github.com

S2Chronos始めました(今更)

趣味で開発している野球リーグスコア管理システム
github.com
バッチ処理を新たに2つほど追加しました。

  • 30日間天気予報取得バッチ(6時間ごと)
  • 決め太郎スケジュール変更監視バッチ(4時間ごと)

使っているFWがSAStruts(Seasar2)なのでバッチはS2Chronos
少し設定ファイル書いてやればそのままデプロイできるので割と便利。

@Task
@CronTrigger(expression = "0 0 */6 * * ?")//6時間ごと
public class GetWeatherTask {
	@Resource
	public WeatherService weatherService;
	public List<Weather> weatherList;
	public HashMap<String,WeatherDto> response;

	private static Logger logger = Logger.getLogger("rootLogger");
	// タスク処理
	public void doExecute() {
		weatherList=weatherService.findAllOrderByRegTime();
		response=new HashMap<String,WeatherDto>();
		//テーブル全データ削除
		long t3=System.currentTimeMillis();
		for(int i=0;i<weatherList.size();i++){
			weatherService.delete(weatherList.get(i));
		}
		long t4=System.currentTimeMillis();
		WeatherAction weatherAction =new WeatherAction();
		response=weatherAction.get();
		long t5=System.currentTimeMillis();
		String date="";
		WeatherDto weatherDto= new WeatherDto();
		for(Map.Entry<String, WeatherDto> e : response.entrySet()) {
			date=e.getKey();
			weatherDto=e.getValue();
			Weather weatherBean= new Weather();
			BeanUtil.copyProperties(weatherDto, weatherBean);
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			java.util.Date formatDate = null;
			String todayStr= new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date()).replaceAll("-", "/");
			int year=Calendar.getInstance().get(Calendar.YEAR);
			java.util.Date today=null;
			try {
				formatDate = sdf.parse(year+"/"+date);
				today=sdf.parse(todayStr);
			} catch (ParseException e1) {
				e1.printStackTrace();
			}
			if(today.compareTo(formatDate)>0){
				weatherBean.date=Date.valueOf(String.valueOf(year+1)+"-"+date.replaceAll("/", "-"));
			}else{
				weatherBean.date=Date.valueOf(String.valueOf(year)+"-"+date.replaceAll("/", "-"));
			}
			weatherService.insert(weatherBean);
		}
		long t6=System.currentTimeMillis();
		logger.info("天気テーブル全削除:"+(t4-t3));
		logger.info("天気データ取得:"+(t5-t4));
		logger.info("天気データinsert:"+(t6-t5));
		logger.info("タスク終了");
	}
}

Social2Booklogリリース。

趣味プロでWEBアプリをリリースしました。(製作:約2日関)
https://ckoshien.github.io/Social2Booklog/
読書管理アプリ「ソーシャルライブラリー」から別サービス「ブクログ」へのデータ抽出ツールです。
jsongzipで圧縮されてたり色々苦労しましたw
githubリポジトリ
github.com