月別アーカイブ: 2018年5月

slackにはいろいろなメッセージの構造化技法があり、それぞれガイドラインにきをつけて使わないといけない

Guidelines for building messages
構造化メッセージ--ガイドライン

ステイインフロー
インタラクションは、メンバーがその場で何をしようとしているのかに焦点を当てるべきです。多くのオプションを提供する代わりに、スラックの会話の中で完了するのに理にかなった単純で一般的なタスクに焦点を合わせます。
Suteiinfurō intarakushon wa, menbā ga sonobade nani o shiyou to shite iru no ka ni shōten o aterubekidesu. Ōku no opushon o teikyō suru kawari ni, surakku no kaiwa no naka de kanryō surunoni ri ni kanatta tanjun de ippantekina tasuku ni shōten o awasemasu.

シンプルな書式設定
添付ファイルを使用すると、メッセージやボタンにさらに豊富な書式設定を追加できます。必要最小限の書式を使用します。
基本メッセージの添付ファイル
サムネイル添付のメッセージ
画像が添付されたメッセージ

モバイルメッセージの添付ファイル
iOSとAndroidでは、メッセージ添付ファイルは次のようにレンダリングされます:
基本的なモバイルメッセージの添付ファイル
サムネイルを添付したモバイルメッセージ

Each attachment should represent an object so if there's a title for it, it should be inside the attachment.
各添付ファイルはオブジェクトを表す必要があります。そのためのタイトルがある場合は、添付ファイル内にあるはずです。

Making messages colorful
Colorful bars guarding the edge of messages and their components definitely make them more distinctive.

Use color bars a few ways: Utilize your brand color to complement your app's avatar to more clearly brand your messages. Your service may already associate specific colors with workflow transition types and objects — use the colors that will most clearly resonate with our common users.

When you're not harmonizing with your brand, we suggest using the default light gray. If you're looking for just a little more distinction, consider using optional color values good, warning, or danger.

メッセージをカラフルにする
メッセージとそのコンポーネントのエッジを守るカラフルなバーは、それらを明確に区別します。

カラーバーを使用する方法:ブランドカラーを活用してアプリのアバターを補完し、メッセージのブランドをより明確にする。あなたのサービスは、特定の色とワークフローの移行の種類やオブジェクトを既に関連付けている場合があります。共通のユーザーと最もよく似合う色を使用します。

ブランドとの調和が取れない場合は、デフォルトのライトグレーを使用することをおすすめします。あなたはもう少し区別を探している場合は、任意の色の値を良い、警告、または危険を使用することを検討してください。

api.slack.com/docs/message-guidelines

slackメモ…アプリは配布することができる。その際にOAuthを使用してインストールする。

配信の管理
アプリを他のワークスペースと共有したい場合は、アプリの配布を有効にする必要があります。これにより、あなたのアプリケーションを共有するために必要なリンクとスラックボタンが生成され、Slack App Directoryにアプリケーションを送信する手順を示し、他のワークスペースでOAuthを使用してアプリケーションをインストールできるようになります。
Manage distribution
If you’d like to share your app with other workspaces, you’ll need to activate app distribution. This will generate the links and Slack Button you need to share your app, show the steps to submit your app to the Slack App Directory, and allow other workspaces to install your app using OAuth.

解約したら継続利用できない…融通の利かない、さくらインターネット

さくらのVPSで年間契約をしたが、途中で使用しないことがわかったので解約した。

ところが、別の用途で使いはじめたので、解約中のステータスを継続に変えようと思って運営に連絡したところ…

サポート「一度解約したら継続利用できません。新しく契約し直してください」

私「!!」

…融通が気かな過ぎやしませんか。別に次の環境構築のためにIPアドレスを確保するからとか、そういう桜サーバ側の運用の手間というか効率性を高めるための取り組みでこれはそういうルールになっていますよね。解約したらもとにもどせないという法的ないざこざを避ける理由っていうのもない気がします。だいたい昔のサーバ屋だったらステータスを戻すくらいぱぱっとやってくれると思います。組織が巨大化してどんくさくなったという印象をうけます。そういえば本命のワードプレス・メディアをWPXサーバへ移行しました。ますますさくらサーバを使う理由がないこのごろです。でも最近さくらのVPSにさわったら、コントロールパネルのインターフェースは改善されているんですよね。あとは請求書関連を昔ながらの画面からどうにかできないのか?という気はしています。

peeweeを入れようとしたが入らない件

versionはpython 3.4.5

pythonのormであるpeeweeを試しにpipでいれようとしたが…

gccに問題があるようだが入らない。

yumでgcc関連のライブラリを更新したがうまくいかず。

試行錯誤したがうまくいかず詰んでいます。

error: command 'gcc' failed with exit status 1


pip3 install peewee

Collecting peewee
Using cached https://files.pythonhosted.org/packages/a8/b4/4c56f8810365c9fab20eec0e96474189c61b64d01859fed0b3eb67dce67b/peewee-3.3.4.tar.gz
Installing collected packages: peewee
Running setup.py install for peewee ... error
Complete output from command /usr/bin/python3.4 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-ldfqc0yz/peewee/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-uojv5e3q/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.4
copying peewee.py -> build/lib.linux-x86_64-3.4
copying pwiz.py -> build/lib.linux-x86_64-3.4
creating build/lib.linux-x86_64-3.4/playhouse
copying playhouse/signals.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/sqliteq.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/shortcuts.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/hybrid.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/flask_utils.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/apsw_ext.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/sqlite_udf.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/__init__.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/pool.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/migrate.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/db_url.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/test_utils.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/sqlite_ext.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/dataset.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/fields.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/kv.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/postgres_ext.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/sqlcipher_ext.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/reflection.py -> build/lib.linux-x86_64-3.4/playhouse
copying playhouse/mysql_ext.py -> build/lib.linux-x86_64-3.4/playhouse
running build_ext
cythoning playhouse/_speedups.pyx to playhouse/_speedups.c
building 'playhouse._speedups' extension
creating build/temp.linux-x86_64-3.4
creating build/temp.linux-x86_64-3.4/playhouse
gcc -pthread -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.4m -c playhouse/_speedups.c -o build/temp.linux-x86_64-3.4/playhouse/_speedups.o
gcc -pthread -shared -Wl,-z,relro build/temp.linux-x86_64-3.4/playhouse/_speedups.o -L/usr/lib64 -lpython3.4m -o build/lib.linux-x86_64-3.4/playhouse/_speedups.cpython-34m.so
cythoning playhouse/_sqlite_udf.pyx to playhouse/_sqlite_udf.c
building 'playhouse._sqlite_udf' extension
gcc -pthread -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.4m -c playhouse/_sqlite_udf.c -o build/temp.linux-x86_64-3.4/playhouse/_sqlite_udf.o
gcc -pthread -shared -Wl,-z,relro build/temp.linux-x86_64-3.4/playhouse/_sqlite_udf.o -L/usr/lib64 -lpython3.4m -o build/lib.linux-x86_64-3.4/playhouse/_sqlite_udf.cpython-34m.so
cythoning playhouse/_sqlite_ext.pyx to playhouse/_sqlite_ext.c
warning: playhouse/_sqlite_ext.pyx:316:57: local variable 'pNew' referenced before assignment
warning: playhouse/_sqlite_ext.pyx:344:55: local variable 'pCur' referenced before assignment
warning: playhouse/_sqlite_ext.pyx:1023:48: local variable 'bf' referenced before assignment
building 'playhouse._sqlite_ext' extension
gcc -pthread -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.4m -c playhouse/_sqlite_ext.c -o build/temp.linux-x86_64-3.4/playhouse/_sqlite_ext.o
playhouse/_sqlite_ext.c: In function ‘__pyx_f_9playhouse_11_sqlite_ext_pwBestIndex’:
playhouse/_sqlite_ext.c:4488:25: warning: assignment from incompatible pointer type [enabled by default]
__pyx_v_pConstraint = (&(__pyx_v_pIdxInfo->aConstraint[__pyx_v_i]));
^
playhouse/_sqlite_ext.c:4651:23: error: ‘sqlite3_index_info’ has no member named ‘estimatedRows’
__pyx_v_pIdxInfo->estimatedRows = 10;
^
playhouse/_sqlite_ext.c:4680:23: error: ‘sqlite3_index_info’ has no member named ‘estimatedRows’
__pyx_v_pIdxInfo->estimatedRows = __Pyx_pow_long(10, ((long)(__pyx_v_nParams - __pyx_v_nArg)));
^
playhouse/_sqlite_ext.c:4791:21: error: ‘sqlite3_index_info’ has no member named ‘estimatedRows’
__pyx_v_pIdxInfo->estimatedRows = 0x186A0;
^
playhouse/_sqlite_ext.c: In function ‘__pyx_f_9playhouse_11_sqlite_ext_18_TableFunctionImpl_create_module’:
playhouse/_sqlite_ext.c:4992:33: warning: assignment from incompatible pointer type [enabled by default]
__pyx_v_self->module.xConnect = __pyx_f_9playhouse_11_sqlite_ext_pwConnect;
^
playhouse/_sqlite_ext.c: In function ‘__pyx_pf_9playhouse_11_sqlite_ext_16ConnectionHelper_8set_update_hook’:
playhouse/_sqlite_ext.c:16039:5: warning: passing argument 2 of ‘sqlite3_update_hook’ from incompatible pointer type [enabled by default]
sqlite3_update_hook(__pyx_v_self->conn->db, __pyx_f_9playhouse_11_sqlite_ext__update_callback, ((void *)__pyx_v_fn));
^
In file included from playhouse/_sqlite_ext.c:531:0:
/usr/include/sqlite3.h:4826:18: note: expected ‘void (*)(void *, int, const char *, const char *, sqlite3_int64)’ but argument is of type ‘void (*)(void *, int, char *, char *, sqlite3_int64)’
SQLITE_API void *sqlite3_update_hook(
^
playhouse/_sqlite_ext.c: In function ‘__pyx_pf_9playhouse_11_sqlite_ext_16ConnectionHelper_10set_busy_handler’:
playhouse/_sqlite_ext.c:16147:108: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
sqlite3_busy_handler(__pyx_v_self->conn->db, __pyx_f_9playhouse_11_sqlite_ext__aggressive_busy_handler, ((void *)__pyx_v_n));
^
playhouse/_sqlite_ext.c: In function ‘__pyx_f_9playhouse_11_sqlite_ext__aggressive_busy_handler’:
playhouse/_sqlite_ext.c:17580:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
__pyx_v_busyTimeout = ((int)__pyx_v_ptr);
^
playhouse/_sqlite_ext.c: At top level:
playhouse/_sqlite_ext.c:5974:18: warning: ‘__pyx_f_9playhouse_11_sqlite_ext_validate_and_format_datetime’ defined but not used [-Wunused-function]
static PyObject *__pyx_f_9playhouse_11_sqlite_ext_validate_and_format_datetime(PyObject *__pyx_v_lookup, PyObject *__pyx_v_date_str) {
^
error: command 'gcc' failed with exit status 1

----------------------------------------
Command "/usr/bin/python3.4 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-ldfqc0yz/peewee/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-uojv5e3q/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tm
p/pip-install-ldfqc0yz/peewee/