「Efficient Android Threading 笔记」- C1 Android Components and the Need for Multiprocessing Android RecyclerView Android Socket Programming Supporting Multiple Screens Make a Reusable UI in Android App Development 如何在 Android Studio 中包含 *.so library,并使用库中定义的方法? 使用 SpannableString 格式化字符串,实现前景色、下划线、超链接、图文混排等 如何使用 bound service 完成进程间通信? 创建自定义视图 Creating custom views 通过 Android Theme & Style 定制应用的样式 「译」Android ViewPropertyAnimator 介绍 Android Animation Interpolator - Android 动画插值器源码笔记 「译」Android Animation in Honeycomb by Chet Haase(Android 3.0系统中的动画机制) 从 Android Sample ApiDemos 中学习 android.animation API 的用法 如何学习 Android Animation? 如何实现 Android ListView「上拉加载更多」? 「译」向Big Nerd Ranch提问:为什么Fragment在Android App开发中非常重要? 分类整理我在 SegmentFault 上针对某些问题作的回答 Android Servcie 后台服务总结笔记 如何在Android设备旋转时暂存数据以保护当前的交互状态? Android Message Handler 消息处理机制总结笔记 如何获取FragmentTabHost中指定标签页的Fragment? Fragment子类必须包含一个public无参构造器 如何更新及替换ViewPager中的Fragment? 如何使用Android UI Fragment开发“列表-详情”界面? 一个Android音频文本同步的英文有声读物App的开发过程 「Android编程权威指南笔记」Android应用本地化 通过jfeinstein10/SlidingMenu实现Android侧滑菜单 为Ubuntu14.04部署Android App的Eclipse开发环境 「Android编程权威指南笔记」使用ListFragment显示列表 「Android编程权威指南笔记」SDK版本与兼容 「Android编程权威指南笔记」Android布局和组件 「Android编程权威指南笔记」UI Fragment 「Android编程权威指南笔记」Activity 第一次开发iOS App和Android的对比总结笔记 「App Training笔记」创建第一个应用 「App Training笔记」开发入门训练大纲 Android APP - 从远程FTP服务器下载文件到本地

「Linux程序设计」学习计划跟踪

2014年07月21日

跟踪制定的学习计划。

task4 done 2014-08-21

完成8.4节使用mysql数据库的CD唱片应用程序的练习。

task3 done 2014-07-29

完成7.4节使用dbm数据库的CD唱片应用程序的练习。

  • 在文件中以逗号或空格分隔变量来存储信息,在shell中容易实现。但许多CD标题和曲目有包含逗号。而使用数据库的索引机制可以放弃这种分隔方法:存储长度可变的数据记录;更有效地存储和检索数据。dbm是轻量级软件,可以被编译进二进制文件,无需独立的数据库服务器。
  • 把数据访问接口和用户接口分开,用一个头文件描述数据和访问数据的接口;
  • 使用命令行来驱动的用户接口,不再使用curses库,目的是把精力集中到数据接口的实现;

源代码行数sloc

  • C&curses:554
    该例程“使用curses函数函数库管理基于文本的屏幕”,即使用了非常多的curses库函数,管理屏幕输入/出、键盘输入、窗口/子窗口等。使用细节暂且不深究。
    学习该例程的目的是,厘清使用C语言完成该程序的逻辑流程,及,与Shell的区别。
  • Shell:299

实现对比

TITLE_FILE 存储标题信息 : 目录编号,标题,曲目类型,艺术家
TRACKS_FILE 存储曲目信息: 目录编号,曲目编号,曲名
目录编号因为是惟一的,所以用来关联2个文件,标题文件的一个数据项一般会对应曲目文件的多行数据。

“增”操作

  • C&curses:仅指向标题文件中增加一条CD记录。而CD的曲目信息,通过“改”操作录入。
    fopen(), wgetnstr(), fprintf(), fclose().
  • Shell:读取标准输入,然后重定向到标题文件,这样就增加了一条CD记录;然后通过同样的方式增加曲目信息。
    read, >>

“查”操作

  • C&curses:引导用户输入需要查找的标题,逐行读取标题文件,进行匹配。
    不会把所有CD以列表形式呈现,所以针对某张CD操作时,必须先“查”,目前版本仅支持“标题”查找。
    需要变量 current_cd 存储“当前CD标题”,“增、查”2个操作会更新该变量,“删”重置该变量为'\0'
    wgetnstr()(curses库函数), fopen(), fgets(), strstr() or strcmp(), fclose().
  • Shell:获取用户需要查找的信息,grep查找并重定向到临时文件;读取匹配的第一行,以获取CD目录编号等信息; 再次调用grep查找与目录编号匹配的曲目。
    read, grep, wc -l, cut

“删”操作

  • C&curses:删除当前CD记录,及其所有曲目。
    由于曲目文件每个条目,也就是每行的开头是目录编号;查找曲目文件中与“当前目录编号”不匹配的行,并写入临时文件,而匹配的行被丢弃,以达到删除的目的。
    fopen(), fgets(), strncmp(), fputs(), fclose().
  • Shell:调用grep反向查找
    grep -v, mv

“改”操作

  • C&curses, Shell:不支持针对某个曲目编号的修改,需要先删除某个目录编号的所有曲目,然后重新录入。
    与“删api、增api”相同。

task2 done 2014-07-23

完成6.10节使用curses函数函数库(c语言)完成CD数据库应用程序的练习。

一个管理CD唱片的程序[《linux程序设计第4版》6.10节例程]。 使用菜单完成“增、删、改、查”四项功能,使用文本存储数据。

task1 done 2014-07-21

完成2.8节使用shell完成CD数据库应用程序的练习。

  • 把时间推向两年前,学习《Linux程序设计》2.8的例程时,很吃力;
  • 去年一年命令行为日常工作所用;
  • 今年五月份通读了《shell脚本学习指南》;
  • 今年七月份再看2.8节,涉及的模式匹配运算、算数展开运算、重定向、命令行参数、test命令、IFS、grep、cut、read等,无障碍,可快速理解程序。

结论

  • 如果学习起来很吃力而产生了“怎么这么笨”的负面情绪时,必须暂时放下,而原因必然是缺乏相关主题的知识;
  • 在有成效地通读某个主题的专业书籍之后,就具备了某种印象,在遇到与主题相关的代码段时,就可以快速理解其含义,并且加深对该主题的理解;
  • 多加练习。

Linux程序设计第4版 学习计划

2014-07-20
计划
 每天使用shell来熟悉这些基本功能


知识共享许可协议
li2的博客WeiYi.Li 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2017. All rights reserved by WeiYi.Li. Powerd by Jekyll & LinAnYa's Theme