bitfield in ctypes @Python

在C语言中,解析二进制数据常使用位域.可以直接从二进制数据映射到C语言中的结构提.

在Python中,如果要解析二进制数据的话,可以使用struct模块.

struct模块中定义了unpack方法可以用作这个用途.但是unpack其中内涵了一个小的描述语言,掌握其中的细节比较麻烦,而且谁能够记住这些东西呢.这个必然是write once, read never的代码,除非加上几倍的注释在附近.

而利用Python的ctypes模块中的Structure的功能,我们也可以写出类似于C语言位域的代码,同时结合Python的特点,可以写出更为简明易懂的代码.

闲话不说了,直接上例子.(也只有一个例子)

2015年 第29周

Table of Content:

对不起,已经有连续6周没有更新了.

最近没有更新主要是因为工作上的事情,最近实在是太忙了. 当然其实是自己没有blance.

自己会注意这一点.

本周继续.

之后不再发无意义的week系列,而是尽可能release干货啊.

2015年 第22-23周周记

Table of Content:

最近其实也没有什么好说的.中间经历一次小小挫折打击了一下,导致上周的周记没有发.

一直在codewars平台上面刷题.目前达到4kyu,208点honor,排名达到了3k-的名次.目前3kyu的升级过程完成了30%.预计达到3kyu估计要比较长的时间.

代码全部都在这里github.

最近没有做特别趣味性或者复杂的问题.绝大多数都比较简单.

一个简单的解数独的程序,haskell的37行代码即可以完成.(简单情况,不支持多种情况下的猜测和回溯).

一个汉语风格表示数字的程序,我觉得还比较有意思.结果居然codewars上这道题目,没有haskell的测试.

不过编程这种东西的学习,还是要做有一定难度的东西,不然是没有长进的.我要继续rank up啊!

在haskell或者类似的函数式编程语言里面,经验和C中的是完全两种东西.至此至少不能够直接的在二者之间相互参考.

另外,自己在github上面这么长时间,终于获得了一个星了.不过我看了下,估计是那个家伙搜索东西,搞错了.尽管是一个完全没有质量的玩意,但是也算是一种勉强的互动吧.在同样的repo上,还有2个fork.同样意义不大,不过估计不是搜索搞错的.

2015年 第21周

本周主要在codewars平台上面,练习haskell代码.

目前已经升级到5kyu级别,110点honor.排名在遥远的7k+名次.

打算进一步在上面练习haskell,努力达到proficent级别(2kyu)吧.至少要到competent级别.

代码全部都在这里github

这里就分享下上面的几个有趣的问题.

2015年第19周周记

Table of Content:
  1. explainshell
  2. New Macbook

颈椎不适. 果然程序员的最终阅读的书是颈椎病治疗手册啊.

大部分时间都卧床休息了,因此本周几乎没有要更新的内容.

explainshell

推荐个站点.顾名思义,就是解释shell的语法.

这里有一个fork-bomb的解释,还是挺直观的.

New Macbook

最近再一次心动,想换笔记本电脑,先列下我的需求.

  • 高分辨率
  • 够用的性能
  • 良好的键盘
  • Mac OS X Prefer

New Macbook, Apple 2015年新推出的笔记本电脑,问题还是很多的.

New Macbook饱受诟病的一点,在于其键盘的手感极端之差.

不过我也尝试了Apple的其他笔记本,键盘手感一样相当的差.

全部不如我现在使用的Thinkpad渣本.

要不是我想体验一下Mac OS X,估计还是更新入手一个Thinkpad X1 Carbon (2015).

Force Touch触摸板的效果还挺不错,使用起来非常直观,比如想打开,直接”猛击”就可以了,比双击效果还好.

Retina Macbook Pro是另外一个选择.

看来即使是在Apple寥寥几款笔记本电脑里面,我也找不到完全契合我的需求的选择.

归根结底还是钱少啊!

2015年 第17周 第18周 周记

Table of Content:

第17周最主要的精力都忙于工作了,以至于根本没有其他时间来做其他事情.

第18周,因为家事,又耽搁了绝大部分精力.

自己的平衡工作还有更长的路要走.

没有丝毫干货,就填一些水货吧.

避免失败,这同样是我所深深接受的教育.
蹭蹬一生的恐惧,一样根植于我的恐惧中.

一个不坚定的调和主义者,注定得到了一个差的结果.因为你放大了自己的允许范围.

演进的代码与缺陷

最近发现自己目前的核心维护模块,接连出现了2个问题.

这两个问题都是自己的refine代码过程当中,自己引入的新的问题.

说实话,这个对我打击挺大的.其中一个是别人检查出来的,另一个是自己检查出来的.

bug的细节就不多说了,其实都是比较基础性.但是定位的过程是曲折的,因为从触发条件->出错现象->定位分析->解决问题,这个流程是复杂的.

但是需要注意的是新引入的问题.

2015年 第16周 周记

Table of Content:
  1. H99 Continue.
  2. Bash
  3. fast-agnoster
  4. daily note

最近工作的事情比较多.

因此更新内容比较少.

H99 Continue.

Bash

确实没有特别大的深入研究的意义了,以后自己尽量使用python来作为脚本语言,试图取代bash.

fast-agnoster

给自己的fast-agnoster的zsh theme,增加了持久化的功能.

这个自己优化过的zsh主题,主要有以下特性(相比于原始的agnoster主题)

  • 短路径
    尽可能短的显示路径.对于深度路径特别有用.
    • 路径的最后的一级,始终保持展开
    • 路径的父路径所在的层级上,以最短的可以区分的前缀
      例如~/git/hub/dotfiles,同时还有路径~/git/huerko/abc
      那么,
      在~/git/hub路径下面,则显示为”~/g/hub”
      在~/git/huerko/abc,则显示为”~/g/hue/abc”
  • git status的保存
    git status的显示功能,在zsh的主题中很多,但是对于较大规模的git repo,则会存在性能的问题.

这个功能就是用于缓存git status的结果,如果检测到可能发生更新,则会更新,否则则复用历史git status信息.
这样可以减少不必要的git status调用.
基本可以减少一半的git status调用.

其他的功能,则都比较常见了,这里就不多说了.

daily note

自己新建的笔记格式,用于日常的工作时间记录,这个是最新的.

2015年第15周 周记

Table of Content:

H99 继续,大概又前进了20+题目的样子.

发现这周居然没有太多更新的内容,自己要努力啊!

没有更多内容,连read more都省啦.