Tec

总览

All problems in computer science can be solved by another level of indirection

觉得这句话对TCP的分层也很适用。

对TCP/IP协议来说,大体分为五层,

  1. 应用层
  2. 传输层
  3. 网络层
  4. 链路层
  5. 物理层

应用层我们接触的比较多,流行的如HTTP,FTP之类都算,像我在大学里做的PHP开发时基本对HTTP发包没有任何概念,照着教程开eclipse,apache,在浏览器里敲个locahost:8080出来个猫的图案就很开心了。再建个index,上面写句“未满18周岁禁止进入”,就有种天下在手的感觉。

Read on →
Tec

一.关于Socket

如我,刚见这个名词的时候不知所云,因为起点就没找对,首先要在基于对UNIX有所了解的情况下才利于开展工作,便是“一切皆文件”。

在UNIX下,一般的文件可以通过open打开,并返回一个小整数作为标记,后续的操作便是针对这个小整数进行读写。这个小整数被称作描述符,描述符只是引用file的proc结构中一个数组的某个元素的下标而已,它可以代表该文件,但并不是文件本身,我们通过它来与文件建立联系,方便操作。

以此为前提,Socket便是一种特殊的文件,通过socket函数可以创建一个套接字(特殊的文件),它也返回给我们一个小整数,以后所有的函数调用就用该描述符来标示这个套接字。

在UNIX下文件的种类有很多,打开与使用的方式虽然遵循着一定的模式,但也不尽相同。比如想打开一个文本文件需要借助open函数,而且在打开的时候需要告诉open函数该文本的路径位置,以明确打开的目标。

Read on →
Tec

缘起

最近做的一个项目是使用C写的,随着项目的深入发现需要通过不同的数据结构来完成需求,自己简单地去编写已经不能满足要求且在健壮性方面也存在着隐患,于是就琢磨着在网上找找看看有没有什么现成的C工具包来用,就这样,发现了GLib。

先来看下维基上的介绍:

GLib是一个跨平台的、用C语言编写的库,起初是GTK+的一部分,但到了GTK+第二版,开发者决定把跟图形界面无关的代码分开,这些代码于是就组装成了GLib。GLib提供了多种高级的数据结构,如内存块、双向和单向链表、哈希表、动态字符串等。

感觉功能刚好满足需要,类似于C++中的STL,果断搞起。

Read on →
Tec

1.README很重要,基本上跟着README走一遍就妥了,报错的话一定要仔细得去读错误信息,可以对错误的解决提供很大的帮助。我遇到的错误比较简单,是电脑里没有ar的打包指令,因为刚开始接触makefile,所以在这个不大的坑上也花了点时间才发现,还是在别人的机子上编译成功的,一对比才发现自己电脑上没有装…一定不要太自信,当时压根就没往这个方向想。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Execute the following from the src/ directory:
&
./configure    # try to figure out all implementation differences
cd lib         # build the basic library that all programs need
make           # use "gmake" everywhere on BSD/OS systems
&
cd ../libfree  # continue building the basic library
make
&
cd ../libroute # only if your system supports 4.4BSD style routing sockets
make           # only if your system supports 4.4BSD style routing sockets
&
cd ../libxti   # only if your system supports XTI
    make           # only if your system supports XTI
cd ../intro    # build and test a basic client program
make daytimetcpcli
&
./daytimetcpcli 127.0.0.1
&
If all that works, you're all set to start compiling individual programs.
Notice that all the source code assumes tabs every 4 columns, not 8.
Read on →
Tec

概述

整个发布流程有四个关键词,CertificatesIdentifiersDevicesProvisioning Profiles.

它们的相互关系如下图所示,

image

简单说来便是用户身份验证书(Certificates),App应用身份ID(Identifiers),可用于开发的Devices三者合一生成一份Provisioning Profile,并将此profile下载到本机双击安装后就自然可以在xcode中找到了(注意左上角的“GooGuu”在配置发布时应将Target与Project的设置调未相同选项,以避免发布失败)。

Read on →

image

这段时间除了看了黄仁宇的两部讲历史的书外还看了几本纪实传记之类的书,感觉都还不错,回顾了一番还真巧都是女先生们所作,果然感觉不一样。

最先翻起来的是齐邦媛的巨流河,记得前几年貌似火过但觉得名字有点二,跟逆流河就差一个字,本能的就闪开了,再翻开已是去年冬天,无奈看到一半对齐先生的絮絮叨叨心生厌倦也就放下了。

再来就是柴静的看见,爱看豆上推过来的,女先生的名字起得好,看封面长得也漂亮,比齐奶奶是好多了,所以也就通读了一番。讲第一次见白岩松的时候震惊了,貌似问她平时听什么歌,看啥书,怎么说得忘记了,当时就觉得逼格特高,差点没忍住就把这本扔下去拜读那几本去了。再然后通过她知道CCTV里也是有理想主义的存在的,其中对崔永元的印象尤深。

Read on →
Tec

最近学习了下python,传说中的pyhon的框架比关键字还多果然名不虚传。想用pyhon搭个网站练练手,上网一搜果然一大把。看了下推荐各有利弊,但Django的文档比较全面,虽然说有点封闭,但也没要求多高,感觉拿来上手正合适不过了。

Django 中文文档

这篇文章主要是个学习笔记的作用,就是根据上面的网站一步步搞起的。

Django是一个MVC框架,相比于Java的MVC SSH简单的不是一点半点,想之前搭SSH还通了个宵,现在看看Django的MVC简单到只有三个python文件,跟着教程一步步搭起来回过头才想起来这特么也是MVC的框架啊,自不待言。

image

上图是一个对Django MVC的简单示意,很容易可以看出,view.py是主管视图部分的,model.py主管模型层,遗憾没有个control.py,哈哈,url.py控制跳转,是为controller。

现在便一步步开始吧。

Read on →
Tec

image

十月份用octopress搭建了一个个人博客,现在把大概的流程介绍一下,常用的几个命令也在这里记下来。

Octopress是个利用Jekyll引擎开发的博客系统。它将生成的静态页面push到我们自己的github上,可以很好的在github page上展示。号称程序员博客逼格利器

A blogging framework for hackers.

Read on →
Tec

UICollection是在iOS6.0中新加的功能,用于图片的集中展示,大概就是图片墙的意思。基本的使用类似于UITableView,也是设置代理,数据源,对单个的Cell可以自行定制样式。稍有不同的是在UITableView中整体样式的设置只有两种,一种是Group和Plain,而在UICollection中则有较多的选择方案,具体的实现方式需要编码人员对UICollectionViewFlowLayout自行调整。

开发的App中有用到这种功能,结合一个台湾哥儿们Chris Xu的开源插件CXPhotoBrower,可以达到比较好的展示图片的效果。

具体效果图如下:

image

image

现在开始一步步搭建吧。

Read on →
Tec

字体粗度的设置

1
button.titlelabel.font = [uifont boldSystemFontOfSize:xx];

UINavigation中间隔button的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UIBarButtonItem *fontListBt = [[UIBarButtonItem alloc]
                                initWithTitle:@"Font"
                                style:UIBarButtonItemStyleBordered
                                target:self
                                action:@selector(rightBtClicked:)];
UIBarButtonItem *fontSizeBt = [[UIBarButtonItem alloc]
                                 initWithTitle:@"Size"
                                 style:UIBarButtonItemStyleBordered
                                 target:self
                                 action:@selector(popoverFontSize:)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc]
          initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
          target:nil
          action:nil];
self.toolBar=[[UIToolbar alloc] initWithFrame:CGRectMake(0,0,SCREEN_HEIGHT-320,44)];
[self.toolBar setItems:[NSArray arrayWithObjects:flexibleSpace,fontSizeBt,fontListBt, nil]];
[self.view addSubview:self.toolBar];
Read on →