陈颂光
全栈工程师,承接从编译器到网站的各类软件开发与咨询,也可以聊历史哲学。
关注我的 GitHub

让世界各地的用户都能用上你的软件

可用性 java

虽然中国人口不少,但还有更多人在国外。要争取来自世界各地的客户,让软件符合当地的习惯就有助提升观感。除了众所周知的语言外,时区、图标、数字等也可能导致闹笑话。因此,国际化在早期就开始考虑的话往往能做得更好,要是由于早期过于依赖一个地区的特点,后期再作补救将会更为昂贵。

用Jekyll在GitLab pages上搭建博客

web

虽然已经有很多可免费使用的博客平台,但对于不善交际的程序员来说,更多社交化功能还不如更大的自主权。仅就可以自由地运用JS这点,不仅可以渲染数学公式、高亮的代码和乐谱等,还可以分析页面流量。由于大家可能比较熟悉GitHub pages,这里就介绍一下GitLab pages。我们仍然用最流行Jekyll作静态生成器,但GitLab的持续集成完全容许你使用其它的静态生成器,甚至可以是自己发明的。

浅谈SEO

SEO web

搜索引擎已经成为网页流量的主要来源,因此争取更多人看到您的信息,就要让更多人通过搜索引擎发现你。在Google和百度等竞价排名搜索广告的费用远超你的负担能力的情况下,搜索引擎优化(SEO)就变得相当重要。我们不仅将简单介绍SEO最基本的原理和实践,而且还会始终立在更广阔的视野来看如何对用户友好,包括前端、后端的开发大员都应当知道的注意事项。即使你并不需要做推广,本文也能帮助你认清网络上某些乱像以便提防上当。

浅谈调色

设计 颜色

颜色作为以视觉为媒介接收信息的一个固有属性,挑选合适的颜色是每个视觉设计不可或缺的任务,不论你在设计线路图、图标、书籍、幻灯片、视频、网站、交互式应用程序还是别的。

Ant项目利用Ivy借力Maven仓库

ivy maven ant java

进行开发时难免要依赖于第三方的包,而这些包还可能依赖于其它包,这是开发者共同面对的问题。就Java开发而言,Maven中央仓库大概是JAR包最齐全的地方,因此是解决依赖的理想地方。对于使用Ant而不是Maven为构建工具的项目,也可以使用Ivy插件来与Maven仓库打交道(至于maven插件已不维护 ,但似乎仍能用),解决依赖关系。值得一提的是,Maven、Ant、Ivy全是Apache基金会的项目。

用GNU Cash管理帐目

gnucash 会计

不管是个人还是中小企,准确了解自身的财务状况都是重要的,使用会计软件GnuCash记帐正是一个好的开始。通过复式记帐法,从你的工资和日常开销,到外币、证券、贷款的变动情况,也能了如指掌并通过直观的报表呈现。Android版甚至可助你随时随地记帐。而且,这款软件是免费的自由软件,有中文界面!

Debian和openJDK下Netbeans 8随机崩溃的应对

netbeans 应急

前段时间在两台机器都出现了Netbeans 8在毫无征兆下崩溃的现象,似乎与崩溃前做的事没有什么关联,甚至没有留下JVM崩溃的日志文件,两台机器都在用Debian 9, openJDK 8版本较新。

理解计算机网络

网络

一组相互连接的网络称为互联网。为了设计和描述网络,通常用分层方法以分解复杂度,每层负责提供不同的服务,每一层只依赖于下面一层的接口。每一层也可有多种称为协议的工作方式以提高灵活性。下面给出一个实用的分层模型:

  • 物理层负责在通信信道上传输比特(它要尽可能确保一端发送一个比特时另一端收到一个相同的比特),这涉及机械和电子:
    • 0与1分别怎样表示
    • 传输是单工的(只有一方可发送)、半双工(双方可发送,但同一时间只有一方在发送)的还是全双工(双方可同时发送)
  • 数据链路层负责在两个相邻节点间传输帧,常见的问题有:
    • 确保接收方收到正确的帧,通常是通过发回确认帧
    • 确保接受方与发送方速率匹配(流量调节)
    • 广播式网络中共享信道的访问
  • 网络层负责在两个节点间传输帧,常见的问题有:
    • 对节点的命名
    • 决定从源到目标的路径(路由)
    • 异构网络间的兼容性
    • 服务质量保证
  • 传输层负责在两个应用程序间传输包,常见问题有:
    • 区分应用程序(端口)
    • 是否保证可靠性(顺序、错误检测)
    • 流量控制
  • 应用层负责生成或处理数据。

XML概览

xml web

XML(可扩展标记语言)是一种用于描述结构化信息的语言。作为SGML的一种简化,由W3组织维护。与用非XML格式相比,使用基于XML的格式有以下优点:

  • 由于已有现成的解析器等成熟的配套工具,容易可靠地处理
  • XML是经过深思熟虑的,可以避免不少常见问题
  • XML格式往往是自描述的,容易理解和排错

理解信息安全

信息安全

随着信息的价值不断被挖掘,以意想不到的方式获取和修改信息、取得别人的计算能力变得有利可图。要降低成为受害者的可能性,就有必要了解攻击者的经济学和技术手段,识别自身风险,从而在合适层面用合适的方式应对。不会攻击,就不会防护。

Flex分词程序生成器概览

unix flex lex

flex是一个分词程序生成器,我们只用指定各种标记满足的模式和碰到它们时应执行的C代码,flex就能生成对应C语言的记法分析程序。

理解计算理论

计算理论 可计算性 复杂度

什么能算,什么不能算?能算的话能需要多少空间和时间才能算出?这是关于计算的基本问题。虽然听来也许有点玄,但人们还是得到一些不仅美而且实在的结果。好像不存在通用压缩算法总能把文件压到比原来小,不然反复用它就能把文件压没了,这道理虽然浅显,但意味深长。

HTML5概览

html web

Hypertext Markup Language (HTML)是一种描述文档的语言,主要是网页的内容,外观和行为则分别由CSS和Javascript控制。这里主要介绍HTML5。

Makefile构建系统概览

unix makefile 构建

Unix下最常用的构建脚本语言要数makefile,但手写makefile往往有过于繁琐,故常用automake来自动生成支持所有标准目标的makefile,再用autoconf处理配置软件包的工作。

理解多媒体编码

多媒体 编码

与文本相比,图片、音频、视频往往占用较多空间,于是瓶颈常常在传输,为了提高性能通常会进行有损压缩,但人们竟然大多感觉不出损失。

理解操作系统原理

操作系统

操作系统是为用户提供计算机的某种模型的软件。硬件涉及很多实现相关的细节,操作系统管理硬件资源,从而向应用程序呈现一个清晰和统一的接口。

用五笔输入法打中文

五笔 输入法 中文

五笔输入法作为曾在国内大规模推广的中文输入法,不仅有形码输入法重码率低、方便盲打、生僻字友好带来的速度和准确率优势,而且规则的键盘布局和简单的取码规则让它相当易学易用。现在我们一起试用一下五笔。

Javascript概览

javascript web 程序设计语言

Javascript(ECMAScript)是,除了作为客户端网页脚本的事实标准外,也逐渐在服务器端取得一些应用(如Node),还在个别其它地方用作脚本语言(如PDF)。JS是一种基于对象的动态类型语言,但并不基于类而基于原型。JS的对象可看作其它语言中的散列表,键值对即属性(键称为属性的名字,值称为属性的值)不区分方法和域,其中每个对象有一个prototype属性的值称为对象的原型。

命令行计算器概览

unix 计算器

当需要做点数值计算时,当然可以用很多种编程语言。但有时我们只想方便一点,于是unix下有一些小计算器。

CSS概览

css web

CSS(层叠样式表)用于指定外观,最常用于指定网页的外观,但也可用于指定图形用户界面的外观(如Java FX)等等。