<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fan&#039;s blog &#187; UI</title>
	<atom:link href="http://fkpwolf.net/category/ui/feed/" rel="self" type="application/rss+xml" />
	<link>http://fkpwolf.net</link>
	<description>无为而无不为</description>
	<lastBuildDate>Sun, 20 May 2012 05:11:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>QT 5试用</title>
		<link>http://fkpwolf.net/2012/04/14/try-qt5/</link>
		<comments>http://fkpwolf.net/2012/04/14/try-qt5/#comments</comments>
		<pubDate>Sat, 14 Apr 2012 13:24:10 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://fkpwolf.net/?p=1149</guid>
		<description><![CDATA[Build 要直接从Git编译，参考这个文档（居然有中文版本）。从网上下的zip包一大堆问题。然后我在linux和osx下都测试过，居然在osx下容易很多，而在linux下要一大堆依赖。 运行例子 tutorial放在qtquick1目录下，例子还算丰富，文档在这里。运行QML文件需要qtbase/bin/QMLViewer.app。一个QML文件描述了界面显示和事件触发，所以跟HTML很像，但描述语法不类似，我猜只有javascript是一样的。 &#160; Hello world。可以看出支持Lion的全屏模式，也支持中文。 疑问：1）有HTML的一套，C++的位置在哪里？2）还有CSS么？3）qtwebkit在这里面扮演何种角色？4）Javascript性能如何？真的是第一公民还是如同Gnome Shell只是一个UI的扩展？]]></description>
			<content:encoded><![CDATA[<ul>
<li>Build</li>
</ul>
<p>要直接从Git编译，参考这个<a href="http://qt-project.org/wiki/Building_Qt_5_from_Git">文档</a>（居然有中文版本）。从网上下的zip包一大堆问题。然后我在linux和osx下都测试过，居然在osx下容易很多，而在linux下要一大堆依赖。</p>
<ul>
<li>运行例子</li>
</ul>
<p>tutorial放在qtquick1目录下，例子还算丰富，文档在<a href="http://doc.qt.nokia.com/qt5/index.html">这里</a>。运行QML文件需要qtbase/bin/QMLViewer.app。一个QML文件描述了界面显示和事件触发，所以跟HTML很像，但描述语法不类似，我猜只有javascript是一样的。</p>
<p><a href="http://fkpwolf.net/WordPress/wp-content/uploads/2012/04/Untitled.png"><img class="alignnone size-full wp-image-1150" title="Untitled" src="http://fkpwolf.net/WordPress/wp-content/uploads/2012/04/Untitled.png" alt="" width="500" height="222" /></a></p>
<p>&nbsp;</p>
<p><em>Hello world。可以看出支持Lion的全屏模式，也支持中文。</em></p>
<p>疑问：1）有HTML的一套，C++的位置在哪里？2）还有CSS么？3）qtwebkit在这里面扮演何种角色？4）Javascript性能如何？真的是<a href="http://arstechnica.com/business/news/2012/04/an-in-depth-look-at-qt-5-making-javascript-a-first-class-citizen-for-native-cross-platform-developme.ars">第一公民</a>还是如同Gnome Shell只是一个UI的扩展？</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2012/04/14/try-qt5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>玩了下SproutCore</title>
		<link>http://fkpwolf.net/2012/01/17/%e7%8e%a9%e4%ba%86%e4%b8%8bsproutcore/</link>
		<comments>http://fkpwolf.net/2012/01/17/%e7%8e%a9%e4%ba%86%e4%b8%8bsproutcore/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 08:53:07 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://fkpwolf.net/?p=1105</guid>
		<description><![CDATA[照着文档做了个hello world，运行起来后发现这货完全是浏览器本地运行，压根儿没有服务器的请求。嗯，这下是标准的HTML5了吧。 一个静态的本地应用有什么用呢？有人也有这种疑惑：没有服务器段那如何和数据库打交道呢？如果还是要调用Rails，那表明这个框架只能算上半个。 所以把这东西当作一个C-S的框架比如Swing来看就容易明白了。或者更直接点：它就是为手机上的移动web应用准备的，这个应用可以是http的web应用，也可以是本地的js+css应用。 作为一个C-S框架，比web应用要更关注界面中组件之间的交互，事件绑定和数据绑定是要优先考虑的，而这也是SproutCore的强处。 如果用它通过REST直接连CouchDB之类的文档数据库，倒是一个好的组合。 另外由于HTML5已经足够强大，比如图形和拖放，所以完全可以用javascript来写些“本地”应用。你可能说Swing和Gtk之流已经很成熟了呀？但答案是：HTML5是标准。 所以我关心的一点是SproutCore的模版语言仿佛走上了java JSTL的老路子： {{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController"}}} {{view Todos.MarkDoneView}} {{/collection}} 又是XML，极端难看啊。如果页面要微调，肿么半呢？]]></description>
			<content:encoded><![CDATA[<p>照着<a href="http://sproutcore.com/guides/getting_started.html">文档</a>做了个hello world，运行起来后发现这货完全是浏览器本地运行，压根儿没有服务器的请求。嗯，这下是标准的HTML5了吧。</p>
<p>一个静态的本地应用有什么用呢？有人也有这种<a href="https://groups.google.com/group/sproutcore/browse_thread/thread/ff026c9954589495">疑惑</a>：没有服务器段那如何和数据库打交道呢？如果还是要<a href="http://sproutguides-drogus.strobeapp.com/rails.html">调用Rails</a>，那表明这个框架只能算上半个。</p>
<p>所以把这东西当作一个C-S的框架比如Swing来看就容易明白了。或者更直接点：它就是为手机上的移动web应用准备的，这个应用可以是http的web应用，也可以是本地的js+css应用。</p>
<p>作为一个C-S框架，比web应用要更关注界面中组件之间的交互，事件绑定和数据绑定是要优先考虑的，而这也是SproutCore的强处。</p>
<p>如果用它通过REST直接连CouchDB之类的文档数据库，倒是一个好的组合。</p>
<p>另外由于HTML5已经足够强大，比如图形和拖放，所以完全可以用javascript来写些“本地”应用。你可能说Swing和Gtk之流已经很成熟了呀？但答案是：HTML5是标准。</p>
<p>所以我关心的一点是SproutCore的模版语言仿佛走上了java JSTL的老路子：</p>
<pre>{{#collection SC.TemplateCollectionView contentBinding="Todos.todoListController"}}}
   {{view Todos.MarkDoneView}}
{{/collection}}</pre>
<p>又是XML，极端难看啊。如果页面要微调，肿么半呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2012/01/17/%e7%8e%a9%e4%ba%86%e4%b8%8bsproutcore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Webkit render a button</title>
		<link>http://fkpwolf.net/2011/06/24/how-webkit-render-a-button/</link>
		<comments>http://fkpwolf.net/2011/06/24/how-webkit-render-a-button/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 07:57:50 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http:///?p=997</guid>
		<description><![CDATA[看了这位老兄的blog后，我对webkit也有了兴趣。webkit可以根据布局结构来动态的产生HTML控件，这个在很多可视化开发工具里面可以看到，比如Netbeans，XCode都可以用拖放的方式开发UI。我原来很好奇，这些IDE是如何显示这些控件的呢？因为这些控件和IDE本身的控件有一致外观（OS的主题外观），如果使用普通的API来搞，比如&#8221;new JButton()&#8221;来构造UI，感觉有点头晕。 找了下，webkit的代码Source\WebCore\platform\gtk\RenderThemeGtk3.cpp是用来创建Gnome 3外观风格的控件，比如方法paintToggle就是对应单选框。我把里面的代码抽取出来，做了个小例子。费了老大劲，因为压根不知道如何得到context和cairo_t这些上下文信息（或者称为状态机，Functional Language反感的就是这个）。GTK的getting started在这里。 /** this code show how to render a button with gtk 3 Some code copy from webkit/Source/WebCore/platform/gtk */ #include &#60;gtk/gtk.h&#62; static gboolean draw_cb (GtkWidget *widget, cairo_t *cr){ GtkStyleContext *context; context = gtk_widget_get_style_context (widget); gtk_style_context_save(context); gtk_style_context_add_class(context,GTK_STYLE_CLASS_CHECK ); gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE); int i; for(i = 0; i &#60; 20; i++){ gtk_render_check(context, cr, [...]]]></description>
			<content:encoded><![CDATA[<p>看了这位<a href="http://www.grati.org/?p=559">老兄的blog</a>后，我对webkit也有了兴趣。webkit可以根据布局结构来动态的产生HTML控件，这个在很多可视化开发工具里面可以看到，比如Netbeans，XCode都可以用拖放的方式开发UI。我原来很好奇，这些IDE是如何显示这些控件的呢？因为这些控件和IDE本身的控件有一致外观（OS的主题外观），如果使用普通的API来搞，比如&#8221;new JButton()&#8221;来构造UI，感觉有点头晕。</p>
<p>找了下，webkit的代码Source\WebCore\platform\gtk\RenderThemeGtk3.cpp是用来创建Gnome 3外观风格的控件，比如方法paintToggle就是对应单选框。我把里面的代码抽取出来，做了个小例子。费了老大劲，因为压根不知道如何得到context和cairo_t这些上下文信息（或者称为状态机，Functional Language反感的就是这个）。GTK的getting started在<a href="http://developer.gnome.org/gtk3/3.1/gtk-getting-started.html">这里</a>。</p>
<pre class="brush:c">/**
  this code show how to render a button with gtk 3
  Some code copy from webkit/Source/WebCore/platform/gtk
*/

#include &lt;gtk/gtk.h&gt;
static gboolean
draw_cb (GtkWidget *widget, cairo_t *cr){
  GtkStyleContext *context;
  context = gtk_widget_get_style_context (widget);
  gtk_style_context_save(context);
  gtk_style_context_add_class(context,GTK_STYLE_CLASS_CHECK );
  gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE);

  int i;
  for(i = 0; i &lt; 20; i++){
    <strong>gtk_render_check</strong>(context, cr, 10*(i+1), 10*(i+1), 10, 10);
  }
  gtk_style_context_restore(context);
}

int
main (int   argc, char *argv[]){
  GtkWidget *window;
  GtkWidget *ebox;

  gtk_init (&amp;argc, &amp;argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  ebox = gtk_event_box_new ();
  gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), TRUE);
  gtk_container_add (GTK_CONTAINER (window), ebox);
  g_signal_connect_after (ebox, "draw", G_CALLBACK (draw_cb), NULL);
  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

  gtk_widget_show_all (window);

  gtk_main ();

  return 0;
}</pre>
<p><a href="http://fkpwolf.net/WordPress/wp-content/uploads/2011/06/native-check.png"><img class="alignnone size-full wp-image-1021" title="native-check" src="http://fkpwolf.net/WordPress/wp-content/uploads/2011/06/native-check.png" alt="" width="532" height="495" /></a></p>
<p>上面的截图中可以看到checkbox有native的looking（本人非Nike控），不同的是这些控件只是画上去的（没有JButton这种类的层次结构），没有event binding，也就是MVC只有MV。C的一块可能就由浏览器接过来来统一管理，那得遵循HTML Dom Event Model的规范。</p>
<p>这里不考虑CSS的外观。Gnome 3也是用CSS来控制外观，不知道是不是借鉴webkit。Windows的theme我还没有找到在哪里。</p>
<p>从webkit的代码看其已经支持Gtk+-3.0的back-end，不过Chrome还没有推出相应版本，据说是因为他跟Gtk+-2.0绑的太紧，跟Ubuntu走的太近（Ubuntu没有支持gnome 3）。唉，才几年又轻又快的东东就成了个史前巨无霸。</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2011/06/24/how-webkit-render-a-button/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>hotcocoa上手</title>
		<link>http://fkpwolf.net/2011/04/13/hotcocoa-hello-world/</link>
		<comments>http://fkpwolf.net/2011/04/13/hotcocoa-hello-world/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 07:59:02 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http:///?p=956</guid>
		<description><![CDATA[1. 这是什么？ 这是macruby的一个Gem，用来快速开发mac GUI应用。 2. 安装 首先安装macruby，我装的是0.11版本。然后运行sudo macgem install hotcocoa，这个package默认是没有安装的。 3. 运行命令hotcocoa w3，具体参考官方的指南。这里会产生一个和Rails类似的目录。 4.build。 直接编译的话会有问题：Undefined symbols for architecture i386，产生的代码都不能用，很无语。修改gem，在这里/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/gems/hotcocoa-0.5.1/lib/hotcocoa/application_builder.rb里面的 archs = RUBY_ARCH.include?('ppc') ? '-arch ppc' : '-arch x86_64'，把-arch i386去掉，现在的macruby都已经只有64bit的了。 5. 编译没问题的话就可以看到界面了。不过还没完，试试ruby的closure语法，不然妄走一趟。 def start application :name =&#62; "W3" do &#124;app&#124; app.delegate = self window :frame =&#62; [100, 100, 500, 500], :title =&#62; "W3" do &#124;win&#124; title [...]]]></description>
			<content:encoded><![CDATA[<p>1. 这是什么？</p>
<p>这是macruby的一个Gem，用来快速开发mac GUI应用。</p>
<p>2. 安装</p>
<p>首先安装macruby，我装的是0.11版本。然后运行<code>sudo macgem install hotcocoa</code>，这个package默认是没有安装的。</p>
<p>3. 运行命令<code>hotcocoa w3</code>，具体参考官方的<a href="http://www.macruby.org/hotcocoa/getting_started.html">指南</a>。这里会产生一个和Rails类似的目录。</p>
<p>4.build。 直接编译的话会有问题：<code>Undefined symbols for architecture i386</code>，产生的代码都不能用，很无语。修改gem，在这里<code>/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/gems/hotcocoa-0.5.1/lib/hotcocoa/application_builder.rb</code>里面的 <code>archs = RUBY_ARCH.include?('ppc') ? '-arch ppc' : '-arch x86_64'</code>，把<code>-arch i386</code>去掉，现在的macruby都已经只有64bit的了。</p>
<p>5. 编译没问题的话就可以看到界面了。不过还没完，试试ruby的closure语法，不然妄走一趟。</p>
<pre class="brush:ruby">def start
  application :name =&gt; "W3" do |app|
  app.delegate = self
  window :frame =&gt; [100, 100, 500, 500], :title =&gt; "W3" do |win|
    title = label(:text =&gt; "Hello from HotCocoa.", :layout =&gt; {:start =&gt; false})
    win &lt;&lt; title
    name = text_field(:text =&gt; 'you name please')
    win &lt;&lt; name
    win &lt;&lt; button(:title =&gt; 'go') do |b|
       b.on_action do
          title.text = "hi," + name.stringValue
       end
    end
    win.will_close { exit }
end</pre>
<p><a href="http://fkpwolf.net/WordPress/wp-content/uploads/2011/04/macruby-hotcocoa-hell.png"><img class="alignnone size-full wp-image-963" title="macruby-hotcocoa-hell" src="http://fkpwolf.net/WordPress/wp-content/uploads/2011/04/macruby-hotcocoa-hell.png" alt="" width="444" height="154" /></a></p>
<p><a href="http://fkpwolf.net/WordPress/wp-content/uploads/2011/04/macruby-hotcocoa-hell.png"></a>可以看到，比起objective-c来直观多了，想想看objective-c是怎么操作array的，痛苦。而且这里用closure的方法比用Interface Builder来建立button的事件响应要直观、简单的多，不过就要自己手工组织layout了。能否用HTML中的event bind呢？比如这样dojo.connect(&#8216;buttonId&#8217;, &#8220;onclick&#8221;, function(){&#8230;}</p>
<p>这里如果把name.stringValue写成name.text，<strong>运行时</strong>会有异常：in `&#8217;: undefined method `value&#8217; for you name please:NSTextField (NoMethodError)，可以看到这里是直接访问cocoa的foundation的。macruby是基于cocoa的运行库的，比如NSString，但是当运行macrake时有个build的过程，时间有点长，难道macruby直接把ruby代码编译成二进制？打开打包好的app文件（这里为W3.app），</p>
<p><a href="http://fkpwolf.net/WordPress/wp-content/uploads/2011/04/content-structure.png"><img class="alignnone size-full wp-image-959" title="content-structure" src="http://fkpwolf.net/WordPress/wp-content/uploads/2011/04/content-structure.png" alt="" width="184" height="228" /></a></p>
<p>可以看到这里即有二进制，也有rb的源代码。可能这里的二进制文件是编译出来的，所以需要一段时间，二进制文件大概作为程序运行的入口，比如运行ruby加载rb文件，这个和有些exe结尾的可执行java程序相像。只是这样打包后coding-build-test的周期就长了，还是“刷新浏览器”的方式爽啊，当然有firebug这种工具就更爽了。</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2011/04/13/hotcocoa-hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>对delicious和google notebook的比较</title>
		<link>http://fkpwolf.net/2011/03/14/delicious-vs-google-notebook/</link>
		<comments>http://fkpwolf.net/2011/03/14/delicious-vs-google-notebook/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 07:08:08 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http:///?p=920</guid>
		<description><![CDATA[Delicious的强处在于清晰明了的UI设计，统一的风格（web和plug-in界面），背后显然有专业的设计，其他对手则是提供了功能而已。 现在的大多数浏览器都有内置的同步工具，如Firefox wave，Chrome sync，这些强大的工具能同步cookie, form data, history，当然还有bookmark。乍一看，Delicious危已。但是功能越多，内聚性越大，想要独立于浏览器使用也就更难了。chrome同步后能在换台电脑能在firefox上面访问这些bookmark么？手机上呢？所以不要那么悲观，这个小角落对于某些-可能是少数-的人来说则是迫切需要的。 在功能上，delicious的firefox plug-in有个书签列表菜单：“Recently bookmark&#8221;，这是我个人使用很频繁的一个功能，很可惜，在其他bookmark工具中都没有。 Delicious的保存书签的弹出对话框做的也很好，你可方便的选择tag，然后回车保存。 &#160; 一般说弹出对话框是比较恼人的，但是很奇怪，这里的对话框我很喜欢。1）我要保存资料，弹出的对话框是对我的要求的积极反馈；2）UI得体，更重要的是操作快捷。你只需要写入tag（带提示），然后按回车即可完成这项任务，很有成就感。 但是Delicious的plug-in开发速度很慢，这个也要怪现在浏览器的“版本大战”。作为一个独立的书签管理器，跨浏览器是战略要低，不能丢失。 书签这种应用从技术上来说应该不难，大概就是数据库表的添删改查，也出现了很多这种类型的应用，然而这这种“小角落”里面“做的对”的却很少，能像Delicious重视和专一的更少。]]></description>
			<content:encoded><![CDATA[<p>Delicious的强处在于清晰明了的UI设计，统一的风格（web和plug-in界面），背后显然有专业的设计，其他对手则是提供了功能而已。</p>
<p>现在的大多数浏览器都有内置的同步工具，如Firefox wave，Chrome sync，这些强大的工具能同步cookie, form data, history，当然还有bookmark。乍一看，Delicious危已。但是功能越多，内聚性越大，想要独立于浏览器使用也就更难了。chrome同步后能在换台电脑能在firefox上面访问这些bookmark么？手机上呢？所以不要那么悲观，这个小角落对于某些-可能是少数-的人来说则是迫切需要的。</p>
<p>在功能上，delicious的firefox plug-in有个书签列表菜单：“Recently bookmark&#8221;，这是我个人使用很频繁的一个功能，很可惜，在其他bookmark工具中都没有。</p>
<p>Delicious的保存书签的弹出对话框做的也很好，你可方便的选择tag，然后回车保存。</p>
<p>&nbsp;</p>
<p>一般说弹出对话框是比较恼人的，但是很奇怪，这里的对话框我很喜欢。1）我要保存资料，弹出的对话框是对我的要求的积极反馈；2）UI得体，更重要的是操作快捷。你只需要写入tag（带提示），然后按回车即可完成这项任务，很有成就感。</p>
<p>但是Delicious的plug-in开发速度很慢，这个也要怪现在浏览器的“版本大战”。作为一个独立的书签管理器，跨浏览器是战略要低，不能丢失。</p>
<p>书签这种应用从技术上来说应该不难，大概就是数据库表的添删改查，也出现了很多这种类型的应用，然而这这种“小角落”里面“做的对”的却很少，能像Delicious重视和专一的更少。</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2011/03/14/delicious-vs-google-notebook/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Xcode开发感受</title>
		<link>http://fkpwolf.net/2010/10/23/xcode%e5%bc%80%e5%8f%91%e6%84%9f%e5%8f%97/</link>
		<comments>http://fkpwolf.net/2010/10/23/xcode%e5%bc%80%e5%8f%91%e6%84%9f%e5%8f%97/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 04:59:43 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[工具]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http:///?p=833</guid>
		<description><![CDATA[最近写了个iphone的小东西，对xcode也用了段时间，而我原来一直都是java环境下开发，比较起来两者差别很大。 最大差别是IDE对语言的支持。java在eclipse下可以即使的显示语法错误，而objective-c还的build一把才能看到，这个太影响效率。xcode下一个版本改进了llvm后会引入这个feature。eclipse的refactory的功能也很强大，这个在xp开发模式下是必须的，而xcode也没有这个东西。所以objective-c其实拖累了iphone，真是成也萧何，败也萧何。 java在exception情况下会给出详细的调用stack，而xcode的错误信息很少，空指针情况下提示更如天书一样，不清楚这个是语言的局限还是ide的无能。其实界面还是用约束毕竟少的语言，比如弱类型或者动态语言来开发，C和Java过于严肃，很小的错误都会导致程序崩溃，也缺乏灵活性，因为界面是千变万化的，预想好的模型在实际开发中并不能适应所有情况。 UI方面，xcode还是坚持用多窗口的方式，苹果好像对这个情有独钟，一个程序分成多个小的窗口显示，这中非独占式的模式在大显示器下可能有更好的互操作性，因为你可以任意的调整窗口位置，也更节省空间：独占式的会将整个桌面填满。但是有时候则很不方便，比如它的log是单独的窗口显示，大多数情况下这个窗口被代码编辑器（这是个大窗口）挡住，而任务栏上又看不到这个log窗口的图标，这时候想查看log就很不方便。 当然，Interface builder这里就显示了apple的强处，界面非常cool，特别是事件定义时采用拖拉的方式很是直观。Cocoa的界面是独立定义的，然后跟objective-c的类进行绑定（事件绑定和属性绑定）。Swing则是在code中定义界面，纯编程式的，这部分有些IDE可以代劳。 所以最完美的组合是：java + mac的UI库，或者java用javascript代替。当然，已经存在的东西就是不完美的，所以存在的东西就是完美的&#8230;..]]></description>
			<content:encoded><![CDATA[<p>最近写了个iphone的小东西，对xcode也用了段时间，而我原来一直都是java环境下开发，比较起来两者差别很大。</p>
<p>最大差别是IDE对语言的支持。java在eclipse下可以即使的显示语法错误，而objective-c还的build一把才能看到，这个太影响效率。xcode下一个版本改进了llvm后会引入这个feature。eclipse的refactory的功能也很强大，这个在xp开发模式下是必须的，而xcode也没有这个东西。所以objective-c其实拖累了iphone，真是成也萧何，败也萧何。</p>
<p>java在exception情况下会给出详细的调用stack，而xcode的错误信息很少，空指针情况下提示更如天书一样，不清楚这个是语言的局限还是ide的无能。其实界面还是用约束毕竟少的语言，比如弱类型或者动态语言来开发，C和Java过于严肃，很小的错误都会导致程序崩溃，也缺乏灵活性，因为界面是千变万化的，预想好的模型在实际开发中并不能适应所有情况。</p>
<p>UI方面，xcode还是坚持用多窗口的方式，苹果好像对这个情有独钟，一个程序分成多个小的窗口显示，这中非独占式的模式在大显示器下可能有更好的互操作性，因为你可以任意的调整窗口位置，也更节省空间：独占式的会将整个桌面填满。但是有时候则很不方便，比如它的log是单独的窗口显示，大多数情况下这个窗口被代码编辑器（这是个大窗口）挡住，而任务栏上又看不到这个log窗口的图标，这时候想查看log就很不方便。</p>
<p>当然，Interface builder这里就显示了apple的强处，界面非常cool，特别是事件定义时采用拖拉的方式很是直观。Cocoa的界面是独立定义的，然后跟objective-c的类进行绑定（事件绑定和属性绑定）。Swing则是在code中定义界面，纯编程式的，这部分有些IDE可以代劳。</p>
<p>所以最完美的组合是：java + mac的UI库，或者java用javascript代替。当然，已经存在的东西就是不完美的，所以存在的东西就是完美的&#8230;..</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2010/10/23/xcode%e5%bc%80%e5%8f%91%e6%84%9f%e5%8f%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chrome OS的字体</title>
		<link>http://fkpwolf.net/2009/11/23/chrome-os%e7%9a%84%e5%ad%97%e4%bd%93/</link>
		<comments>http://fkpwolf.net/2009/11/23/chrome-os%e7%9a%84%e5%ad%97%e4%bd%93/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 14:19:15 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http:///?p=485</guid>
		<description><![CDATA[我是按照这里的方法BT下载了VirtualBox的镜像，很方便。把玩了会，没啥特别的感觉，virtualbox下运行的慢的很，也没有遇到说3秒钟进系统的奇迹&#8230; 字体，我只感觉Chrome OS下的字体显然较一般的Linux字体有改进，很明显。 显然用的是Droid的字体，跟Anroid下面一样的字体，Google一个字体用了两个位置，便宜啊。还有这个页面是scale放大过的，可以看到图片放大后还是很平滑的，比较而言，Firefox for Linux就必须很烂了。还有Chrome OS下面的freetype不知是否比linux下有调优，因为freetype的作者已经被google招到麾下了。 本来这些都是些细微的调整问题，包括字体，包括图片的缩放，Google只是做了个收集整理的过程。 事在人为啊。]]></description>
			<content:encoded><![CDATA[<p>我是按照<a href="http://yi-it.com/blog/pivot/entry.php?id=135" target="_blank">这里</a>的方法BT下载了VirtualBox的镜像，很方便。把玩了会，没啥特别的感觉，virtualbox下运行的慢的很，也没有遇到说3秒钟进系统的奇迹&#8230;</p>
<p>字体，我只感觉Chrome OS下的字体显然较一般的Linux字体有改进，很明显。</p>
<p><img class="alignnone size-full wp-image-486" title="chrome-font" src="http://fkpwolf.net/WordPress/wp-content/uploads/2009/11/chrome-font.png" alt="chrome-font" width="820" height="694" /></p>
<p>显然用的是Droid的字体，跟Anroid下面一样的字体，Google一个字体用了两个位置，便宜啊。还有这个页面是scale放大过的，可以看到图片放大后还是很平滑的，比较而言，Firefox for Linux就必须很烂了。还有Chrome OS下面的freetype不知是否比linux下有调优，因为freetype的作者<a href="http://www.osnews.com/story/18166" target="_blank">已经被google招到麾下</a>了。</p>
<p><img class="alignnone size-full wp-image-487" title="ubuntu-font" src="http://fkpwolf.net/WordPress/wp-content/uploads/2009/11/ubuntu-font.png" alt="ubuntu-font" width="734" height="490" /></p>
<p>本来这些都是些细微的调整问题，包括字体，包括图片的缩放，Google只是做了个收集整理的过程。</p>
<p>事在人为啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2009/11/23/chrome-os%e7%9a%84%e5%ad%97%e4%bd%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XUL中的UI重用</title>
		<link>http://fkpwolf.net/2006/10/19/xul%e4%b8%ad%e7%9a%84ui%e9%87%8d%e7%94%a8/</link>
		<comments>http://fkpwolf.net/2006/10/19/xul%e4%b8%ad%e7%9a%84ui%e9%87%8d%e7%94%a8/#comments</comments>
		<pubDate>Thu, 19 Oct 2006 12:33:00 +0000</pubDate>
		<dc:creator>Fan Fan</dc:creator>
				<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http:///2006/10/19/xul%e4%b8%ad%e7%9a%84ui%e9%87%8d%e7%94%a8/</guid>
		<description><![CDATA[XUL是Mozilla的界面描述语言,用来解决跨平台的问题。 XUL的Overlays特性令人感兴趣，其描述为： Overlays are XUL files used to describe extra content for the UI. They are a general mechanism for adding UI for additional components, overriding small pieces of a XUL file without having to resupply the whole UI, and reusing particular pieces of the UI. 有点类似OO中的继承和方法重写。 一般来说，页面级的重用是比较困难的。JSF（组件级的重用）或者jsp tag只是重用了页面的一部分，开发起来也是费周折。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mozilla.org/projects/xul/">XUL</a>是Mozilla的界面描述语言,用来解决跨平台的问题。<br />    XUL的<a href="http://developer.mozilla.org/en/docs/Overlay">Overlays</a>特性令人感兴趣，其描述为：<br />    Overlays are XUL files used to describe extra content for the UI. They are a general mechanism for adding UI for additional components, overriding small pieces of a XUL file without having to resupply the whole UI, and reusing particular pieces of the UI.<br />    有点类似OO中的继承和方法重写。<br />    一般来说，页面级的重用是比较困难的。JSF（组件级的重用）或者jsp tag只是重用了页面的一部分，开发起来也是费周折。</p>
]]></content:encoded>
			<wfw:commentRss>http://fkpwolf.net/2006/10/19/xul%e4%b8%ad%e7%9a%84ui%e9%87%8d%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

