月度归档:2019年01月

编程语言与知识基础

随着一部分编程经验的增长,我越来越觉得,是在知识基础上实现应用的工具。

最初,在我进行应用编码的时候,往往让我 stuck 的东西就是基础知识。这种基础知识,比如 WSGI,session,cookie 这些东西;以及过于焦急的学习心态。总想做出点什么,但是却没有意识到做出一个东西需要积累和时间。

语言的重要性在于,大量的使用语言会让你更了解你所使用的,与计算机交流的方式。这个很重要。语言使我们本身就站在巨人的肩膀上处理事情。因此,专注于一门语言在最初是十分重要的,因为我想很多人像我一样急于求成,并且很难按下心来慢慢学习知识基础。

意识到的时间似乎有点晚,但是不算太迟。我也能够花一些时间在知识基础上,使得事情解决的更加清晰。

还有就是硬件。想象中总是很美好的,但是实际上编程过程中,若是不考虑硬件,不考虑拓扑是不可取的。这是视角割裂。最近一直都在读一些软件工程方面的书,但是读的越多,越不敢说。

潜意识里,读的越多越发现自己懂得少,害怕自己说错。

就这些,算是给 2018 年读者的一个交代。

将已经运行的进程切换到后台

之前一直都是用 screen 来后台运行 Linux 进程,但是 screen 对于已经在运行的进程就不方便处理了,这个时候怎么办呢?

  • 0. Run some SOMECOMMAND
  • 1. ctrl+z to stop (pause) the program and get back to the shell
  • 2. bg to run it in the background
  • 3. disown -h so that the process isn’t killed when the terminal closes
  • 4. Type exit to get out of the shell because now your good to go as the operation will run in the background in it own process so its not tied to a shell
  • 套路摘选自下面的连接。
https://sites.google.com/a/kossboss.com/main/linux—move-running-to-process-nohup

这次训练直接用 bg 结果把自己的任务直接干掉了。。。「sad」。记得用 disown -h 来让任务逃离 「terminal」的控制。

Django tricks

关于 session

django.contrib.sessions.middleware | Django documentation | Django

session 是使用 cookie 来进行判断的,通过 session_cookie_name 来提取,然后通过 SessionStore() 来保存。

因此,Django 也是通过 sessionid 来区分用户;(或者其他什么名称)。

使用 cache 作为全局变量

cache.set(‘foo’, ‘bar’) # another function cache.get(‘foo’) # get ‘bar’

使用 cache , django-redis 是一个好方法。可以在使用 cache.lock变量,在应用层面加锁,来完成异步操作,还可以支持分布式应用,十分方便。

Ubuntu 多显示器方案

多显示器方案。
使用 `xrandr` ,输出当前存在的screen
Screen 0: minimum 8 x 8, current 7680 x 2160, maximum 16384 x 16384
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected 3840x2160+3840+0 (normal left inverted right x axis y axis) 510mm x 287mm
1920x1080 59.93*+ 59.94 
1680x1050 59.95 
1600x900 75.00 60.00 
1440x900 59.89 
1280x1024 75.02 70.00 60.02 
1280x720 59.94 
1152x864 75.00 
1024x768 75.03 70.07 60.00 
800x600 75.00 72.19 60.32 56.25 
720x480 59.94 59.94 
640x480 75.00 72.81 59.94 
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)
eDP-1-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 380mm x 210mm
3840x2160 60.00*+ 59.97
找到命运的显示器,然后输入
xrandr --output eDP-1-1 --auto --output DP-3 --auto --scale 2x2 --right-of eDP-1-1
问题解决。
—-
2019-01-19 补充
不怎么 work,总是闪屏。。

My Keras tricks.

记录了一些使用 keras 的技巧。

categorical_crossentropy vs sparse_categorical_crossentropy.

3. The Answer, In a Nutshell

  • If your targets are one-hot encoded, use categorical_crossentropy.
  • Examples of one-hot encodings:
  • [1,0,0]
  • [0,1,0]
  • [0,0,1]
  • But if your targets are integers, use sparse_categorical_crossentropy.
  • Examples of integer encodings (for the sake of completion):
    • 1, 2, 3

clip norm


https://wulc.me/2018/05/01/%E6%A2%AF%E5%BA%A6%E8%A3%81%E5%89%AA%E5%8F%8A%E5%85%B6%E4%BD%9C%E7%94%A8/
可以加速 RNN 训练

Multiple GPU

# https://keras.io/utils/#multi_gpu_model#

使用多GPU,注意使用 save 的时候,传参传 model (multi_gpu_model的model参数)

Encode Labels

可以把不同的字符[‘aa’, ‘bb’, ‘cc’, ‘aa’] 编码成 [0, 1, 2, 0]

1
2
3
4
5
6
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)

训练中存在的问题

训练性能低了别急着调参,首先看看数据预处理有没有问题,评价指标是不是写错了。再一个,batch norm 要勤快点加上。

相似的文章还有:https://svtter.cn/2018/02/01/keras%e5%9d%91/

为你的 Docker 项目集成 ELK

https://github.com/twtrubiks/docker-elk-tutorial

基本上按照这个配置就可以了,创建 @timestamp 这一步,可以用如下脚本替代 Postman

$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern' \
    -H 'Content-Type: application/json' \
    -H 'kbn-version: 6.5.4' \
    -d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'

这也是 tutorials 中,使用的 ELK images 给出的。

https://github.com/deviantony/docker-elk

继续阅读