Skip to content

Instantly share code, notes, and snippets.

View numa08's full-sized avatar
🐍

Takaya Funabiki numa08

🐍
View GitHub Profile
#include <M5StickCPlus.h>
// the setup routine runs once when M5Stack starts up
void setup(){
// Initialize the M5Stack object
M5.begin();
/*
Power chip connected to gpio21, gpio22, I2C device
@numa08
numa08 / TSSP.kt
Created March 30, 2020 14:02
Type safe SharedPreferences
package net.numa08.typesafesharedpreferences
import android.content.SharedPreferences
sealed class Key<T> {
abstract val key: String
object Address : Key<String>() {
override val key: String = "address"
}
@numa08
numa08 / No11.md
Last active January 21, 2019 08:11
アジャイルマニフェスト輪読会

「最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます」 The best architectures, requirements, and designs emerge from self-organizing teams.

どういうことだろうか?

IPA のまとめによれば、よいモノはよいチームから生まれるとされている。良い製品を作るにはチームを良い物に育てる必要があるとしている。

なぜなのか

自律的なチームや自己組織化されたチームが複雑で変化の激しい問題に対応できるということは、Elastic Leader Ship でも語られていた。チームを自己組織化されたものとするために、バス因子の除去や知識の共有、作業のオープン化などが求められる。この原則もまた開発者だけではなく、開発に関わるチーム内のすべての人に対して求められる。誰かが誰かの作業に依存すること無く自分の作業をできるようになれば、開発される製品の品質やスケジュールの改善が見込まれるかもしれない。

void main() {
var start_day = new Date(2012,8,3,0,0,0,0);
var one_week_ago = new Date(2012,8,10,0,0,0,0);
var diff = one_week_ago.difference(start_day);
print(diff.inDays);//7
var difference = difference(start_day, one_week_ago);
print(difference);//5
//
// CVImageDecorder.m
// Turkey
//
// Created by numa08 on 2018/05/10.
// Copyright © 2018年 numa08. All rights reserved.
//
#include <sys/types.h>
#include <sys/stat.h>
extern "C" {
@numa08
numa08 / doc.md
Last active March 7, 2018 06:42
why dagger2

どうして Dagger を利用するのか、同じことは setter を実装して外部から利用するインスタンスを変更することで実現できるのではないのか?

結論から言うと Dagger を利用した依存性の解決(注入)を実現することが楽だからです。

そもそも、広い意味での DI の実現方法には setter を利用した DI が存在します。setter injection と言うそうです。

以前の勉強会のコード を setter injection を利用して実装すると、だいたい次のようになると思います。

setter injection による実現

@numa08
numa08 / AndroidManifest.xml
Created July 19, 2016 07:09
かっこいいcoordinatoryalut
<activity
android:name=".ui.activities.ProfileDetailActivity"
android:configChanges="orientation|screenSize"
android:theme="@style/DefaultApplicationTheme.NoActionBar.NoStatusBar" />
@numa08
numa08 / codeStyleSettings.xml
Created July 6, 2016 07:08
codeStyleSettings.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
/**
Swift では厳密に Set<T<S>> の様な表現は不可能だと思います。
Set の場合、型パラメータ T は Hashable かつ、型パラメータ S をとりうる型である必要があります.
それは即ち T は Hashable で associatetype S が宣言された protocol であると言えます.
そこで Hashable であり associatetype S を宣言した Myp を宣言し,
Myp を実装した型パラメータ T をパラメータにとるメソッドで Set<T> を作ることで、
実質的に Set<T<S>> を実現できます.
ただ、わりとトリッキーなので使いドコロは微妙かも...
*/
@numa08
numa08 / googru.sh
Created August 17, 2013 14:12
ぐぐるやつ
#!/bin/sh
if [ -z ${GOOGLE_CMD} ];then echo GOOGLE_CMD is not defined; echo 'let do(mac,bash) \"export GOOGLE_CMD=open\"'; exit 1; fi; query=""; for q in $*; do query=`echo ${query}"+"${q}`; done; ${GOOGLE_CMD} http://google.com/search?q=${query};