当前位置:  编程技术>综合
本页文章导读:
    ▪XBMC + Debian + Rasberry Pi = 半个小米盒子                     去年年末最关注的小米盒子,基于Android 4.0的家庭娱乐核心。可惜,因为种种原因这个产品夭折了。      .........
    ▪从Samples中入门IOS开发(二)------ CURD      这段时间在想办法入门IOS native的开发,想找一个比较快速有效的办法,看书或者看文章都不太合适,主要是现在确实没有这么好的书能让你看完后就完成了从Java转到IOS的跨越,并且看完后就.........
    ▪HTML5 Canva浏览器兼容检查      【问题描述】不是所有的浏览器都支持HTML5。编写Web代码时,若使用了HTML5元素,在不支持HTML5的浏览器中,可能会出现兼容性的问题,如页面显示混乱。为此有必要对不支持HTML5的浏览器做相.........

[1]XBMC + Debian + Rasberry Pi = 半个小米盒子
    来源: 互联网  发布时间: 2013-11-10

               去年年末最关注的小米盒子,基于Android 4.0的家庭娱乐核心。可惜,因为种种原因这个产品夭折了。

                后来得手一个开源硬件Rasberry PI , 基于ARM的架构, CPU主频700MHz, 内存512M ,usb供电, 有USB, GPIO, 网络插口。

                最优秀的, 这个硬件对视频播放的支持很完美。因此拿他来做家庭娱乐中端的也不少。

 

               一般来说两个做法, 一个是XBMC + Linux系列, 一个是 XBMC + Android4.0系列

               Rasberry Pi 我刷过官方的Android 4.0的ROM ,可以跑, 但是很卡, 硬件加速的缺失需要弥补。另外, Android 4.0的内核也需要做一定的定制。  小米这方面应该会做的更好。

              另外一个方法, 因为对硬件要求不高, 更简单一点。

              XBMC官方还专门对Rasberry Pi的安装有以下的帮助文档:

                    http://wiki.xbmc.org/index.php?title=Raspberry_Pi/FAQ#Installing_XBMC_on_the_Raspberry_Pi

             一般来说 有 OpenELEC, XBMC LIVE两个常见的quick install rom

             针对Rasberry Pi其实还有个更简单的install工具Raspbmc:

                     http://www.raspbmc.com/about/

            直接在win系统上,用帮助工具就能把完整的rom烧到SD卡上

           

             下面是效果图

 





       关于遥控器, 如果用红外的需要买个红外传感器。 基于wifi的Android App就很好用。 但是注意, 新版XBMC的API换成json了, 因此要用最新型的App:

       http://yatse.leetzone.org/redmine/projects/androidwidget

     

      最后谈一下成本, Rasberry Pi的板子 + hdmi连接线 + SD卡一共320左右

      软件全部开源,免费。

      Ras Pi的电路图也是开源的, 如果包装成产品, 批量生产的话,成本不会超过200。 南方也确实也有很多基于这个的小电子厂。


      不过如果硬件支持, 能够基于Android系统的话会更好, Android系统的重力感应, 丰富的app, 简易的可定制 , 都是不可比拟的。

    

补充一下,Ras Pi可以超频,参见以下, 不过我试过,差距不会很大

http://kitsunelab.com/blog/2012/07/26/%E6%95%99%E7%A8%8Braspberry-pi%E8%B6%85%E9%A2%91/


以上@蒋彪

 

作者:nanjingjiangbiao 发表于2013-1-11 14:50:42 原文链接
阅读:61 评论:0 查看评论

    
[2]从Samples中入门IOS开发(二)------ CURD
    来源: 互联网  发布时间: 2013-11-10

这段时间在想办法入门IOS native的开发,想找一个比较快速有效的办法,看书或者看文章都不太合适,主要是现在确实没有这么好的书能让你看完后就完成了从Java转到IOS的跨越,并且看完后就容易忘记,不深刻。后来发现一个非常不错的资源,就是IOS Library中的Sample code,基本掌握Xcode后直接从这些samples的code入手,debug->code->document,这样的学习方式不但深刻,更重要的是可以把这些code直接转变为将来的武器库,感觉不错,今天就从CURD开始。

互联网或企业级应用的基础组成部分就是CURD,而普通的IOS应用特别是那些以信息管理的为核心的app也是以CURD为基础,因此入门IOS当然得把CURD的各个环节搞清楚,官方samples CoreDataBooks给了我们想知道的细节。对我而言,我最想搞清楚这么几块:

整体流转模式

页面流程图如下所示:


对于这么一个常规的CURD流程,从中可以学习到的关键点有如下几点:

  • 基于MainStoryBoard来控制页面流
  • 基于CoreData来管理数据
  • TableView与CoreData的结合
  • 以数据为驱动的MVC操作模型
  • 基于UndoManager来做撤销或重做
  • 基于Delegate的代码组织结构
  • 程序退出时及时保存数据
基于MainStoryBoard来控制页面流

MainStoryBoard是个好东西,直观的图形操作是一方面,最重要的是它基于stack的模型把IOS页面流转的模式给固化下来,不但方便了开发者按照固定的模式来组织页面,也固化了用户的使用习惯。http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1,这篇文章非常详细地讲解了如何开始MainStoryBoard,这里我就不重复,这个例子中学到的关键点有两点:

1)override方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

为下个页面做准备

2)调用UINavigationController的方法popViewControllerAnimated从子页面回到主页面

基于CoreData来管理数据

CoreData是Cocoa最核心的数据持久层框架,主要用途就是把提供统一数据操作的API来处理各种不同持久化方式的数据,框架主要提供两块,持久层和数据操作层,

持久层:

  • NSManagedObjectContext:是从持久层到数据操作的中介
  • NSManagedObjectModel:构建数据的具体格式
  • NSPersistentStoreCoordinator:提供数据实际的存储方式
三者的依赖关系是NSManagedObjectContext->NSPersistentStoreCoordinator->NSManagedObjectModel,本例子的是通过一个文件来持久化app中操作的数据,具体初始化这三者的代码可见sample中CoreDataBooksAppDelegate.

数据操作层:

  • NSFetchedResultsController:数据查找的调用接口
  • NSFetchRequest:数据查找方式的包装
  • NSEntityDescription:数据实体的包装
  • NSSortDescriptor:排序规则的包装
  • NSFetchedResultsControllerDelegate:数据变更的通知
具体如何初始化这些对象可见sample中RootViewController

TableView与CoreData的结合

本例中是基于tableview来展现列表和detail数据,对于tableview的用法一般都是把UITableViewController的datasource和delegate设置为UITableViewController自身后,然后override UITableViewDatasource和UITableViewDelegate的相关方法,从而填充,渲染和监听tableview的数据。因此结合CoreData,就是在这些方法里调用NSFetchedResultsController把数据塞到tableview中,以一下代码为例:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.fetchedResultsController sections] count];
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}


// Customize the appearance of table view cells.

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{    
    // Configure the cell to show the book's title
    Book *book = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = book.title;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    // Configure the cell.
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}

这几个方法就设置了tableview的组,行和每行具体数据,并且数据都来源与NSFetchedResultsController,从而与CoreData相结合

以数据为驱动的MVC操作模型

由上一部分可知,tableview的UI与数据已相分割,而整套程序各个页面之间的流转也是基于数据而驱动,这也是IOS强调的MVC模式的体现,每个页面都有controller对应,每个controller都维护一个data,当data变动时,监听器会随之改变UI的展现,比如本例中实现了NSFetchedResultsControllerDelegate,以此监听data的变动,从而刷新tableview,这样就不需要在其他页面改变数据时,而外地修改与此数据相关的UI,具体代码如下所示:

/*
 NSFetchedResultsController delegate methods to respond to additions, removals and so on.
 */

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
    // The fetch controller is about to start sending change notifications, so prepare the table view for updates.
    [self.tableView beginUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
{    
    UITableView *tableView = self.tableView;

    switch(type) {
            
        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
            break;
            
        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
{    
    switch(type) {
            
        case NSFetchedResultsChangeInsert:
            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates.
    [self.tableView endUpdates];
}

基于UndoManager来做撤销或重做

IOS提供了一个UndoManager,提供了undo和redo相关功能,UndoManager也是和NSManagedObjectContext相结合,从而实现以数据为中心的undo和redo,具体说来,UndoManager为维护一个NSNotificationCenter,并为此提供Observer的回调,从而达到对undo和redo的监听的目的,使用方法见如下代码:

- (void)setUpUndoManager
{
    /*
     If the book's managed object context doesn't already have an undo manager, then create one and set it for the context and self.
     The view controller needs to keep a reference to the undo manager it creates so that it can determine whether to remove the undo manager when editing finishes.
     */
    if (self.book.managedObjectContext.undoManager == nil) {
        
        NSUndoManager *anUndoManager = [[NSUndoManager alloc] init];
        [anUndoManager setLevelsOfUndo:3];
        self.undoManager = anUndoManager;
        
        self.book.managedObjectContext.undoManager = self.undoManager;
    }
    
    // Register as an observer of the book's context's undo manager.
    NSUndoManager *      
    
[3]HTML5 Canva浏览器兼容检查
    来源: 互联网  发布时间: 2013-11-10

【问题描述】不是所有的浏览器都支持HTML5。编写Web代码时,若使用了HTML5元素,在不支持HTML5的浏览器中,可能会出现兼容性的问题,如页面显示混乱。为此有必要对不支持HTML5的浏览器做相应的处理。

【解析】

其实很简单,在<body> onLoad方法中引用下述方法即可:

function supports_canvas() {

  if(!!document.createElement('canvas').getContext)
  {
	  
  }
  else
  {
	  document.getElementById("html5_warnning").innerHTML = "本演示采用HTML5编写。您的浏览器不支持HTML 5,请更换浏览器,推荐使用Chrome!";
	  document.getElementById("demo").style.display = "none";
  }

}

body中引用示例

<body class="main_body" onLoad="supports_canvas();">

else子句中的内容可替换为兼容性的代码。

 

【示例效果】

 

【实例】

在网上看到一个很有爱的例子,示例的运行效果如下(修改过的版本):

有一点美中不足,那就是这个代码是基于HTML5写的,有些浏览器不支持。利用上述方法进行改进:

加入如下代码:

if(!document.createElement('canvas').getContext) {
			var msg = document.createElement("div");
			msg.id = "errorMsg";
			msg.innerHTML = "你的浏览器落伍了!<br/>亲爱的,请使用 <a href=/"http_/www.google.cn/chrome/intl/zh-CN/landing_chrome/hl/zh-CN_/quot;.html target=\"_blank\">Chrome</a>浏览器!";
			document.body.appendChild(msg);
		}

IE8 运行效果:

点击链接可跳转至Chrome下载页面。

 

【实例链接】

1 http://love.peterchou139.com/2012-2-14

2 http://love.peterchou139.com/

注:需支持HTML5的浏览器才能查看!

 

【其他】

注意用支持HTML5的浏览器才能看到效果,呵呵。

1 http://love.hackerzhou.me/

2 http://www.oschina.net/news/25769/10-html5-canvas-examples-for-valentines-day


 

转载请标明出处,仅供学习交流,勿用于商业目的

Copyright @ http://blog.csdn.net/tandesir

作者:tandesir 发表于2013-1-11 14:43:02 原文链接
阅读:71 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3