彬彬的博客

  • 首页
  • 归档
  • 分类
  • 关于

Win7 下 VMware 虚拟机中安装 CentOS 服务器

发表于 2015-01-17 | 分类于 服务端

运行环境

  • Windows 7 Professional 32-bit SP1
  • VMWare Workstation 10.0.0 build-1295980
  • CentOS-6.6-x86_64-minimal.iso

安装步骤

由于详细的安装过程需要大量文字和截图说明,现整理成一个 PDF 文档如下:

  • Win7-VMware-CentOS-Server.pdf

Win7(本地)通过 PuTTY “远程”登录虚拟机 VMware 中的 CentOS 服务器

通过上述的安装过程,现已得到一个纯净的 CentOS 6.6 服务器环境,由于在 VMware 中操作 Linux 命令极不方便,需要在主机(Win7)与虚拟机(VMware)之间来回切换键盘,我们想要用像 PuTTY 等 ssh 软件登录远程的 Linux 服务器一样来登录刚才安装在虚拟机(VMware)中的 CentOS 服务器,便于命令行操作。

启动 VMware 中 CentOS 服务器,并登录 root 用户后,输入命令:

1
# ifconfig

得到如下信息:

发现只有环回接口(Lookback)信息,没有网卡信息,需要手动配置启动网卡 eth0 :

1
# vi /etc/sysconfig/network-scripts/ifcfg-eth0

把第 5 行改为:ONBOOT=yes,即在开机时启动网卡 eth0,其他保持不变:

此外,还需关闭 iptables 防火墙,才能允许远程登录,依次输入如下命令:

1
2
3
4
# service iptables stop (关闭 ipv4 防火墙)
# service ip6tables stop(关闭 ipv6 防火墙)
# chkconfig iptables off(禁止开机启动 iptables 和 ip6tables)
# chkconfig ip6tables off

最后输入 reboot 命令重启服务器,并重新登录后,再次输入 ifconfig 命令:

这时已经有网卡 eth0 的信息了,上图红色框内的 IP (比如这里为:192.168.211.132)即为这台服务器的 IP 地址,先记录下来,后面远程登录需要用到。

在 Win7 中打开 PuTTY 软件,在 Host Name (of IP address) 输入框中填写上面 eth0 网卡信息中的 IP 地址,在 Port 端口输入框中填写 22 ,点击“Open”按钮,随后弹出的警告框询问是否信任这台主机,点击“是”,出现登录页面:

login as:输入 root,回车后并输入 root 用户的密码,即可登录成功,如下:

当然,你也可以使用像 WinSCP 等可视化工具登录虚拟机中的 CentOS 服务器来操作管理文件。

点击“登录”按钮后开始登录,如果你的 CentOS 服务器没有开启 SFTP,则在上面把文件协议改为“FTP”即可,登录后如下,可以像在 Windows 里一样管理 Linux 的文件了。

下文将介绍:CentOS 服务器环境搭建:Linux + Apache + MySQL + PHP + Nginx

站在巨人的肩膀上:QA恋 iOS 客户端是怎样炼成的

发表于 2015-01-13 | 分类于 iOS 技术文章

QA恋的 iOS 客户端是我的 iOS 开发处女作,今天给大家分享一下这款 App 是如何写出来的,这里并不打算讲具体的实现代码细节,只是介绍一下开发过程中用到的开源代码以及如何处理遇到的问题。

有人说,目前国产手机还只是停留在堆砌硬件的阶段,缺乏自己的核心技术;那么请允许我把我自己目前的 iOS 开发水平定义为:“堆砌他人的优秀代码和开源项目”,当然,也可以理解为是“君子善假于物也”或者“站在巨人的肩膀上”。

网络请求

在移动客户端的开发中,网络请求毋庸置疑是非常重要的一部分,尽管使用苹果官方提供的 NSURLConnection 和 NSURLRequest 网络 API 固然能够解决我们大部分的 Web Service 请求,但是使用起来不是很简洁方便,因此强烈建议在实际开发中使用现有的开源而优秀的第三方网络框架。

在QA恋的 iOS 客户端中,我采用的是 MKNetworkKit,它是一个使用十分方便,功能又十分强大且完整的 iOS 网络编程代码库,完全基于 ARC。它只有两个类,它的目标是使用像 AFNetworking 这么简单,而功能像 ASIHTTPRequest 那么强大。

MKNetworkKit 最吸引我的是它的缓存机制,几乎不需要其他额外的代码,只要简单设置,似乎一切它都会帮你悄悄做好了,不过相比 AFNetworking,MKNetworKit 的使用与维护者较少,Github 上作者也已经有两年不更新代码了,框架本身存在一些小Bug,不过都可以解决,如果你想处理更复杂的网络请求,还是推荐 AFNetworking 框架。

页面左右滑动 Tab 实现

在 QA恋客户端中,多处使用到左右滑动切换视图内容的分段选择控件,如下面两张图所示,在首页中有【我的关心、QA 广场】两个切换子 Tab,在发现页中有【QA 热、遇见 Ta、搜索】三个切换子 Tab,iOS 自带的 Segmented Control 无法达到这样的效果,不能手势滑动只支持点击 Tab 切换,所以在这里使用的是第三方提供的:HMSegmentedControl,支持多种顶部标题样式,点击标题切换事件,手势滑动切换事件。

下拉刷新,上拉加载实现

自从 Twitter 客户端引入下拉刷新列表后,它似乎就成为了一种标准的手势,全世界的开发者都在模仿,以至于苹果在 iOS 6 以后自带的 UITableViewController 也支持了下拉刷新事件,不过很遗憾的是,在多数情况下,我们并不希望一个页面仅仅是列表项页面,而是希望它由 UITableView 控件和其他元素组合而成,但 UITableView 并不支持下拉刷新,需要自己实现。这里采用的是:MJRefresh,使用非常简洁,只要在相应的地方引入头文件,添加下拉刷新和上拉加载事件响应,无需其他额外的代码设置。

加载进度条和Toast提示

UIView+Toast: An Objective-C category that adds Android-style toast notifications to iOS. 实现类似安卓系统原生的 Toast 通知那样的样式。(例如:在QA恋的登录页面,用户未填写邮箱就点击登录按钮,弹出 Toast 提示相应信息,这时我希望页面上的其他控件仍是可点击或可编辑的,这是与 MBProgressHUD 不同的。)

MBProgressHUD: 实现各种加载进度条样式的透明指示层(HUD),与 UIView+Toast 不同的是,MBProgressHUD 是 UIWindow 级别的控件,当它被显示时,屏幕上其他元素将不可点击。(举个例子:在 QA恋的登录页面,用户点击登录按钮时,调用 MBProgressHUD 的 show 方法,页面中显示“正在登录…”进度条,后台开始网络请求登录,这时我不希望屏幕上的其他按钮再被用户点击,MBProgressHUD 刚好可以做到这一点,当请求结束后,调用 hide 方法,页面恢复,继续其他操作。)

查看大图

XHImageViewer: 支持图片缩放,多张图片同时左右切换查看,图片打开关闭动画效果等。唯一的不足:如果想在每张图片下加一段文字描述(如下图),则需要自己修改代码实现。

日期选择控件

用户修改生日等资料时,点击列表向总是要弹出一个日期选择列表让用户选择,在 iOS 8 之前,一般采用 UIDatePicker 和 UIActionSheet 结合来实现,但在 iOS 8 以后,UIActionSheet 控件里不允许再插入其他 View,所以这种方法只能弃用,好在 Github 上已有专为 iOS 8 提供弹出的日期选择控件:RMDateSelectionViewController,提供了类似 UIActionSheet 效果的时间和日期选择样式。

汉字分组索引

iOS 自带的 UITableView 支持列表分组显示,但是如何根据每个列表项文字的第一个字的拼音首字母进行分组是需要解决的问题。这里参考了 这篇博文 中提供的方法,先根据 pinyin.h 中提供的 pinyinFirstLetter 方法,获取列表项文字第一个汉字的拼音首字母进行分组,然后在 UITableView 的 sectionIndexTitlesForTableView delegate 进行显示。

表情输入与富文本显示

表情的输入面板的布局基本上是参考微信的表情输入布局,聊天气泡的图文多行显示是基于 MLEmojiLabel 和TTTAttributedLabel 实现的,这里具体的实现逻辑比较复杂,篇幅有限,不再赘述,有时间写一篇博文详细讲解一下。(左图为 QA恋回复页面,右图为微信聊天页面)

内嵌浏览器

在应用中,我们经常需要打开一些 url 链接,如果总是调用 Safari 打开,会切换出应用,这是一种很不友好的体验,于是绝大部分应用都有基于 UIWebView 的内嵌浏览器来打开 url 链接,这里推荐:TOWebViewController,可以很方便和高效地在 App 中嵌入一个小型的网页浏览器,具有前进、后退、刷新、分享等功能,并且具有加载进度条。

第三方登录、分享、统计

在QA恋的登录页面分别提供了用微博账号、QQ 账号登录,以及支持分享QA恋到微博,QQ,人人,微信等第三方社交平台,如果去挨个开放平台下载集成他们提供的 SDK,将是一件非常繁琐的事,好在这一切 友盟 帮我们做好了,只要在工程中集成友盟提供的 SDK 即可。此外友盟还提供了应用统计,崩溃日志记录,自动检查更新等功能,也是非常方便易用,

推送通知

对于移动设备来说,推送通知无疑也是非常重要的一部分。请期待我接下来的系列博文《细说 iOS 推送通知》,将分别详细讲解如何实现客户端和服务器端的推送技术。

其他

在 QA恋的 iOS 客户端中,除了采用上述提到的开源框架、项目、代码之外,还使用了大量网上很多开发者无私贡献的优秀代码片段和开发教程,如图片的压缩裁剪,字符串的转换处理,获取设备唯一 ID,字符串 MD5 加密哈希计算,日期的转换显示,数据的储存,自定义宏等等,每一部分细说起来都需要大量篇幅,有时间一一分析。

当然,一款优秀的 App,除了需要优秀的开发工程师之外,也外离不开一个优秀的产品经理和优秀的设计师一起协作。

推荐网站、书籍

Google:人生苦短,善用谷歌,技术问题就不要去问度娘了。

GitHub:你可能已经发现,上面贴出的 iOS 开源库都链向了 GitHub,把它说是最大的开源代码库以及版本控制系统一点也不为过,目前绝大部分的开源软件和项目都托管在这上面。

Stack Overflow:国外知名的技术问答社区,你开发过程中遇到的绝大部分问题前人也都已经遇到了,且在这里基本上已经有了详细的问答。当然,国内的 SegmentFault 也是不错的选择。

此外,国内的 Code4App、CocoaChina 上也有大量的优秀 iOS 代码和实例。

最后,多看一些牛人的技术博客,也可以让自己在开发过程中少走弯路,这里有很多中文 iOS/Mac 开发博客列表。

如果你还在疑惑 iOS开发如何提高,看看唐巧的这篇博文吧,也许能给你一些建议。

推荐两本我正在看的 iOS 开发书籍:
《iOS开发进阶》 唐巧 著
《Objective-C 高级编程:iOS与OS X 多线程和内存管理》 黎华 译

总结

上文只是地列出了 QA恋 iOS 客户端使用到得开源项目、代码,可能比较零散,其实在实际的开发过程中,遇到的问题通常会更多,但于通过团队讨论和借助互联网资源一般都能一一解决。一个优秀的工程师善于阅读他人优秀代码的能力应该跟自己写出优秀代码的能力一样重要。如果你在项目中同样用到上述开源代码遇到问题,欢迎留言跟我交流讨论。

Write a Word Processor in C

发表于 2015-01-07 | 分类于 C/C++

Project: Write a Word Processor in C

Overview:

You have to create a Word processor using C programming. The program can accept a sentence of not more than 20 words.

The program is also able to perform the following functions:
(i) Reverse the whole sentence and print it out.
(ii) To identify how many instances of a specified character.
(iii) To return the position a specified character at the first occurrence.
(iv) To return the position a specified character at the last occurrence.
(v) To return the number of words in the sentence.
(vi) Reverse all the words in the sentence.

Hints:

  • You NEED to user 1-dimensional array or text to store the sentence .
  • You NEED looping statements to control the online menu.
  • Other C techniques you may user are:
  • if-else statement
  • switch-case statement
  • while/for/do-while statement

You should provide a menu for the user to choose the options.One possible sample of the menu is:

Word Processor
(1) Enter the sentence (max. 20 words)
(2) How many words in the sentence?
(3) Reverse the whole sentence from last character to the first.
(4) Find the number of the instances of character:
(5) Find the position of a specified character at the first occurrence.
(6) Find the position of a specified character at the last occurrence.

这是今天某位小伙伴分享的他们的课程作业题,
题目看起来似乎并不难,但想要写出健壮完美的程序,在具体实现的时候还是有很多细节要考虑到,下面贴出我自己简单实现的代码,代码中某些函数实现仍有待改进:

WordProcessor.c

Linux 中为何用字符 ~ 表示 Home 目录

发表于 2015-01-05 | 分类于 Linux

我们知道,在类 Unix 风格的操作系统中(包括 BSD,GNU/Linux 和 Mac OS X 等),通常用波浪号 “~” 来表示当前用户的主目录(Home 目录),例如,如果当前用户的 Home 目录为 /home/username,则在命令行中输入:cd 或者 cd ~ 或者 cd /home/username 或者 cd $HOME 都是等效的。这种习惯源自于 1970 年代流行的 Lear-Siegler ADM-3A 终端机,这种机器上波浪号 “~” 和 Home 键(Home 键用于把光标移到到最左端)正好在同一个键上,如下图所示:

下面是 Lear-Siegler ADM-3A 终端机的键盘和一些老照片,可以在这里了解更多,这张键盘图片也解释为什么在 Vim 中,h,j,k,l 分别代表左移,下移,上移,右移,同样也是从这个终端机使用习惯保存下来的,StackOverflow 中也有一个帖子专门在讨论这个问题:In vim, why is ‘j’ used for down and ‘k’ for up?



  • Reference:Why was ‘~’ chosen to represent the home directory?

Hello, world!

发表于 2015-01-01 | 分类于 其它

Hello, I am Zubin Kang, welcome to my personal blog.

自从 1972 年 B 语言的编程指南开始,“Hello, world!” 便成了学习一门语言的敲门砖,以至于最后成为了一种符号和哲学。当然,所谓“树大招风”,“Hello, world!” 出名以后,也有很多人跳出来表示这种示例程序毫无用处,即使会写 “Hello, world!” 也不代表会用这种语言。

作为第一篇博文,这里并不打算去讨论孰是孰非,当然也不会长篇大论地去介绍如何编写某一门语言的 “Hello, world!” 程序,毕竟,对于一个程序员(其实我更希望你们叫我“工程师”)来说,一下子在屏幕上打印出一行 “Hello, world!”,也不是什么有意思的事情。

总之不要在意这些细节,欢迎常来我博客看看呀亲!

1…910
彬彬

彬彬

95 文章
12 分类
0%
© 2015 - 2025 kangzubin.com 京ICP备14046576号-1
Powered by Hexo
,
Theme from NexT.Gemini
本网站由 又拍云 提供 CDN 加速/云存储服务