《DSLR数码单反摄影圣经》读书笔记

自从进入21世纪以后,数码相机的迅速普及,摄影的许多传统观念由此发生了彻底的变革。但是,随手按快门和把相片拍好的确不是一回事。想把照片拍好,熟悉您的相机,掌握摄影的基本功,这些都是必备条件。

何谓一张好照片?我认为:在调焦、曝光正确的基础上,构图、用光和色彩等方面没有大的问题,就可以称之为好照片。

雷依里先生所著的这本书内容详尽,从数码单反相机的结构原理到实用的拍摄技法;从认识光圈、快门,到如何正确操作相机;从对构图、用光和色彩等基本功的诠释,到各种题材的实拍技巧;从数码单反相机的系统配置,到各种附件实用;应该是应有尽有了。如果您能坐下来认真地读完这本书,更多地了解数码单反相机的相关知识和摄影的基本功,在此基础上再拿起您的相机继续实践,感觉肯定大不相同。理论和实践的结合,就是拍出好照片的开始! ——黄其昆

本文是Aaron阅读《DSLR数码单反摄影圣经》过程中的随记。

阅读更多>>

《中国建筑史》读书笔记

梁思成先生是我国著名的建筑学家与建筑教育家,他以毕生精力投入到古代建筑的研究工作之中,取得了世人瞩目的成就,他是中国建筑历史与理论学科的奠基人之一。

梁思成应用世界各国调查研究古代建筑先进之方法,自上个世纪三十年代开始对中国古代建筑进行了长时间的、科学的调查,他和他的同事们在不到十年的时间里对全国近200个县城的两千余个古建筑项目进行了考察,写出了一篇又一篇详尽的研究报告,积累了大量翔实的文字与图片资料。梁思成正是在这样的基础上,在抗日战争及其艰苦的条件下完成了《中国建筑史》的写作。这是中国第一部较为系统的论述我国古代建筑发展历史的专著。 ——楼庆西

本文是Aaron阅读《中国建筑史》过程中的随记。

阅读更多>>

在Ubuntu12.04上源码编译安装Boost

Boost库是一个可移植、提供源代码的C++库,由Boost社区组织开发维护,其目的是为C++程序员提供免费、同行审查的、可移植的程序库。

Aaron在Ubuntu12.04上编译某工具时,遇到了Boost版本过低的问题。

CMake Error at /usr/share/cmake-2.8/Modules/FindBoost.cmake:1202 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.46.1

  Boost include path: /usr/include

  Detected version of Boost is too old.  Requested version was 1.55 (or
  newer).

最终从一篇博文找到了从源码编译Boost的方法,解决了问题。从这篇博文中除了学习到了如何源码编译安装Boost外,还学习了查看机器内核数目的方法。

我将这篇博文进行翻译,记在这里,以备后用。

阅读更多>>

《Scala程序设计》笔记 - 更简洁,更强大

本章将继续探究Scala的特性,重点关注它如何为我们提供简洁且灵活的语法代码。我们将探讨如何组织文件和包,如何导入其他类型、变量、方法声明,以及一些非常有用的数据类型和和各种约定俗成的语法习惯。

阅读更多>>

Vim笔记 - NERDTree

Aaron最近在尝试Atom编辑器。Atom编辑器中的Tree View可以一目了然地看到目录结构,查找目录下的文件,十分方便。Vim下和Tree View类似的目录管理插件就是NERDTree了。

如下图,NERDTree帮助文档说NERDTree是一款Vim的目录浏览插件。(不过owns your momma是什么意思?那NERDTree不就成了你爸了……)使用NERDTree可以方便地通过键盘(以及鼠标)来浏览文件系统中的目录和文件。使用NERDTree也可以进行一些简单的文件操作。

*NERD_tree.txt*   A tree explorer plugin that owns your momma!



    omg its ... ~

    ________  ________   _   ____________  ____     __________  ____________~
   /_  __/ / / / ____/  / | / / ____/ __ \/ __ \   /_  __/ __ \/ ____/ ____/~
    / / / /_/ / __/    /  |/ / __/ / /_/ / / / /    / / / /_/ / __/ / __/   ~
   / / / __  / /___   / /|  / /___/ _, _/ /_/ /    / / / _, _/ /___/ /___   ~
  /_/ /_/ /_/_____/  /_/ |_/_____/_/ |_/_____/    /_/ /_/ |_/_____/_____/   ~


==============================================================================

从Aaron三年前开始使用Vim起,NERDTree就一直作为必备插件在我的vimrc中,但是鲜有使用。故而Aaron决定花些时间来学习一下这款优秀的目录浏览插件,本文记录了NERDTree常用的命令,以及Aaron针对这款的个性化设置。

阅读更多>>

《Scala程序设计》笔记 - 零到六十:Scala简介

Scala是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在JVM之上的语言,语法简洁、优雅、灵活。Scala拥有一套复杂的类型系统,Scala方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。这些这是它的一部分特性。

阅读更多>>

使用NetCat实现宿主机和虚拟机间通信

QEMU模式的网络通信协议是NAT协议。为了实现宿主机和虚拟机间的通信,需要知道宿主机相对于虚拟机的IP地址,更准确地说,应该是内部虚拟网络的网关地址。

Netcat是Linux下的一个用于调试和检查网络工具包。可用于创建TCP/IP连接,处理TCP套接字。

本文首先介绍了NAT网络的基本概念,然后介绍了通过NetCat实现宿主机和虚拟机间通信的方法。

阅读更多>>

使用QEMU创建Ubuntu12.04虚拟机镜像

QEMU是一套以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

qcow2是QEMU虚拟机使用的一种磁盘镜像文件格式,具有可以创建快照、支持写时拷贝等诸多优点。

本文介绍了使用QEMU创建光盘镜像的方法。

阅读更多>>

Ubuntu16.04安装gcc4.8

32位的Ubuntu16.04默认的gcc版本是gcc 5.4。由于某工具要求的gcc版本是gcc 4.x,因此Aaron需要安装gcc 4.x。

本文总结了在Ubuntu16.04安装低版本的gcc的方法。

$ LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
$ export LD_LIBRARY_PATH
$ sudo apt-add-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install gcc-4.8 g++-4.8

One more thing, I HATE GCC!

参考资料

  1. How to fix Genymotion in linux with error `CXXABI_1.3.8′ not found
阅读更多>>

Ubuntu server 12.04通过Ambari搭建hadoop集群

Ambari是Apache Software Foundation 中的一个项目,方便用户创建、监控、管理Hadoop集群。

以往很多对集群的人工修改的集群配置,通过Ambari可以集中式修改。因此,Ambari号称大数据平台的利器确实当之无愧。

本文总结了Ambari的安装使用方法。

阅读更多>>

Virtualbox虚拟硬盘根分区大小调整

参考链接:http://www.cnblogs.com/anjingshen/p/4887426.html

第一步:扩容虚拟硬盘容量

通过VBoxManage list hdds找到所需扩容的虚拟硬盘的UUID

$ VBoxManage list hdds
UUID:           5562465c-357e-4cb8-84c4-1e6e25d6943e
Parent UUID:    base
State:          locked write
Type:           normal (base)
Location:       /home/hadoop/VirtualBox VMs/slave1/slave1.vdi
Storage format: VDI
Capacity:       30000 MBytes
Encryption:     disabled

UUID:           8a198e2d-6db7-4a12-93f9-c57286d70cca
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/hadoop/VirtualBox VMs/slave1/NewVirtualDisk1.vdi
Storage format: VDI
Capacity:       23142 MBytes
Encryption:     disabled

UUID:           0d94b868-0b95-405b-9015-eac85ac65c63
Parent UUID:    base
State:          locked write
Type:           normal (base)
Location:       /home/hadoop/VirtualBox VMs/slave2/slave2.vdi
Storage format: VDI
Capacity:       30000 MBytes
Encryption:     disabled
阅读更多>>

FlowDroid工具的构建与运行

今天早上Aaron收到一封邮件,从我的博客联系到我,问我如何运行flowdroid,着实感到开心。这是我博客搭建起来之后第一次有人联系到我,感觉自己可以做一点事情很开心。本文是以我对该邮件的回复为基础加以整理,总结了FlowDroid工具的构建和运行的方法。

阅读更多>>

vim随记

Aaron是一个Vim忠实爱好者。无论是写文档还是一些简单的程序,Aaron都倾向于使用Vim来完成。

本文用以记录Aaron在日常使用Vim的过程中遇到的问题和解决方法。

分屏调整命令

  • Ctrl + w + =: 使分屏拥有相同尺寸。
  • Ctrl + w + +: 增大分屏尺寸。
  • Ctrl + w + -: 减小分屏尺寸。

使用场景:将vim全屏后,分屏线不在屏幕中部。可用上述第一个命令加以调整。

阅读更多>>

FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Tainted Analysis for Android Apps

摘要

这篇论文介绍FLOWDROID——一种新型的高精度的用于安卓程序污点分析的静态分析工具。该工具对安卓生命周期进行了精确的建模,由此可以正确地处理了回调函数。

该工具具有以下特点:

  • context sensitive
  • flow sensitive
  • field sensitive
  • object sensitive

除了FlowDroid分析工具外,论文作者还提出了droidBench,一个用来检测针对安卓程序的污点分析工具的效率和精度。

实验结果表明,他们的方法在droidBench上的准确率达到了86%,回召率达到了93%,远胜于商业软件AppScan和Fortify SCA。

阅读更多>>

Android基础知识总结

安卓组件

安卓组件是安卓应用程序最基本的组成单元。每种组件都可以作为系统进入安卓程序的入口。

安卓组件共有四种,四种安卓组件特点迥异,并具有不同的生命周期特点。

这四种安卓组件是:

活动(Activities)

一个activity表示了一个和用户交互的界面。例如,某个email应用程序可能存在如下几种不同的活动:

  • 显示未读邮件列表
  • 编辑邮件
  • 读取某封邮件

这些不同的activity组合起来形成了一个统一的整体,但实际上它们是相互独立而存在的。因此,其他的应用程序可以独立调用其中的某一种activity。例如,一个主要功能是拍照的应用程序可以通过调用“编辑邮件”的活动来让用户分享拍摄的照片。

阅读更多>>

maven打jar包指定依赖包的相对路径

问题描述

用maven package对项目打jar包,默认会在项目根目录/target下面生成jar包,然后目标jar所依赖的其他jar会放在target/lib下面。直接执行java -jar 目标.jar,会抛出ClassNotFoundException异常。

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext
    at cn.net.xxxx.xxxx.main(xxxx.java:39)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.support.ClassPathXmlApplicationContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more
阅读更多>>

github中使用ssh进行身份认证

这两天在实验室的台式机上写博客的时候,每次push时github都要求我输入密码,简直是烦透了。今天终于抽出一点时间来解决一下这个问题。

首先,我想弄清楚为什么github总是跟我要密码呢?就不能长点脑子记下来吗?所以我去读了下面这篇文章:Why is Git always asking for my password?。所以原因在于是我采用的是HTTPS方式来克隆仓库。如该文章中所提到的,这种方式的好处在于不需要任何繁琐的设置,开箱即用。同样导致了每次push远程仓库都要输入用户名密码的问题。该文章的最后提出了采用缓存机制使用户在一定时间内免于输入密码的方案。

然而,这对于我仍然是不能忍的。

最终我找到的解决方案是通过SSH方式来与远程仓库交互。

阅读更多>>

You're up and running!

Next you can update your site name, avatar and other options using the _config.yml file in the root of your repository (shown below).

_config.yml

The easiest way to make your first post is to edit this one. Go into /_posts/ and update the Hello World markdown file. For more instructions head over to the Jekyll Now repository on GitHub.

阅读更多>>