Adding SQLCipher to Xcode Projects IOS MAC

Adding SQLCipher to Xcode Projects

SQLite is already a popular API for persistent data storage in iOS apps so the upside for development is obvious. As a programmer you work with a stable, well-documented API that happens to have many good wrappers available in Objective-C, such as FMDB and Encrypted Core Data. All security concerns are cleanly decoupled from application code and managed by the underlying framework.

The framework code of the SQLCipher project is open source, so users can be confident that an application isn’t using insecure or proprietary security code. In addition, SQLCipher can also be compiled on Android, Linux, OS X and Windows for those developing cross-platform applications.

Using SQLCipher in an iOS app is fairly straightforward. This document describes integrating SQLCipher into an existing iOS project using the Community Edition source code build process. This tutorial assumes some familiarity with basic iOS app development and a working install of Xcode (6.1.1). The same basic steps can be applied to OS X projects as well.

🔥 Hot Tip: Commercial Edition static libraries are available for you to drop right into your project if you’d like to skip all this and receive personalized support from our crack development team! Binaries and helpful projects integrations are available for all supported platforms. Learn more »

Prerequisites

Xcode with an iOS or OS X SDK installed. Visit the Apple Developer site for more information on downloading the latest Xcode and iOS and OS X SDKs.

OpenSSL

OpenSSL is no longer required for building SQLCipher on iOS and OS X, as the project by default uses Apple’s CommonCrypto framework for hardware-accelerated encryption. You can still build SQLCipher with other crypto providers like OpenSSL if you’d prefer, or you can write your own.

SQLCipher

Fire up the Terminal app, switch into your project’s root directory and checkout the SQLCipher project code using Git:

$ cd ~/Documents/code/SQLCipherApp
$ git clone https://github.com/sqlcipher/sqlcipher.git

Xcode Project Configuration

The SQLCipher source provides a sqlcipher.xcodeproj project file that we’ll add to your project to build a static library that you’ll link from your main application target.

Add Project Reference

Open your iOS app’s project or workspace in Xcode, open the Project Navigator (command+1), and click on the top-level Project icon for your iOS app. Right click on the project and choose “Add Files to “My App”” (the label will vary depending on your app’s name). Since we cloned SQLCipher directly into the same folder as your iOS app you should see a sqlcipher folder in your root project folder. Open this folder and select sqlcipher.xcodeproj:

Add Files to 'My App'

Project References

Project Settings

Navigate to your Project settings (make sure you don’t select the application target level). Select the Build Settings pane. In the search field, type in “Header Search Paths”. Double-click on the field under the target column and add the following path: $(PROJECT_DIR)/sqlcipher/src:

Next, add a setting to ensure that SQLCipher is the first library linked with your application in the “Other Linker Flags” setting. Start typing “Other Linker Flags” into the search field until the setting appears, double click to edit it, and add the following value: $(BUILT_PRODUCTS_DIR)/libsqlcipher.a

You will next edit one other setting on your Project to ensure the SQLCipher builds correctly—”Other C Flags.” Start typing “Other C Flags” into the search field until the setting appears, double click to edit it, and in the pop-up add the following value: -DSQLITE_HAS_CODEC

Target Settings

Next, navigate to the Target Level settings. Add a Target dependency to each of your application targets to ensure that SQLCipher is compiled before the application code. In Xcode’s Project Navigator (command+1), select your app’s Project file and in the Editor pane select Build Phases and your app’s main target (not the project file).

Expand Target Dependencies and click on the + button at the end of the list. In the browser that opens, select the sqlcipher static library target:

Add Target Dependency

Expand Link Binary With Libraries, click on the +button at the end of the list, and select the libsqlcipher.a library.

Link Binary With Libraries

Finally, also under Link With Libraries, add Security.framework.

🔥 Hot Tip: If libsqlite3.dylib or another SQLite framework is listed in your Link Binary With Libraries list be sure to remove it!

Repeat these steps for any other targets in your project that will depend on SQLCipher, i.e. unit tests.

Integration Code

Now that the SQLCipher library is incorporated into the project you can start using the library immediately. Telling SQLCipher to encrypt a database is easy:

  • Open the database
  • Use the sqlite3_key function to provide key material. In most cases this should occur as the first operation after opening the database.
  • Run a query to verify the database can be opened (i.e. by querying the schema)
  • As a precautionary measure, run a query to ensure that the application is using SQLCipher on the active connection
#import <sqlite3.h>

...
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent: @"sqlcipher.db"];
sqlite3 *db;
bool sqlcipher_valid = NO;

if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) {
    const char* key = [@"BIGSecret" UTF8String];
    sqlite3_key(db, key, strlen(key));
    if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
      if(sqlite3_prepare_v2(database, "PRAGMA cipher_version;", -1, &stmt, NULL) == SQLITE_OK) {
        if(sqlite3_step(stmt)== SQLITE_ROW) {
          const unsigned char *ver = sqlite3_column_text(stmt, 0);
          if(ver != NULL) {
            sqlcipher_valid = YES;

            // password is correct (or database initialize), and verified to be using sqlcipher

          }
        }
        sqlite3_finalize(stmt);
      }
    }
    sqlite3_close(db);
}

In most cases SQLCipher uses PBKDF2, a salted and iterated key derivation function, to obtain the encryption key. Alternately, an application can tell SQLCipher to use a specific binary key in blob notation (note that SQLCipher requires exactly 256 bits of key material), i.e.

PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'";

Once the key is set SQLCipher will automatically encrypt all data in the database! Note that if you don’t set a key then SQLCipher will operate identically to a standard SQLite database.

Testing and Verification

There are a number of ways that you can verify SQLCipher is working as expected in your applications before its release to users.

After the application is wired up to use SQLCipher, take a peek at the resulting data files to make sure everything is in order. An ordinary SQLite database will look something like the following under hexdump. Note that the file type, schema, and data are clearly readable.

% hexdump -C plaintext.db
00000000  53 51 4c 69 74 65 20 66  6f 72 6d 61 74 20 33 00  |SQLite format 3.|
00000010  04 00 01 01 00 40 20 20  00 00 00 04 00 00 00 00  |.....@  ........|
...
000003b0  00 00 00 00 24 02 06 17  11 11 01 35 74 61 62 6c  |....$......5tabl|
000003c0  65 74 32 74 32 03 43 52  45 41 54 45 20 54 41 42  |et2t2.CREATE TAB|
000003d0  4c 45 20 74 32 28 61 2c  62 29 24 01 06 17 11 11  |LE t2(a,b)$.....|
000003e0  01 35 74 61 62 6c 65 74  31 74 31 02 43 52 45 41  |.5tablet1t1.CREA|
000003f0  54 45 20 54 41 42 4c 45  20 74 31 28 61 2c 62 29  |TE TABLE t1(a,b)|
...
000007d0  00 00 00 14 02 03 01 2d  02 74 77 6f 20 66 6f 72  |.......-.two for|
000007e0  20 74 68 65 20 73 68 6f  77 15 01 03 01 2f 01 6f  | the show..../.o|
000007f0  6e 65 20 66 6f 72 20 74  68 65 20 6d 6f 6e 65 79  |ne for the money|

Fire up the SQLCipher application in simulator and look for the application database files under /Users/sjlombardo/Library/Application Support/iPhone Simulator/5.0/Applications/<Instance ID>/Documents. Try running hexdump on the application database. With SQLCipher the output should looks completely random, with no discerning characteristics at all.

% hexdump -C sqlcipher.db
00000000  1b 31 3c e3 aa 71 ae 39  6d 06 f6 21 63 85 a6 ae  |.1<..q.9m..!c...|
00000010  ca 70 91 3e f5 a5 03 e5  b3 32 67 2e 82 18 97 5a  |.p.>.....2g....Z|
00000020  34 d8 65 95 eb 17 10 47  a7 5e 23 20 21 21 d4 d1  |4.e....G.^# !!..|
...
000007d0  af e8 21 ea 0d 4f 44 fe  15 b7 c2 94 7b ee ca 0b  |..!..OD.....{...|
000007e0  29 8b 72 93 1d 21 e9 91  d4 3c 99 fc aa 64 d2 55  |).r..!...<...d.U|
000007f0  d5 e9 3f 91 18 a9 c5 4b  25 cb 84 86 82 0a 08 7f  |..?....K%.......|
00000800

Other sensible testing steps include:

  • Attempt to open a database with a correct key and verify that the operation succeeds
  • Attempt to open a database with an incorrect key and verify that the operation fails
  • Attempt to open a database without any key, and verify the operation fails
  • Programtically inspect the first 16 bytes of the database file and ensure that it contains random data (i.e. not the string SQLite Format 3\0)

来源:https://www.zetetic.net/sqlcipher/ios-tutorial/

2016编程语言受欢迎排行榜

Python部落组织翻译

IEEESpectrum出品的"最受欢迎编程语言排行榜"的第三张榜单出炉了.尽管不可能统计到每一个程序员的喜好,Spectrum从10个数据来源选取了12个维度来表示编程语言受欢迎的程度.然后综合12个维度的评价得出最后的榜单.

由于每个人看重的方面不一样,比如你可能关系开源社区哪些编程语言最火?他可能关心工作的人最喜欢哪些语言?Spectrum允许你自由调整构成榜单结果的每个维度的权重.你也可以根据选项过滤榜单的结果,比如查看嵌入式系统或者移动应用中哪些语言最受欢迎?

默认权重情况下的榜单显示了各方关切程度综合出来的平均值.那么2016最受欢迎的编程语言有哪些呢?

连续两年位居第二之后,C语言终于超越了Java,登顶榜首.在前五名中,Python超过C++成为第三名,C#被R顶出前五.最近几年R一路飙升,主要是由于乘上了大数据分析的浪潮.

Google和Apple也在榜单上刷了一下存在感.Google的Go语言打败Apple的Swift进入了榜单的前十名,不过Swift也不赖,去年它上升了5个座次,从16名上升到了11名,要知道它是去年才进入榜单的.其他语言也上上下下地发生了分化,不过值得注意的是,今年没有一门新语言进入了榜单.

另外一个比较明显的变化是Ladder Logic,它上升了5位,排名第34.Ladder Logic主要用在逻辑控制器上,主要是工厂在使用它.尽管工厂使用是一个比较小的场景,但是它能排到当前的位置,一定程度上反映了这个场景的实际规模.HTML还是很受欢迎,今年上升到了第16位.

在受欢迎程度下滑的语言中,最令人惊讶的是Shell语言,系统管理员编写脚本几乎无不依赖于它,但是它今年下滑了7个位置,到第19位.也许这反映了在相对更复杂的系统中,或者基于云的数据中心中系统管理的一些现状.不过我们需要继续关注这个趋势,来确定Shell是会持续地下滑,还是这只是统计方法上的疏漏.

从趋势来看,编程语言的前10名是

在公司雇员中,编程语言的前十名是

在开源社区中,编程语言的前十名是

英文原文:http://spectrum.ieee.org/computing/software/the-2016-top-programming-languages

译者:诗书塞外

PHP CMS系统排行榜

CMS系统中文名称为网站内容管理系统,大概在2002年左右,如果想进行网站的内容管理,那么基本上都是靠手工维护,但是一个网站的内容成千上万,如果还继续靠手工完成那是基本上不可能的事,如果有CMS系统来支撑你的网站,那将节省了不少的人力,只要你能够配置好!站长只需要定时更新就可以了!这样通俗的解释,很容易理解的!

TOP 4

帝国CMS

帝国CMS是不同于以往的CMS系统,他可以直接在后台通过新建表、自定义字段,然后组成新的系统模型。从而实现各种适合用户自己的系统。如下载系统、音乐系统、商城系统、产品库等等……并且此功能为数据量较大的网站进行数据部署(将信息量分配于不同的信息表)。并且系统内置还是用户自定义的模型,每个模型都有自己的采集。如果会点程序,可以扩展更多更复杂的系统。

它采用了系统模型功能:用户通过此功能可直接在后台扩展与实现各种系统,如产品、房产、供求、等等系统。采用了模板分离功能:把内容与界面完全分离,灵活的标签+用户自定义标签,使之能实现各式各样的网站页面与风格;栏目无限级分类;前台全部静态:

(帝国CMS后台界面示意图)

TOP 3

PHPCMS

phpCMS是一个开源的PHP开发框架。Phpcms由内容模型、会员、问吧、专题、财务、订单、广告、邮件订阅、 短消息、自定义表单、全站搜索等20多个功能模块组成,内置新闻、图片、下载、信息、产品5大内容模型。Phpcms 采用模块化开发,支持自定义内容模型和会员模型,并且可以自定义字段。

PHPCMS采用PHP5+MYSQL做为技术基础进行开发。采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,一般的二次开发能力,可满足网站的应用需求。

(PHPCMS后台界面示意图)

TOP 2

ECShopCMS

ECShopCMS是一款B2C独立网店系统,系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。随着3G网络的普及,智能手机的大量使用,手机上网的用户越来越多,使手机购物成为可能,手机购物势必会成为一种趋势,ECshop新增手机浏览html功能。并且新增商品规格分库存功能,方便商家管理不同规格货品的库存。在商品详情页新增购买记录,提高网店的活跃性。html编辑器上传图片后增加水印功能。改进编辑快递单功能,增加可视化编辑,方便管理员修改打印快递单。上传商品相册图片,使之能够支持外链图片。

(ECShopCMS后台界面示意图)

TOP1

dedeCMS

dedeCMS采用XML名字空间风格模板,模板全部使用文件形式保存,对用户设计模板、网站升级转移均提供很大的便利,模板标签为站长DIY自己的网站提供了支持。高效率标签缓存机制:允许对类同的标签进行缓存,在生成 HTML的时候,有利于提高系统反应速度,降低系统消耗的资源。模型与模块概念并存:在模型不能满足用户所有需求的情况下,DedeCMS推出一些互动的模块对系统进行补充。

(DEDECMS后台界面示意图)

每个程序员都应该收藏的算法复杂度速查表

英文:http://bigocheatsheet.com/
编译:Linux中国
链接:https://linux.cn/article-7480-1.html

这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 OBig-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的大 O 速查表呢?”所以,为了节省大家的时间,我就创建了这个,希望你喜欢!

— Eric[1]

图例

数据结构操作

数组排序算法

图操作

堆操作

大 O 复杂度图表

Big O 复杂度

推荐阅读

  • Cracking the Coding Interview: 150 Programming Questions and Solutions[33]
  • Introduction to Algorithms, 3rd Edition[34]
  • Data Structures and Algorithms in Java (2nd Edition)[35]
  • High Performance Java (Build Faster Web Application Interfaces)[36]

关注「算法爱好者」

Web的十大可疑顶级域名,你知道么?

就像所有城市一样,互联网也有一些频繁发生可疑活动的地区,比如垃圾邮件、网络诈骗、有潜在威胁的软件、恶意软件、僵尸网络、网络钓鱼等。

企业安全公司Blue Coat System定期分析来自1万5千家企业和7500万用户的Web请求,跟踪互联网上的可疑活动。该公司在上个月发布了与恶意网站有所联系的十大顶级域名。

Web的十大可疑顶级域名,你知道么?
主流的顶级域名以前有在过去的几年中数量激增,从.com、.net和.org扩展出了更多种类。新兴的顶级域通常会吸引大量威胁源,因为使用它们进行注册的成本比起著名的顶级域名要低得多。

Blue Coat建议组织采取措施进行防护,比如屏蔽高风险顶级域名,或者在用户连接到托管在这些顶级域名上的网站时发出警告。Blue Coat还建议用户在不确定目标链接的具体地址时将光标移到超链接对象上,查看目标的具体地址。如果使用移动设备,可以通过点击并长按执行相同的操作。以下是十大最可疑的顶级域名:

1 .zip

这份名单的内容变化很快。.zip域名在Blue Coat于九月份发布报告时还高居榜首,但其排位之后大幅下滑。Blue Coat公司恶意软件研究小组负责人克里斯·拉尔森指出,让.zip高居榜首的原因在于它其实仅有一个活跃域nic.zip,ta是Google的预注册页面,会将用户中继到google.com下属的一个页面,其中介绍了他们新的顶级域名。

拉尔森说:“来自.zip的URL的确出现在了我们的流量日志中,根据公司的WebPulse系统记录,每天我们的客户都会发出10亿匿名访问Web的请求。如果你仔细研究,记录中的大多数都是文件名,而不是URL,但它们最终肯定是以某种方式作为URL出现在了某人的浏览器上,并且被判定成了可疑链接。”

大多数请求都是看上去很搞笑的URL,它们并不能解析,因此被标记为可疑。但拉尔森补充称很多客户雇佣的安全公司都发现.zip域名和Cryptowall、MiniDionis和CozyBear等恶意软件家族间存在联系。

2 .review

尽管.zip从第一的位置上跌落,顶级域名.review仍稳坐全网第二大可疑域名。拉尔森解释称这主要是由于它托管的诈骗网站。

“只要看一看域列表,你就会发现前15个都是诈骗网站,其中至少12个都与中国某保健品诈骗网站同属一个家族。.review可能并没有对驱逐坏人们作出任何努力。”

3 .country

顶级域名.country最近已经在Blue Coat公司的排名中获得了第一,但在报告9月份发布时它还位居第三。

“.country并不像是.click、.link和.rock这些顶级域名,为了弄清它究竟托管了多少恶意网站,我开始时查看了公司的日志。我发现所有近期注册的.country域名都是可疑的。因此如果你想在Web网关上完全屏蔽该域名,我不会怪你。如果有心情的话,你还可以屏蔽.click域名,尽管它并没有像.country这么糟糕。”

该顶级域名似乎已经完全成为了以有奖游戏/调查为名进行钓鱼的诈骗网站殖民地。拉尔森提示,Blue Coat没有直接发现任何与此网络相关的恶意软件,但有些它的配套广告网络与可疑软件存在密切联系。

4 .kim

.kim顶级域名在Blue Coat报告中排位第四。但拉尔森提示称.kim和.xyz(并不属于排名前十)的域名注册商都已经联系了Blue Coat公司,以消除他们顶级域名下的一些可疑活动。

“我们在最近的流量中发现了改变。他们做得更好了,这理应得到称赞。”

该顶级域名确实托管了一些合法的域,最著名的是韩国的某科技博客和土耳其的几家网站(Kim在土耳其语里是“谁”的意思)。但该域名与可疑软件和诈骗网站间存在联系,而且至少有一个域上托管了域名生成算法,该算法能够生成可被恶意软件利用的域名。因此,.kim理应榜上有名。

5 .cricket

.cricket取名自世界上第二大流行的运动:板球。该顶级域名被列为全网第五大可疑顶级域名。

拉尔森指出,尽管它也托管了一些合法网站,但其中存在大量搜索引擎毒化的实例。例如,StarWarsMovie.cricket从其它地方拉来了大量星球大战相关周边的图片,以获取流量,其中有些图片显然就是从其它地方盗取的。如果在页面上点击,将跳转到销售蓝光《星球大战第六部:绝地归来》的网站。

6 .science

第六大可疑顶级域名很大程度上成了其营销策略的牺牲品。为了提升顶级域名的名气,域名注册商曾免费开放.science域的注册。

“他们以低价倾销,基本可以肯定会遇上麻烦。如果花一块钱就能注册一个域名,坏人将蜂拥而至。”

拉尔森说,相比可疑软件和诈骗,.science域和sao’rao的关系最紧密。他指出,可疑活动包括一个大型电子书网站,它的下载页面曾存在可疑软件活动。另一个网站则销售定制的学术论文。

7 .work

顶级域名.work看上去和骚扰及诈骗离得更近,离恶意软件比较远。然而拉尔森的小组找到了一些指向可疑软件分发网络的尝试性链接。拉尔森指出,虽然存在一些合法网站,它仍旧值得屏蔽。举例而言,它托管了一家土耳其色情网站和巴基斯坦的一家视频剪辑网站,这两个网站极其相似。

8 .party

.party位列第八。这里的很多网站乍一看都是合法的。比如排名第一位的FashionOnly.party,页面上展示了女性婚纱礼服和休闲服装。

拉尔森说:“有一些小黄旗,这些图片都有点烂,所有都像是从原格式转换出来的。很多照片的背景中都有其他网站的水印。这是一个没有意义的网站。在评论中也没有任何内容”

这些都是搜索引擎毒化的标志。该顶级域名还托管了一大堆MP3网站,它们有可能是盗版或者恶意软件传播平台。另有一家网站托管了可疑的Tracker。

9 .gq

.gq是赤道几内亚的国家代码。Blue Coat的报告公布以来,.gq已经滑出前10位。但拉尔森指出,它在许多方面能够获得终身成就奖。

“如果翻看数据库中所有与.gq相关的评分,超过7500条的的评价中有99%是可疑的。”

Blue Coat报告中称,大多数对.gq的滥用都属于搜索引擎毒化,一大部分作为Cookie截取器的可疑视频都和恶意软件相关。它还托管了一些自称“震撼视频”的骚扰/诈骗网站,以及少量的其它恶意软件、钓鱼和色情网站。

10 .link

.link是Blue Coat名单的最后一位。该顶级域名充斥着色情内容分发网络和盗版网站,但这都不是Blue Coat标记为可疑的对象。有一家日本网站专门提供关于橄榄球的体育内容,另一家网站则转发美国一些广播电台的新闻内容。但在这些合法域之外还存在很多诈骗网站。

“根据历史来看,这是一个滋生骚扰网站的顶级域。”拉尔森说。

人名与术语

克里斯·拉尔森(Chris Larsen)

顶级域名(Top Level Domain,TLD)

域名生成算法(Domain Generation Algorithm,DGA)

搜索引擎毒化(Search Engine Poisoning)

本文业界资讯相关术语:网络安全论文 网络安全密钥 网络安全工程师 网络安全技术与应用 网络安全概念股 网络安全知识 网络安全宣传周 网络安全知识竞赛 网络安全事件

我们程序员的属性 [转]

俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样。

他们在编程中养成的一些思维方法会不自觉地在日常生活中表现出来。

我们这里总结了程序员日常生活中经常表现出来的8个编程思维。

你有没有同感呢?

0.在正常交流中掺杂编程规范和语法

职业原因:编程语言都有自己特定的语法,程序员在开发者都要遵守这些。

当然,还有一些约定俗成的编程规范,如代码缩进(是缩进4个字符还是8个字符)、注释风格,采用骆驼式(CamelCase)或帕斯卡式(Pascal)来命名变量或函数等等。

日常行为:这些编程习惯可能就会影响到程序员的日常文档书写习惯,比如写邮件时会用分号来结束一行内容等。

例子:

iWriteInCamelCaseEveryNowAndThenItAnnoysMySisterWhoReadsMyEmail.(小骆驼式拼写法)
IF you have tea I’ll have it ELSE I’ll just take wate.(利用了IF-ELSE判断语句)

1.真实生活中习惯讲操作快捷键

职业原因:程序员玩快捷键操作软件应该很熟练了,一般来说,Ctrl-C表示复制、Ctrl-V表示粘贴(对特定编辑器如Vi、Emacs来说会有不同)。

日常行为:这些快捷键有时在程序员的行为和话语中表现的很常见,这也会在一些场合引起尴尬。

例子:

“Mentally trying to Ctrl-Z on things I just said.(Ctrl-z表示撤消,这句话意思是我收回我刚才说的话)
In life there is no undo.(生活中没有撤消)

2.从0开始计数

职业原因:大多数编程语言中的“数组”初始值都是从0开始而不是1。

日常行为:这种约定使得程序员经常在生活中数数都是从0开始,没有编程背景的人们很难理解这种计数方式,如果你的程序员朋友祝愿你在3千米长跑中获得第0名,你就偷着乐吧。

例子:

– How many beers are left?(啤酒还剩多少杯?)
– Zero, one, two, three… We have four left!(0,1,2,3,……我们还有4杯呢~)

3.生活方式不健康

职业原因:程序员写起程序来有时一坐就是大半天,眼镜不离电脑屏幕,甚至在灵感爆发时熬夜。
日常行为:作息无规律,锻炼不足,与外界接触过少。

例子:
Eating lunch at 3pm and going to bed at 3am.(下午3点吃饭,凌晨3点睡觉)
Lack of exercise -> Eating too much -> unhealthy life style.(缺乏锻炼->吃得过多->生活方式不健康)

4.试图优化任何事情

职业原因:软件开发者会不断地优化自己的代码,让它越来越快、越来越高效。常用的方法有多线程处理任务、代码复用等,并在任何有可能自动化执行的情况下使其自动化。

日常行为:会尝试优化真实生活中的事情,尽量省力、高效,往往会被认为太懒惰,比如脏衣服经常堆到一定规模,实在没有可穿的了才去清洗(往往一次全部清洗完)。

例子:
don’t solve a problem until you absolutely, positively have to.(不到万不得已,不解决问题)

5.过于强迫症、完美主义

职业原因:程序中一般不能使用模糊语义,因为计算机不理解“差不多”,“基本”。程序中即使有一点小错误,也会导致程序编译不过、运行不起来。

日常行为:程序员也经常是过于认真,不放过任何小细节,“打破沙锅问到底”,这有时会给周围的人造成压力。

例子:
Requesting clear spec for favors and errands. ‘Wait what do you mean by ‘some eggs’? What is the lower and upper bound?'”(老婆让去买些鸡蛋,会追问到底买几个啊?)

6.希望人们都和电脑一样循规蹈矩

职业原因:计算机会按照程序设定的方式运行,运行出错,那就是程序出Bug了。

日常行为:程序员有时会忽略人们是和电脑不一样的,人不可能完全按照逻辑和理性来做事,更多的是“跟着感觉走”。

例子:
Having to explain what a logical fallacy is, first, everytime someone says something completely wrong gets frustrating fast.(经常去解释逻辑上存在的错误,如果人们否定整个事情则很容易感到沮丧)

7.总是想到2的乘方

职业原因:计算机存储信息的基本单位是bit(比特)。二进制系统中,每个0或1就是一个bit。

日常行为:常常不以10进制而是以2进制进行计算。一些平常的日子在程序员眼里也变得很神奇,如程序员日就是每年的第256天(2^8),也有人推荐将每年的10月24日作为程序员日(2^10)。

例子:
Everything has to be in powers of 2.(一切皆为2的乘方)
Imagine you have 1,000 bucks; or better a round number—imagine you have 1,024 bucks.(假设你有1000块钱,最好这样说,假设你有1024块钱)

好啦,总结完毕了。

如果你有孩子,还会让他去当程序员么?

“我以后绝对不会让我的儿子也当程序员的。”三十二岁的程序猿老张心酸而又坚定的说。

“嗯,但是,”路人甲一针见血的指出了一个问题:“你有老婆吗?没有老婆怎么可能有儿子呢?”

老张:“……你大爷的!我的心好痛!”

注定孤独一生?

程序员A和程序员B的对话。

 

程序员A说:昨晚帮个美女装路由器,装到12点都没装好,美女对我说:“装不好就别装了,我们做点其他事情把!”我听了,顿时怒火就上来了,你他妈不是在考验我么?然后我快速的把路由器装好就回去睡觉了。

程序员B说:你做的对,昨晚我和一个女同事出差住旅馆,旅馆只有一张床了,我打算睡沙发,女同事对我说:“你跟我一起睡吧,不过不能做什么坏事情哦!”我听了,顿时怒火就上来了,你他妈这不是怀疑哥的人品么?然后我硬是在沙发睡了一晚。

简单说就是:“智商高 情商低?”

是呀,没事。就爱怼老板。

老板:汉字中,凡带三点水的,一定都有水,比如,江,河,湖,海……

程序猿:沙漠

老板:滚!

情商低的表现。

一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那儿过来, 有一个秀丽的姑娘骑着这个车过来, 并停在我跟前,把衣裳全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你必定做了一个正确的选择, 因为那姑娘的衣裳你并不一定穿得了”。

宅也是我们的属性表现啊。

“嘿,兄弟,犯什么事进来的?”

“入室偷窃。”

“咋啦,被人赃俱获?”

“屁!货还没到手呢,刚进屋就冲出两宅男,亏我还观察那屋三天!”

宅-没朋友-更宅-更没朋友的死循环。

 

【彩蛋】

小小编辑送给乱弹精英和程序员的礼物。

请戳(这里

 

【小树的世界之旅】

1、三天前,家住南京大厂某小区的盛先生带爱犬外出,结果爱犬被小轿车撞伤,车主驾车溜了。受伤的狗儿“盛怒之下”,将盛先生及妻子咬伤。夫妻被狗咬伤,又找不到肇事者,气愤的盛先生拨打12345政府热线求助。南京化工园公安分局扬子派出所民警接到工单后,通过监控找到了肇事车辆及车主,虽然车主否认,但车前的裂痕及粘着的狗毛“作证”,车主不得不承认这一事故。

南京真是个动物乐园。

2、10月12日,山东潍坊昌乐交警的一次查酒驾行动中,一名执勤交警被喝了酒的司机用车顶着狂奔了10分钟,最后从车前盖滚落下来,差点要了交警的命。司机行为令人发指,警方迅速展开抓捕。第二天早上7点45分,两名嫌疑人最终落网。经审讯,驾驶轿车的男子马某,和副驾驶位置男子徐某是朋友。为了庆祝自己入职,俩人中午就多喝了几杯。马某、徐某两人口口声声说着心里害怕,可是当天晚上两人醒酒后,并没有立即投案自首,而是一起再赴酒局。

刚入职就要去牢里上班了

3、10月17日晚,马先生朋友的父亲过生日,一家人前往位于宝塔区的延安中益嘉汇酒店吃饭。“由于桌上的女士较多,就说喝啤酒,刚好车上放有两箱啤酒,我就搬一箱。”马先生说,当时带啤酒进去时,服务员并没告知要收“开瓶费”,等吃完饭结账时发现,总共花了1330元,其中“服务费”就有100元。8日下午他已将此事反映给延安市宝塔区消费者协会,消协已经立案调查。

干脆,你用枪指着每一位进店的掏他钱包就是了。

 

【小树的角色Play剧场】

(本期剧本导演: @ 树和伊文 ,友情客串:@ 唐力个糖

看CCTV的普法栏目剧

一个貌似是坏女人对着男主角脱掉浴袍

镜头还马上切到坏女人的后背

没错露背了,虽然打了点朦胧的效果

然后男主角瞄了一眼,慢慢脱去西装并把身子靠过去

我勒个擦后面就是床啊心想央视这是要逆天了

男主角突然把脱去的外套披在坏女人身上

说:我警告你再有下次,滚

然后就走了,就走了

@ 唐力个糖 不禁叹息了一声,突然发现原来@ 唐力个糖 是和妈妈一起看啊

妈妈质问@ 唐力个糖 :“你唉什么?”

早已看惯云淡风轻的@ 唐力个糖 马上说道:

堂堂中央电视台居然要拍出这么俗的东西真是无话可说了

然后@ 唐力个糖 还不屑地摇摇头走开。

 

情绪不好?

关注同学们的生理心理健康

请进入大家喜闻乐见的【小树医生心理生理医务室】

“如何让‘二狗’这个外号有不一样的感觉?”

“犬次郎。 ”

“那‘狗蛋’呢?”

“犬丸。”

—- ———分割线————– ——

晚上稀里糊涂的做了个很奇怪的梦,

梦见自己有了个小女儿,

哄了大半夜,累得要死。

最冤的是,醒了之后,死活想不起来孩子她妈是谁。

—- ———分割线————– ——

小时候家里很穷,每当看见邻居家的狗吃的比我还好,

我就暗下决心,以后一定要好好学习、努力工作,

争取给自己找到一个有钱的主人。

—- ———分割线————– ——

无她,唯手熟尔。

 

【看片】

当你注视深渊的时候,深渊也在注视着你。

手机党少年们想看视频,请使劲儿戳(这里)。