GitHub 不再使用字体来输出图标了。我们把代码中所有的 Octicon 替换成了 SVG 版本。虽然这些改动并不那么明显,但马上你就能体会到 SVG 图标的优点。
切换到 SVG 以后,图标会作为图片渲染而非文字,这使其在任何分辨率下都能很好地以各种像素值显示。
more
为何使用 SVG?
图标字体渲染问题
图标字体从一开始就是一种 Hack。将图标作为 Unicode 符号生成一个自定义字体,并通过打包后的 CSS 来引入图标,这样只需要在任意元素上添加一个 class,图标就可以显示出来,然后我们通过 CSS 就能即时改变图标的尺寸和颜色。
然而,虽然这些图标是矢量图形,但在 1x 显示屏下的渲染效果并不理想
继续阅读 »
我一直觉得 window 命令行下面的字体非常丑陋,因为有时会用 git bash, 有时也会直接使用编译器自带的控制台,这些都是可以设置字体的,所以 window 自带的命令行用的不是太多。
今天刚好看到一篇文章是写关于修改命令行字体的,哈哈。
首先打开一个命令行窗口,输入
chcp 437
然后设置字体,这个时候你就发现多了好多等宽字体。
选择想要的字体保存之后,把命令行窗口先关闭,然后再打开,输入
chcp 936
chcp 是切换 cmd 程序的当前代码页,936 是中文环境,437 是英文环境
然后命令行的字体就改变了。
继续阅读 »
最近在xmake中,用lua的协程实现了多任务编译,效果还是不错的,不过后来发现一个问题:
如果所有编译进程都在处理编译,没有退出的时候,xmake的lua主进程会不断地在这些任务间,不停的切换轮询进程的状态,但是有没有机会执行其他任务,导致cpu过高,抢占了编译进程的cpu时间。。
那如果在等不到完成的进程时候,加入sleep等待呢,又会导致编译速度变慢,没法合理利用cpu。。
因此,为了解决这个问题,我打算扩展下lua的接口,实现了一个跨平台的多进程等待接口: process.waitlist 实现多个未完成进程的同时等待,让出xmake主进程的cpu时间,给其他编译进程充分利用
xmake中的lua代码如下:
```
继续阅读 »
tbox里面针对三个正则库(pcre/pcre2/posix)进行了封装,实现接口统一和跨平台处理,只要xmake在编译配置的时候自动检测到其中一种库,就可以使用了,一般会优先使用pcre2。
如果你不想过多的依赖第三方库,可以切换到posix的正则,调用 xmake f --pcre=false --pcre2=false 把pcre的库禁用了就行了。
首先给个最简单的匹配单个子串的例子:
```c
// 执行简单匹配,第二个参数是匹配模式,默认传0就行了
tb_vector_ref_t results = tb_regex_match_done_simple("(\w+)\s+?(\w+)", 0, "he
继续阅读 »
tbox目前支持sqlite3、mysql两种关系型数据库(需要链接对应的libsqlite3.a和libmysql.a),并对其接口进行了封装,使用更加的方便简洁并且只需要换个url,就可以随时切换成其他数据库引擎,而不需要修改接口。
下面先看个简单的例子:
```c
/* 初始化一个mysql数据库
*
* localhost: 主机名,也可以是ip地址
* type: 数据库的类型,目前支持:mysql 和 sqlite3两种类型
* username: 数据库用户名
* password: 数据库用户密码
* databas
继续阅读 »
新特性
支持make进行直接编译(会去自动下载xmake进行构建)
在平台库中,添加切换context上下文接口(参考boost.context实现原理进行重写,并对部分架构进行优化)
新增跨平台协程模块(支持i386, x86_64, arm, arm64),提供更加易用的高性能并发编程模式
新增基于协程的各种服务器开发实例(包括:简单轻量的http服务器,爬虫。。)
新增poller轮询器接口,实现对epoll, poll, kqueue, select的封装,逐步取代老的aiop接口
新增mbedtls ssl库接口支持,目前已支持:openssl, polarssl, mbedtls
tbox所有stream, socke
继续阅读 »
tbox内部的所有io操作都是原生支持协程的,可以在线程和协程间任意切换,内置基于轮询的io调度器(epoll, kqueue等,后续还会支持iocp).
我们在socket操作的时候,只需要像平常顺序编程那样操作就可以实现异步并发收发数据。
这里先给个简答的文件服务器的例子,可参考下,代码非常简单:
文件接收服务器
这个文件服务器的功能很简单,就是不停的接收连接,然后开新协程,进行文件传输。
通过协程,从原始socket写起,也只需要不到100行代码,就可以实现一个高并发的文件服务器。
此处用到了tb_socket_sendf直接对文件句柄操作,发送到socket,内部使用sendfile实现,不需要再上层开buffe
继续阅读 »
node程序的调试向来是比较令人头疼的问题,不过Chrome DevTools在去年已经可以支持node程序的调试,虽然不像使用Eclipse调试Java程序那么方便功能那么强大,但是也算是提供了一个便捷的途径来帮助我们快速的定位node程序的问题。
这个功能是在Google I/O 2016上正式发布的,可以通过这里的视频(youtube,需翻墙)了解更多信息。
使用步骤记录如下:
安装最新的Node
要支持这项功能,需要node.js的版本在6.3.0以上。如果版本较低,将会提示不支持该功能。在Mac上你可以使用nvm来切换node的版本,具体请自行google之。
➜ wx node --inspect --
继续阅读 »
最近在研读任教主的《Android开发艺术探索》大作,真是一本好书,以下为记录的读书笔记:
第一章 Activity的生命周期和启动模式
1.用户打开新的activity或者切换到桌面的时候:onPause->onStop;
特殊情况:如果新activity采用了透明主题,那么当前activity不会回调onStop;
继续阅读 »
最近想写个音乐播放器,偶然看到轻听这款播放器的播放和暂停按钮,在切换过程中的动画很是吸引我。本着造轮子(其实是 github 上边没找到)的想法,就花了点时间撸出来了这个效果。
效果就是下边这个样子:
more
下边说下实现方法,中间也踩了一些坑。
测量及初始化
首先要确实View的宽高,在这里由于是圆形按钮,所以设置宽高相等,onMeasure()方法中设置下即可:
```java
mWidth = MeasureSpec.getSize(widthMeasureSpec);
mHeight = MeasureSpec.getSize(heightMeasureSpec);
int widt
继续阅读 »