Apple Watch 开箱

Apple Watch如今也不再是Hot Toy,价格也逐渐亲民。感恩节期间终于入手Apple Watch Sport版,349刀+tax对于我来说虽然还是有点贵,但还是没忍住出手了。我选择的是金色Sport配海军蓝表带。选Sport是因为我觉得Apple Watch毕竟还是消费数码,以后升级换代还是避免不了的,既然硬件参数一样,没必要为了一块不锈钢和蓝宝石花冤枉钱。至于表带,第三方表带,各种材质Amazon上都有30以下的……至于颜色,本来我是想选深空灰,但是去店里试戴了一下,发现深空灰换除深空灰以外的颜色的表带都很雷,而且很难搭配衣服。银色感觉有点跳脱,不太符合我的气质。就金色显得庄重一点,而且配衬衣和便装都还可以,于是就选了这个颜色。

买到之后第一时间开箱,虽然已经在网上看过很多开箱,还是忍不住有点小激动,不停拍照留念……

首先是包装盒正面……2015-11-16 13.20.49

然后是侧面……2015-11-16 13.20.58

开箱啦~~传说中的铅笔盒……2015-11-16 13.22.09

拿出铅笔盒……2015-11-16 13.22.22

充电头和充电线,线特别长……2015-11-16 13.22.34

附赠了一根短表带……2015-11-16 13.23.02

铅笔盒特写……2015-11-16 13.24.05

庐山真面目~~2015-11-16 13.24.16

要撕膜啦~2015-11-16 13.24.35

背面的膜……2015-11-16 13.24.39

撕下膜之后,一尘不染的表身……2015-11-16 13.25.04

表的背面……2015-11-16 13.25.11

背面特写2015-11-16 13.25.27

正面特写2015-11-16 13.25.32

开机,与920tx比显得很收敛……2015-11-16 13.27.49

毕竟920是铁人表,Apple Watch看上去正常多了2015-11-16 13.27.55

小小谈一下感受,Apple Watch从外观上说,能胜任更多的场景(穿西装的时候带920真的是很奇怪的画风)。虽然还是很厚、佩戴不算特别舒服,却基本能做到不突兀。从功能上说,Apple Watch上的Apps虽然还是很鸡肋,但是比920还是好了不少。至少在通知这一块能显示中文,能进行一些简单的回复。而且因为可以直接检测心率,比920的心率带还是要方便不少。不过,说起运动方面,Apple Watch还是差得很远,自己的运动App可设置项、可检测项太少,缺乏有针对性的指导,用起来还是很没劲。希望Apple能尽快升级WatchOS把这块做起来吧。

Giro Synthe Helmet开箱

作为一个菜鸟,虽然我骑车水平还没有达到拼装备的地步,但是装备这种东西,是可以稍微进化快一些,然后等我慢慢进步……不过,其实,我之前也就仅仅花了几十块钱买了踏频计和速度计而已。

我原先的头盔有点偏大,戴着不太舒服,而且容易往前掉,遮住视线。

于是,老婆大人送我了这个拉轰的头盔。以下是开箱。

SONY DSC

SONY DSC

SONY DSC

SONY DSC

SONY DSC

SONY DSC

SONY DSC

SONY DSC

SONY DSC

用OpenMediaVault来搭建家庭NAS(一)

转眼2014年,手里的笔记本电脑也有好几台了,还有iPhone,iPad,Nexus 7……共享/同步数据对于我来说越来越不方便了。幸好有Dropbox,可以帮我稍解此愁。可是Dropbox的一大弊病就是同一个文件,它需要在每个设备上都有一个拷贝,非常占空间。而且Dropbox本身还有容量的限制,上传下载速度,以及安全性方便的问题。所以,我把目光投向NAS。NAS系统不光可以在局域网内共享文件,而且还可以有其他玩法,比如下载,比如DLNA等等。不过现在市面上的NAS都很贵……好在家有闲置上网本一台,若干外置硬盘,可以DIY一个。

之前试过FreeNAS系统,不过Jail配置有点复杂,捣鼓好几天都没能弄好,最终放弃。前几天上网偶然发现OpenMediaVault这个东西,配置容易(关键是基于Debian),使用简单,而且可以通过插件支持各种各样的服务(比如BT下载)。在虚拟机里面装了一个,觉得相当不错。所以分享一下,并且把安装使用心得记录一下,供日后参考。 Continue reading 用OpenMediaVault来搭建家庭NAS(一)

Java: 快速从一堆数据中找出第n大值的id

今天在写程序的时候遇到这样一个问题:要从一堆double型的数据中找出第n大的那个。以前也遇到过,图省事直接sort一下再直接拿第n个数据。Java里面的Collections.sort()方法其实已经很快了。不过,找一个值就去把整个List都sort了,我还是觉得有点太弱智了。

还是自己写一个吧。程序相当简单,也没啥好说明的,有问题参考下Quicksort。

Continue reading Java: 快速从一堆数据中找出第n大值的id

在HP Pavilion dv6上安装Ubuntu遇到的问题与解决办法

我的小黑基本已经到退役的边缘,于是我开始正式启用我这台新的HP本作为我日常工作机器。直接把Win 7干掉,换上Ubuntu。装好之后感觉一切都不错,不过有两个小问题一直困扰着我。昨天小小的研究了一下,找到了相应的解决办法,记录一下,以备下次在装Ubuntu的时候可以快速搞定。 Continue reading 在HP Pavilion dv6上安装Ubuntu遇到的问题与解决办法

一个简单的利用boost实现多线程调用类对象函数的例子

今天写了一个用Boost实现多线程调用类成员函数的简单例子,放在这里以供参考。

这个例子中并不需要对类做任何修改,只是调用boost::bind把要执行的函数,对象以及参数绑定在一起。我用了三个例子由简单到复杂展示了如何绑定,应该很容易理解。

本程序经测试在Ubuntu 12.10 (g++ 4.7.2) 下编译通过。

boost库请自行安装。

// g++ thread.cpp -lboost_system -lboost_thread
#include <iostream>
#include <string>
#include <boost/thread.hpp>
#include <boost/bind.hpp>

using namespace std;

class myclass {
  public:
    string str_;
    int num_;

    myclass(string s, int n) {str_ = s; num_ = n;};

    void run1() {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<str_<<" print : "<<i<<endl;
      }
    };

    void run2() {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<toString()<<" print : "<<i<<endl;
      }
    };

    void run3(string str) {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<toString()<<" print : "<<i<<" "<<str<<endl;
      }
    };

    string toString() {
      string str = "["+str_;
      str += "]";
      return str;
    };
};

int main (int argc, char ** argv) {
  myclass c1("A", 5);
  myclass c2("B", 5);
  myclass c3("C", 5);

  boost::thread t1(boost::bind(
        &myclass::run1,                // pointer to member function to execute in thread
        &c1 ));                        // pointer to instance of class

  boost::thread t2 (boost::bind(
        &myclass::run2,                // pointer to member function to execute in thread
        &c2 ));                        // pointer to instance of class

  boost::thread t3 (boost::bind(
        &myclass::run3,                // pointer to member function to execute in thread
        &c3,                           // pointer to instance of class
        "Hey!" ));                     // parameter to run3(string str)

  cout<<"In the middle of main()"<<endl;

  t1.join();
  t2.join();
  t3.join();

  cout<<"In the end of main()"<<endl;
  return 0;
}

Start a new blog with Octopress on Github

一开始是从笑来老师的博客知道了Octopress这个东东。它号称“黑客用的博客程序(A blogging framework for hackers)”,有很多优点:

  1. 纯静态页面,不使用数据库
  2. 使用markdown标记语言编写文章(当然也支持HTML)
  3. 原生代码高亮支持
  4. 支持插件(比如评论插件)
  5. 使用git进行版本管理
  6. 可以直接发布到Github Pages/Heroku等,感觉上要在Amazon EC2上搞一个也应该很容易

断断续续的看了一些相关的文章,跃跃欲试了很久,但因为忙一直没有尝试一下。上周总算忙完了,有时间折腾折腾了。于是,第一个要尝试的就是这个Octopress。

Continue reading Start a new blog with Octopress on Github

关于在C++头文件中定义全局变量的问题

最近写一个程序,因为比较复杂,一共有十几个.cpp和.h文件。因为多数函数都要操作一个vector,用call-by-reference当然没有问题,但每个函数都这么写就觉得没必要了。于是我打算定义全局变量。开始我打算像定义常量一样写到头文件里面,可是每次编译的时候都会报重复定义的错。在网上搜了半天,找到了一个理想的解决办法。 Continue reading 关于在C++头文件中定义全局变量的问题