2017/02/28

Python でディレクトリ内のファイル一覧を取得する方法3種

微妙に動作が違ってすぐ迷うので備忘録動作確認は Python 2.7.12 と 3.5.2 で行いました。

例として、こんなディレクトリ構造を使用します。

```text
`gutter: false;
.
└── dir
    ├── a.txt
    ├── b.txt
    ├── c.jpg
    └── subdir
        ├── d.yaml
        └── e.conf
```

2017/02/27

Docker で GUI アプリケーションを実行する方法

「[Docker](https://www.docker.com/) 上で GUI アプリケーションを動かす」という投稿を見つけたので、ちょっとやってみましたDocker でインタラクティブな GUI を動かすのは本来の思想に合ってないという点はとりあえずおいておく。

> 参考
> - [Running GUI apps with Docker – Fábio Rehm](http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/)

2017/02/16

動画を切り出してアニメーションGIFを作る方法

[Android で Custom Progress Bar を作る方法](http://kokufu.blogspot.jp/2017/02/android-custom-progress-bar.html) を書いてて、アニメーションGIF を作った時の備忘録。

結局、[ffmpeg](https://ffmpeg.org/) で全フレームを静止画に変換し、各フレームを [ImageMagick](https://www.imagemagick.org/script/index.php) で処理してから、アニメーションGIFに変換するのがベストという結論に。
2017/02/15

Android で Custom Progress Bar を作る方法

Progress **Bar** といっても、バー状のものではなく、indeterminate モードを自作する方法です。
indeterminate モードは、終了時間が未定の時に使用される周期的なアニメーションを指します。

### indeterminateDrawable を記述すればよい 実は、やり方は簡単。 `ProgressBar` の `indeterminateDrawable` に [Drawable Animation](https://developer.android.com/guide/topics/graphics/drawable-animation.html) を指定すれば良いのです。 注意点としては、`layout_width`, `layout_height` に `wrap_content` が使えないということ。サイズを指定する必要があります。 /res/layout/activity_main.xml ```xml `highlight: 10; <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:layout_width="120dp" android:layout_height="120dp" android:layout_centerInParent="true" android:indeterminateDrawable="@drawable/animation01" /> </RelativeLayout> ``` ### Drawable Animation の作り方 [Drawable Animation](https://developer.android.com/guide/topics/graphics/drawable-animation.html) はリンク先にもあるようにパラパラ漫画の要領でアニメーションを作成します。 例えば、`ic_signal_wifi_[0-4].png` のようなファイルを用意し、以下のように `animation01.xml` に記述します。 /res/drawable/animation01.xml ```xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:duration="200" android:drawable="@drawable/ic_signal_wifi_0_bar" /> <item android:duration="200" android:drawable="@drawable/ic_signal_wifi_1_bar" /> <item android:duration="200" android:drawable="@drawable/ic_signal_wifi_2_bar" /> <item android:duration="200" android:drawable="@drawable/ic_signal_wifi_3_bar" /> <item android:duration="200" android:drawable="@drawable/ic_signal_wifi_4_bar" /> </animation-list> ``` あとは、上記のように `indeterminateDrawable` 属性に指定すれば、以下のような Custom Progress Bar が完成します。
### さらに簡易的な方法もある 単純な回転の場合、 [Animation Resources](https://developer.android.com/guide/topics/resources/animation-resource.html) の [RotateDrawable](https://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html) を使えば、リソースが一つしかなくても回転アニメーションを作成できます。 例えば以下のように-360 にしているのは回転方向を反時計周りにするためです。。 /res/drawable/animation02.xml ```xml <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="-360" android:drawable="@drawable/ic_sync"/> ```
この方法、速度指定できないですし、細かい制御には向いていません。 > 参考 > > 速度を N倍にする方法はあるみたい > - [AndroidのRotateDrawableで回転速度を調整する - scache’s blog](http://scache.hatenablog.com/entry/2016/12/15/022152)
2017/02/07

PSoC で I2C のアドレスをスキャンする方法

[Cypress](http://japan.cypress.com/) PSoC の I2C モジュールを使ってアドレスをスキャンする方法。
こんなの滅多にやらないから、備忘録として。

> 参考
> - [I2C Scan | Cypress Semiconductor](http://japan.cypress.com/forum/psoc-4-architecture/i2c-scan)

```c
bool TestI2CAddress(uint8 address)
{
    uint32 status = I2C_I2CMasterSendStart(address,I2C_I2C_READ_XFER_MODE);
    I2C_I2CMasterSendStop();
    return !status;
}

int main()
{
    static uint8 I2C_address;

    CyGlobalIntEnable;
    I2C_Start();
    
    while(true)
    {
        for(I2C_address = 0; I2C_address < 0x7F; I2C_address++)
        {
            if(TestI2CAddress(I2C_address))
            {
                // I2C_address が存在する
                // 出力する等何か処理
            }
        }
        while(true)
        {
            // Wait
        }
    }
}
```