PS入门
1.好习惯
1.永远不破坏原始素材(复制图层ctrl+j)
2.图层管理(图层分组ctrl+g)
3.保存PSD文件
4.尽量不使用快捷键
2.图层的概念
ps中的所有操作均发生在图层上,将多个图层叠加可将每个图层上的图像叠加,上层覆盖下层内容生成一张新图。
魔法棒:通过算法将相近的颜色转换为选区,
图层蒙版:使用图层蒙版将不显示的部分(黑色区域)遮住
3.钢笔工具
继续阅读 »
docker
docker 使用go语言开发,对进程进行封装隔离。
more
docker的三个基本概念
一、镜像(Image)
Docker中的文件系统(操作系统的完整root文件系统),提供容器运行时所需的程序,文件,资源,配置及配置参数(匿名卷,环境变量,用户),镜像不会包含任何动态数据,其中的内容在构建后不会发生任何的变化,Docker的镜像设计基于Union FS设计为分层存储的架构。镜像的构建一层一层前者是后者的基础,构建完成后不再发生变化。
二、容器(container)
容器是镜像的运行实体(实质为进程),容器运行时以镜像为基础层创建当前的容器存储层,容器存储层的生命周期与容器相同,保存于容器存储层
继续阅读 »
随着xmake v2.0.1 版本的发布,这大半年的辛苦总算告一段落,这个版本我基本上重构整个项目的90%的代码,几乎算是重写了,但结果还算挺满意的。。
因为上个版本的架构设计的不是很好,不能很好进行扩展,也不支持插件模式,语法设计上也不严谨,容易出现各种隐患,这对于后期维护和发展来说,已经出现了不可逾越的瓶颈。。
每个项目到了一定阶段,都是要不断重构,重新构思整体架构,才能使得项目不断的向好的方向演进。。
(当然如果是公司项目就另当别论了,坑太多,历史负担较重,不是说要重构就能让你重构的。=。=)
回归正题,目前xmake基本上所有模块都是可扩展的:
插件扩展
工程模板扩展
平台架构扩展
action扩展
option选
继续阅读 »
note of https://www.ichunqiu.com/course/56927
Hacking三步曲
理解系统(Understanding)
系统性的基础课程学习,深入理解计算机系统运作机制。
破坏系统(Breaking)
学习与创造漏洞挖掘与利用技巧
重构系统(Reconstruction)
设计与构建系统防护
基础课程学习
核心基础课程——计算机的工作原理
体系结构
CPU的设计与实现
机器指令与汇编语言
指令的解码、执行
内存管理
CMU 18-447 Introduction to Computer Architecture
https://www.ece.cmu.edu/~ece447/s15/dok
继续阅读 »
为什么设计良好的软件没能成为主流?
按照一般的直觉,一款好的软件具有以下特点:
简洁 - 接口和实现都应当简洁,接口简洁优先于实现简洁
正确 - 功能必须正确,Bug 越少越好
一致 - 接口以及用法应当一致,不应当有零零散散,格格不入的接口
完整 - 功能应当完整,设计时应考虑到尽可能多的使用场景
继续阅读 »
一个自定的dynamic_cast设计
一个运行时检查的自设计dynamic_cast转换系统:
- 包含2个预编译宏,CnDeclareRootRTTI 和CnDeclareRTTI, 宏的目的只是为了生成对应的代码, 实际手法和直接在类里码代码是一样意思;
- 一个简单的RTTI类型,每个基类和派生类将会自带一个RTTI的实例属性: ms_RTTI, RTTI类如下:
class CnRTTI
{
public:
CnRTTI (const char* pcName, const CnRTTI* pkBaseRTTI);
inline const char* GetName() const {return m
继续阅读 »
十多年来,我们一直使用 XMLHttpRequest(XHR)来发送异步请求,XHR 很实用,但并不是一个设计优良的 API,在设计上并不符合职责分离原则,输入、输出以及状态都杂糅在同一对象中,并用事件机制来跟踪状态变化。并且,基于事件的模型与最近流行的 Promise 和 generator 异步编程模型不太友好。
Fetch API 旨在修正上述缺陷,它提供了与 HTTP 语义相同的 JS 语法,简单来说,它引入了 fetch() 这个实用的方法来获取网络资源。
在 Fetch 规范中对 API 进行了定义,它结合 ServiceWorkers,尝试做到如下优化:
改善离线体验
保持可扩展性
写这篇文章时,Fetch AP
继续阅读 »
stl的容器库非常强大,但是为了要兼容各种元素类型,采用了模板进行泛化,这样的好处就是使用非常的方便,但是编译器会对使用到的每种类型都进行一遍实例化,用的类型太多的话不仅影响编译速度而且生成的可执行文件也很冗余。
因此,TBOX在设计容器架构的时候,引入tb_item_func_t类型,来设置容器使用的成员类型,这样在实现容器通用性的同时,也不会产生过的冗余,而且容器接口操作上,同样相当的便利。
可以先看个简单使用哈希的例子:
```c
/* 初始化hash, 哈希桶大小8
* 键:大小写敏感字符串
* 值:long整型
*/
tb_hash_map_ref_t hash = tb
继续阅读 »
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈,
内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大。
之前考虑过采用stacksegment方式进行内存优化,实现动态增涨,但是这样对性能还是有一定的影响,暂时不去考虑了。
最近参考了下boost和protothreads的stackless协程实现,这种方式虽然易用性和灵活性上受到了很多限制,但是对切换效率和内存利用率的提升效果还是非常明显的。。
因此,我在tbox里面也加上了对stackless协程的支持,在切换原语上参考了protothreads的实现,接口封装上参考了boost的设计,使得更加
继续阅读 »
这篇小短文只是谈谈自己仅仅读过川端康成的三篇名作(雪国,古都,千只鹤)之后的一些感想。
这三篇作品中的男主,分别是冬季来雪国疗养的岛村、千重子的父亲绸缎批发店老板太吉郞、身份不明的菊治。
先说这三位男主自身的生活状态。岛村美其名曰“舞蹈艺术研究家”,但“他没能亲眼看到西方人的舞蹈”,也“向来不看日本人跳西方舞蹈”,他研究舞蹈艺术,“其实是任意想象”。太吉郞是生意日渐清减的绸缎批发店老板,年轻时他父亲就知道“太吉郞没有天才,难以进步,并想借助麻药的魔力给出奇怪的友禅画稿”,直到中年,“他为了得到一些构图的灵感,经常独自躲进嵯峨的尼姑庵里深居简出”,即便如此,他设计的花样既没有迎合了世人的喜好,也没有令自己满意。菊治,故事中没有描述
继续阅读 »