Docker 容器创建命令

Docker 容器创建命令

安装docker

sudo apt-get install -y docker.io
systemctl start docker
systemctl enable docker

修改镜像源

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
}
systemctl restart docker

安装容器

  • Npc

    sudo docker run -d --name npc --net=host -v /mnt/c/config/npc:/conf ffdfgdfg/npc -config=/conf/npc.conf
  • HomeAssistant

    sudo docker run -d --name="home-assistant" --restart=unless-stopped --privileged=true -v /mnt/c/config/homeassistant:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant:latest
  • EMQX

    sudo docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 -v $PWD/etc:/opt/emqx/etc   emqx/emqx:latest
  • portainer

    sudo  docker run -d  -p 9900:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock  portainer/portainer-ce
  • ZigbeeToMqtt

    sudo docker run    -d    -v /mnt/c/config/zigbee2mqtt:/app/data     --net host  --name zigbee2mqtt   -v /run/udev:/run/udev:ro koenkk/zigbee2mqtt
  • ZigbeeGateway

    sudo docker run    -d    -v /mnt/c/config/zigbeeGateway:/app/data     -d -p 8580:8580  --name zigbeeGateway   -v /run/udev:/run/udev:ro koenkk/zigbee2mqtt
  • zigbee2mqttassistant

    sudo docker run  -d -p 6888:80 -e "Z2MA_SETTINGS__MQTTSERVER=192.168.8.120" -e "Z2MA_SETTINGS__MQTTUSERNAME=xhoobin" -e "Z2MA_SETTINGS__BASETOPIC=/gateway" -e  "Z2MA_SETTINGS__MQTTPASSWORD=2690hu??" --restart unless-stopped --name=zigbee2mqttAssistant carldebilly/zigbee2mqttassistant
  • transmission

    sudo docker run -d   --name=transmission   -e PUID=1000   -e PGID=1000   -e TZ=Asia/Shanghai   -e TRANSMISSION_WEB_HOME=/config/webui/    -e USER=xhoobin   -e PASS=2690hu??   -p 9091:9091   -p 51413:51413   -p 51413:51413/udp   -v /mnt/c/config/transmission:/config   -v /mnt:/downloads   -v /mnt/c/config/transmission/watch:/watch   --restart unless-stopped   linuxserver/transmission
  • rembg

    sudo docker run -d -v /mnt/c/data/rembg:/root/.u2net danielgatis/rembg:latest --name rembg
  • Ubuntu

    sudo docker run -itd -v /mnt/c/data/ubuntu:/data --name=ubuntu --network=macnet ubuntu
  • EspHome

    sudo docker run -d -p 6052:6052  --restart=always --name esphome -e ESPHOME_DASHBOARD_USE_PING=true -v /mnt/c/data/esphome:/config -it esphome/esphome
  • Mysql

    sudo docker run -d -p 3306:3306 --name mysql --restart=always \
    -v /mnt/c/data/mysql/conf:/etc/mysql \
    -v /mnt/c/data/mysql/logs:/var/log/mysql \
    -v /mnt/c/data/mysql/data:/var/lib/mysql \
    -v /mnt/c/data/mysql/mysql-files:/var/lib/mysql-files \
    -e MYSQL_ROOT_PASSWORD=2690hu?? mysql
    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    FLUSH PRIVILEGES; 
  • Mongod

    sudo docker run  -d  --name mongod -p 27017:27017  -v /mnt/c/data/mongodb:/etc/mongo -v /mnt/c/data/mongodb/data:/data/db   mongo --config /etc/mongo/mongod.conf
  • Node-RED

    sudo docker run -it -p 1880:1880 -v /mnt/c/data/nodered:/data --name "node-red" nodered/node-red
  • filebrowser

    sudo docker run \
      -d \
      -v /mnt/c:/srv \
      -v /mnt/c/data/filebrowser/filebrowser.db:/database.db \
      -v /mnt/c/data/filebrowser/.filebrowser.json:/.filebrowser.json \
      --user root:root \
      -p 9180:80 \
      --name "filebrowser" \
      filebrowser/filebrowser
  • kodexplorer

    sudo docker run -d -p 9280:80 --name kodexplorer -v /mnt/c/data/kodexplorer:/var/www/html -v /mnt:/data/ baiyuetribe/kodexplorer
  • VSCode

    sudo docker run -d -u root \
    -p 9380:8080 \
    --name vscode \
    -v /mnt/c/data/vscode/config.yaml:/root/.config/code-server/config.yaml \
    -v /mnt:/home/code \
    codercom/code-server
  • Emby

    sudo docker run -d \
      --name emby \
      --volume /mnt/c/data/emby:/config \
      --volume /mnt/f:/mnt/share1 \
      --volume /mnt/h:/mnt/share2 \
      --net=host \
      --publish 8096:8096 \
      emby/embyserver:latest
  • NginxWebUI

    sudo docker run -d -v /mnt/c/data/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --privileged=true -p 9080:8080  --name nginxWebUI  cym1102/nginxwebui:latest
  • Nginx

    sudo docker run -d --name nginx  --net=host -v /data/web:/web -v /data/nginx/conf:/etc/nginx/conf.d -v /data/nginx/logs:/var/log/nginx nginx
  • redis

    sudo docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
  • influxDB

导出配置文件

m

运行docker

 docker run -d \
    --name influxdb \                   
    -p 8086:8086 \
    -v $PWD/conf/config.yml:/etc/influxdb2/config.yml \
    --volume $PWD/data:/var/lib/influxdb2 \
    influxdb:2.2.0

然后进入终端配置

docker exec -it influxdb /bin/sh

配置命令

influx setup

iOS编译Libevent库及踩坑例程

参考脚本

https://github.com/OnionBrowser/OnionBrowser/blob/master/build-libevent.sh

生成的库在dependencies路径下。

问题1

COULD NOT VERIFY PACKAGE SIGNATURE…

解决方案:

修改脚本中的 VERIFYGPG=false

问题2

configure: error: cannot run C compiled programs.

If you meant to cross compile, use `–host’.

See `config.log’ for more details

解决方案:

去掉模拟器架构,修改ARCHS=”armv7 arm64″

问题3

configure: error: openssl is a must but can not be found. You should add the directory containing openssl.pc' to thePKG_CONFIG_PATH’ environment variable, or set CFLAGS' andLDFLAGS’ directly for openssl, or use `–disable-openssl’ to disable support for openssl encryption

解决方案:

脚本中加入–disable-openssl,即修改为

./configure –disable-shared –enable-static –disable-debug-mode –disable-openssl ${EXTRA_CONFIG} \

修改后的完整脚本参考如下

#!/bin/bash

# Builds libevent for all five current iPhone targets: iPhoneSimulator-i386,

# iPhoneSimulator-x86_64, iPhoneOS-armv7, iPhoneOS-armv7s, iPhoneOS-arm64.

#

# Copyright 2012-2016 Mike Tigas <mike AT tig DOT as>

#

# Based on "build-libssl.sh" in OpenSSL-for-iPhone by Felix Schulze,

# forked on 2012-02-24. Original license follows:

# Copyright 2010 Felix Schulze. All rights reserved.

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

#

###########################################################################

# Choose your libevent version and your currently-installed iOS SDK version:

#

VERSION="2.1.12-stable"

USERSDKVERSION="15.5"

MINIOSVERSION="10.0"

VERIFYGPG=false

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

###########################################################################

#

# Don't change anything under this line!

#

###########################################################################

# No need to change this since xcode build will only compile in the

# necessary bits from the libraries we create

#ARCHS="i386 x86_64 armv7 arm64"

ARCHS="armv7 arm64"

DEVELOPER=`xcode-select -print-path`

#DEVELOPER="/Applications/Xcode.app/Contents/Developer"

# for continuous integration

# https://travis-ci.org/mtigas/iOS-OnionBrowser

if [ "$1" == "--noverify" ]; then

VERIFYGPG=false

fi

if [ "$2" == "--travis" ]; then

ARCHS="i386 x86_64"

fi

if [[ ! -z "$TRAVIS" && $TRAVIS ]]; then

# Travis CI highest available version

echo "==================== TRAVIS CI ===================="

SDKVERSION="9.3"

else

SDKVERSION="$USERSDKVERSION"

fi

cd "`dirname \"$0\"`"

REPOROOT=$(pwd)

# Where we'll end up storing things in the end

OUTPUTDIR="${REPOROOT}/dependencies"

mkdir -p ${OUTPUTDIR}/include

mkdir -p ${OUTPUTDIR}/lib

BUILDDIR="${REPOROOT}/build"

# where we will keep our sources and build from.

SRCDIR="${BUILDDIR}/src"

mkdir -p $SRCDIR

# where we will store intermediary builds

INTERDIR="${BUILDDIR}/built"

mkdir -p $INTERDIR

########################################

cd $SRCDIR

# Exit the script if an error happens

set -e

if [ ! -e "${SRCDIR}/libevent-${VERSION}.tar.gz" ]; then

echo "Downloading libevent-${VERSION}.tar.gz"

curl -LO https://github.com/libevent/libevent/releases/download/release-${VERSION}/libevent-${VERSION}.tar.gz

fi

echo "Using libevent-${VERSION}.tar.gz"

# up to you to set up `gpg` and add keys to your keychain

# may have to import from link on http://www.wangafu.net/~nickm/ or http://www.citi.umich.edu/u/provos/

if $VERIFYGPG; then

if [ ! -e "${SRCDIR}/libevent-${VERSION}.tar.gz.asc" ]; then

curl -LO https://github.com/libevent/libevent/releases/download/release-${VERSION}/libevent-${VERSION}.tar.gz.asc

fi

echo "Using libevent-${VERSION}.tar.gz.asc"

if out=$(gpg --status-fd 1 --verify "libevent-${VERSION}.tar.gz.asc" "libevent-${VERSION}.tar.gz" 2>/dev/null) &&

echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG"; then

echo "$out" | egrep "GOODSIG|VALIDSIG"

echo "Verified GPG signature for source..."

else

echo "$out" >&2

echo "COULD NOT VERIFY PACKAGE SIGNATURE..."

exit 1

fi

fi

tar zxf libevent-${VERSION}.tar.gz -C $SRCDIR

cd "${SRCDIR}/libevent-${VERSION}"

set +e # don't bail out of bash script if ccache doesn't exist

CCACHE=`which ccache`

if [ $? == "0" ]; then

echo "Building with ccache: $CCACHE"

CCACHE="${CCACHE} "

else

echo "Building without ccache"

CCACHE=""

fi

set -e # back to regular "bail out on error" mode

export ORIGINALPATH=$PATH

for ARCH in ${ARCHS}

do

if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];

then

PLATFORM="iPhoneSimulator"

EXTRA_CONFIG=""

else

PLATFORM="iPhoneOS"

EXTRA_CONFIG="--host=arm-apple-darwin14"

fi

mkdir -p "${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"

export PATH="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/:${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin/:${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin:${DEVELOPER}/usr/bin:${ORIGINALPATH}"

export CC="${CCACHE}`which gcc` -arch ${ARCH} -miphoneos-version-min=${MINIOSVERSION}"

./configure --disable-shared --enable-static --disable-debug-mode --disable-openssl ${EXTRA_CONFIG} \

--prefix="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" \

LDFLAGS="$LDFLAGS -L${OUTPUTDIR}/lib" \

CFLAGS="$CFLAGS -Os -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \

CPPFLAGS="$CPPFLAGS -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"

# Build the application and install it to the fake SDK intermediary dir

# we have set up. Make sure to clean up afterward because we will re-use

# this source tree to cross-compile other targets.

make -j$(sysctl hw.ncpu | awk '{print $2}')

make install

make clean

done

########################################

echo "Build library..."

# These are the libs that comprise libevent. `libevent_openssl` and `libevent_pthreads`

# may not be compiled if those dependencies aren't available.

OUTPUT_LIBS="libevent.a libevent_core.a libevent_extra.a libevent_openssl.a libevent_pthreads.a"

for OUTPUT_LIB in ${OUTPUT_LIBS}; do

INPUT_LIBS=""

for ARCH in ${ARCHS}; do

if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];

then

PLATFORM="iPhoneSimulator"

else

PLATFORM="iPhoneOS"

fi

INPUT_ARCH_LIB="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/lib/${OUTPUT_LIB}"

if [ -e $INPUT_ARCH_LIB ]; then

INPUT_LIBS="${INPUT_LIBS} ${INPUT_ARCH_LIB}"

fi

done

# Combine the three architectures into a universal library.

if [ -n "$INPUT_LIBS"  ]; then

lipo -create $INPUT_LIBS \

-output "${OUTPUTDIR}/lib/${OUTPUT_LIB}"

else

echo "$OUTPUT_LIB does not exist, skipping (are the dependencies installed?)"

fi

done

for ARCH in ${ARCHS}; do

if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];

then

PLATFORM="iPhoneSimulator"

else

PLATFORM="iPhoneOS"

fi

cp -R ${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/include/* ${OUTPUTDIR}/include/

if [ $? == "0" ]; then

# We only need to copy the headers over once. (So break out of forloop

# once we get first success.)

break

fi

done

####################

echo "Building done."

echo "Cleaning up..."

rm -fr ${INTERDIR}

rm -fr "${SRCDIR}/libevent-${VERSION}"

echo "Done."

[转]移动开发必读书单

此文转自网络,并且加以整理,如有侵权可联系本人删除。

为什么要列这一个书单?我认为某一领域的技术人,在他的职业生涯中,一定有一些绕不过去的技术和非技术的知识。有的时候,靠自己摸索、到处偷师,倒也能掌握。但是,这些别人早就趟过去的坎,大多已经有了非常棒的书籍作为总结。看了这些书,脚下的路就要平一些。这个书单,就是为了找到移动领域的这些书。

这些书籍都是移动前线群里推荐的,都是他们自己读过,甚至是反复读的书。如果你对这些书有什么看法,欢迎发表意见,或者添上你觉得认为必须的书。

计算机基础

《程序是怎样跑起来的》

推荐理由:类似深入理解计算机的图解版本,如果第一次看深入理解计算机看不进去,可以先看看,了解个大概,再看深入理解计算机这本就容易很多。

《深入理解计算机系统》

推荐理由:了解一个程序的编译、链接、执行过程,以及虚拟内存是如何分配等。

通用编程

《算法(第四版)》

推荐理由:难度不及算法导论,但是更适合工程领域,导论恐高症患者的福音。

《编程珠玑》

推荐理由:编程珠玑这本书推荐给有代码基础的小伙伴,推荐理由是书里会有一些优化和算法基础的思想,适合入门之后的进阶,对优化和算法能够有一些基础的认识。对程序员写出优质而高效的代码比较有帮助,至少我个人阅后感受如此。

《设计模式之禅》

推荐理由:读完,通俗易懂,更深刻理解面向对象和面向接口。
注:设计模式这几本书难以取舍,选一本读即可。

《大话设计模式》,《大话数据结构》

推荐理由:都是菜鸟和大牛的对话模式,看着不枯燥,内容也很全。
推荐理由2:推荐初级程序员看<大话设计模式>,这本书有个好处是他是演进式的,虽然内容很简单,看完也没办法直接指导到开发上。但是会有一种恍然大悟的感觉,原来这就是设计模式。比起四人组的设计模式,太过于专业的说明和定义,对于初级开发人员来说,往往无法消化甚至抵触。回到大话设计模式,将实践和故事相结合,即让设计模式接了地气,又引发自己的思考,我怎么可以改造既有的项目。同时作为入门书籍,看完后你会更渴望更专业的设计模式的内容也算是这本书的一个意义。总结就是,一本非常入门接地气的设计模式书籍。

《Head first 设计模式》

推荐理由:漫画形式的以对话为主,都是从生活中的小例子入手,更理解一句话了:万物皆对象。

《构建之法》

推荐理由:一本有趣的软件工程书,新手哪知道什么是软件工程。书里描述了作者在的团队遇到了哪些问题,如何正视,怎样改善,不断改进。理论和实践相结合。面向实战。讲述软件工程中不同角色的作用。看完后可以帮助新手更好地理解软件开发是怎么个回事,更快地走向成熟。

《代码大全》

推荐理由:代码大全全面讲述了工程实践的要点,深入每个细节。可以帮助新手拓展视野,熟悉规范,也可以在学习一些概念或技术时当做字典查。总之代码大全的英文名code complete很能说明问题:帮助你完成整个编码活动的全过程。

《代码整洁之道》

推荐理由:这几天在看,讲解详细,有提供示例,可以提高自己编码素质。

《图解http》

推荐理由:做网络编程必须要懂的基础书,看这本书对做网络缓存和网络性能优化都有不小的帮助,最主要是书内容深入浅出 图文并茂,通俗易懂。

《单元测试的艺术》

推荐理由:由浅入深地介绍了单元测试的各方面知识,告诉我们如何写好单元测试,如何写易于测试的代码,如何处理遗留代码等问题,有理论有案例。

《修改代码的艺术》

推荐理由:详细讲解重构技巧的书,教你怎么处理各种遗留的烂代码,非常详实的重构操作手册。

iOS开发

《Effective Objective-C 2.0》

推荐理由:这本书很适合初学者,能帮助初学者一开始就打下比较规范的基础,里面讲了很多规范。读了这本书能让初学者少走很多弯路。
推荐理由2:精炼,针对性强,对一些生僻容易懵圈的知识点讲得比较细。

《iOS编程实战》

推荐理由:尤其推荐小公司的没有系统学习过iOS的同学看,实战和自己闭门造车完全两码事,这书不是教人这个api怎么用,而是应该这样用。

《Objective-C高级编程 iOS与OS X多线程和内存管理》

推荐理由:这本书给我带来的最大价值是:要让自己对一项技术有全面的认识,光从官方文档、开源代码中寻找答案并不够,还要会用各种工具来验证自己的想法。可以看出作者对技术非常严谨的态度,虽然偶尔有些翻译并不容易让人理解,但真的是一本进阶型的书。

《iOS编程(第4版)》

推荐理由:作者之一Aaron Hillegass曾就职于NeXT公司和Apple公司。 书涵盖了初级到中级的,书中在讲到第一次出现的知识点的时候,通常会简要的解释一下,所以初学者很容易上手。缺点是这书有点老,但OC的基础知识讲解的很扎实。

《Swift Apprentice》

推荐理由:这本书的优势就是从浅入深,抽死剥茧,从最基础的知识带领你到函数编程奥义的天堂,充分的实例,全英文,免去你被中文版带沟里的风险,相信这本书能告诉初学者swift2为什是大势所趋,为什么swift2即是面向对象编程语言又是函数编程语言。

《Swifter – 100 个 Swift 必备 tips》

推荐理由:比较偏帮助手册类的tips,虽然没有讲Swift比较深入的,但对前期学习Swift梳理与Objective-C及混编有很大帮助。

《iOS应用逆向工程 第2版》

推荐理由:iOS应用逆向最有价值参考书籍,内容涵盖多个实例,阐述class-dump、Theos、Cycript、Reveal、IDA、LLDB等常用工具的使用,通俗易懂;总结提炼出一套从UI观察切入代码分析的iOS应用逆向工程方法论,激发iOS开发人员对应用安全的思考,把主动防御的思想渗透到项目开发中。

Android开发

《第一行代码》

推荐理由:我刚刚大体看了一遍 ,这本书学完之后完全足够入门,而且不会令初学者感到枯燥。在入门阶段还可以作为工具书不断去翻阅,不同时期会有不同的感受。 里面打小怪兽升级的旁白,现在回过头看还确实挺有趣的。

《App研发录》

推荐理由:研发辅助类,包含了异常的分析,竞品分析和项目管理,书不厚,但是有些能增加知识的广度。

《Embedded Android》

推荐理由:从底层讲解android系统的机制与设计,比较适合具有一定经验的开发者,属于进阶书籍。

《Java并发编程实战》

推荐理由:通过java现成的并发工具类介绍和实例,深入浅出的说明如何安全地进行多线程操作和优化。

《Android.C++.with.the.NDK》

推荐理由:android jni入门与提高,系统讲解android jni的编译、提供的接口、java jni的通讯方式等,对于需要学习jni开发的同学是必读,毕竟jni文档缺乏。

《Android开发艺术与探索》

推荐理由:主要讲一些原理,主要学习为什么这么用,以及源码解析说明。

《深入了解JVM虚拟机》

推荐理由:这本书对了解底层机制很有帮助,是进阶必选。

《Java编程思想》

推荐理由:Java编程思想是Java圣经,要有一定经验去看效率才不错。

人文类

《程序员的职业素养》

推荐理由:从企业,团队,技术,自身等各个角度阐述了作为一个专业的程序员应该如何去做到更好,不卑不亢,不投机取巧,树立非常正能量的价值观,举了很多工作学习中经常碰到的案例,读完相见恨晚。书不是太厚,个人净阅读时间在10小时左右。

《在人生拐角处》

推荐理由:很多程序员对于自身的职业规划并没有,所以这本书就是帮助你化解你的迷茫,做好职业规划,里面是生涯规划师写的案例,都很贴近生活,适合不知道自己该怎么走下去的人看。

《程序员健康指南》

推荐理由:本书是为了程序员量身订造的健康指南,针对头痛,眼部疲劳,背部疼痛和手腕疼痛等常见问题,简要介绍了其成因,测试方法,并列出了每天的行动计划,从运动,饮食等方面给出详细指导,帮助程序员在不改变工作方式的情况下轻松拥有健康。

《重新定义公司 How Google Works》

推荐理由:一分理论三分实践相结合,告诉你互联网公司运作的合理方式。亮点是针对理论有 Google 实际的实行方式,也有多个 Google 内部项目成长的曲折过程,还有谷歌退出中国的内部爆料。

《黑客与画家》

推荐理由:非常有深度的一本书,作者在经济,社科,历史,等很多方面都很有自己的见解,更不用说技术和创业了。书中很多观点有准确的例证引用,让人信服。

《Rework》

推荐理由:一句话:太赞的一本书了!!!创业者必读!当然,不创业的人也能从中得到非常多的insight。作者是37signals.com的两个创始人,其中之一还是Ruby on Rails的creator。讲的是创业中需要注意的一些事情,但这些事情不仅仅是创业中才需要注意的。另外,英文原版的写的也很通俗易懂,推荐看原版的。
推荐理由: 这本书本身就是小而美的37Singal自身成长的总结,特别适合小团队初创团队,很好的诠释了“好铁用在刀刃上”。

《Getting Real》

推荐理由:37Signals的又一本书,也是第一本,强调用一种务实的方式做一个Web app,从产品组队实现上线推广各方面的点点滴滴。内容依然很棒,但是跟《Rework》有大量重复的地方,看过那本以后已经没有那种惊艳的感觉了。也算是知道了为这么这本书豆瓣评分达9.1, 而那本“只有”8.7了。

《代码的未来》

推荐理由:Ruby发明人Matz的大作,这是一本技术性随笔,介绍了现代编程的方方面面,从lisp宏到gc技术,再到元编程,IPC,多 核及云计算,NoSQL。。。虽说是随笔,还是具备一定的技术性的,很多地方要认真的看才看得懂。作者的语气很谦虚亲切,很多地方甚至有卖萌的嫌疑,哈!总之,是一本广大程序猿增长见识,拓宽视野的极佳之作!

《GEB》

推荐理由:通过对哥德尔的数理逻辑,艾舍尔的版画和巴赫的音乐三者的综合阐述,引人入胜地介绍了数理逻辑学、可计算理论、人工智能学、语言学、遗传学、音乐、绘画的理论等方面。抽象级别比设计模式高上几个数量级,看懂这本书,不仅是抽象思维上质的提升,对个人也将产生深远的影响。

效率类

《暗时间》

推荐理由:讲的是关于时间管理,告诉我们怎么学习专业领域技能和非专业领域技能以及我们应该怎么自我管理性格。

《把时间当做朋友》

推荐理由:它的理念就是,时间是不可以管理的,最主要改变的是自己的心智!

技术管理

《门后的秘密》

推荐理由:以场景、对话的方式讲解日常基础技术管理,适合技术人员转管理的细细阅读,入门管理实用。

《人月神话》

推荐理由:管理复杂项目的见解深刻,并有大量软件工程的实践。

《人件》

推荐理由:给技术管理者或者希望走向管理方向的人参考。最近在看第二遍,收获很大。软件即人件,软件开发不光要解决技术问题,更重要是人的问题。为何很多工作加班才能解决?公司为何无法留住员工?读完这本书可以找到一些答案。

新增

Objective-C高级编程:iOS与OS X多线程和内存管理
HeadFirst设计模式
Effective Objective-C 2.0
TCP/IP详解
深入解析 MAC OS X & IOS 操作系统
程序员的自我修养
深入理解操作系统