Sprite HD的前生今世

写在前面的话:
Sprite HD 是一个怀孕很久终于出世的孩子,所以值得用文字来记录成长过程。

Sprite HD是跨平台的设计师原型创作工具,帮助设计师直接在移动设备上创建原型,并可直接在设备上预览设计成果。
节约了从电脑端设计,然后同步到移动设备上的繁琐过程所花费的时间,大大提高了生产效率,并且可以直接作为usability testing 的工具使用。 Continue reading

怎样才能100% 虽然之前看过了,今天再转一下

 

如果26个英文字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

那么
Knowledge(知识) K+N+O+W+L+E+D+G+E= 11+14+15+23+12+5+4+7+5=96%

Workhard (努力工作) W+O+R+K+H+A+R+D = 23+15+18+11+8+1+18+4 =98%

也就是说知识和努力工作对我们人生的影响可以达到96%和98%

Luck(好运) L+U+C+K=12+21+3+11=47%

Love(爱情) L+O+V+E=12+15+22+5=54%

看来,这些我们通常认为重要的东西却并没起到最重要的作用。

那么,什么可以决定我们100%的人生呢?

是Money(金钱)吗? M+O+N+E+Y=13+15+14+5+25=72%
看来也不是

是Leadership(领导能力)吗? L+E+A+D+E+R+S+H+I+P=12+5+1+4+5+18+19+9+16 =89%
还不是

金钱,权力也不能完全决定我们的生活。那是什么呢?

其实,真正能使我们生活圆满的东西就在我们自己身上!

ATTITUDE(心态) A+T+T+I+T+U+D+E=1+20+20+9+20+21+4+5=100%

我们对待人生的态度才能够100%的影响我们的生活,或者说能够使我们的生活达到 100%的圆满!

这个确实太牛了!一定要转一下!
用什么样的态度去看待人生,就会得到什么样的人生哦!心态好一切都好!

IT职场求生法则(加强版)——有备无患

IT职场求生法则(加强版)

《IT职场救生法则》已经升级为加强版了,增加了更多的法则,并加入了一些必要的说明。第一版发出后受到不少朋友的反馈,一些朋友指出文章似乎有点“灰暗”,现实是残酷的,但我们应该以积极阳光的心态来应对,故此本文增加了更多的“阳光”要素,心态应该是第一位的,让我们享受人生吧! Continue reading

Windows Phone 8 development on a Mac running OSX and VMWare

Windows Phone 8 development on a Mac running OSX and VMWare, using also the phone emulator:

What is needed is a more recent Mac (MBP Early 2011, i7 in my case, OS X 10.7.5, 16GBytes RAM), VMware Fusion (in my case vers 5), Windows 8 OS (64-bit Pro version in my case), and the Windows Phone 8 SDK (the free Express version in my case).

A couple of configuration changes to the Windows 8 VM configuration are needed otherwise the Windows Phone emulator will not work.

1) Add (or cheek they are present) to .vmx file these rows:

hypervisor.cpuid.v0 = “FALSE”
mce.enable = “TRUE”
vhv.enable = “TRUE”

2) Settings -> CPU and memory -> Advanced: check “Enable hypervisor applications in this virtual machine”

3) Settings -> CPU and memory: make sure 2 Cores (or more?) are assigned to the Virutla machine

4) Settings -> Advanced: Preferred virtualizationn engine: Intel VT-x with EPT

After restarting Win 8 x64 VM, the HyperV system (and e.g. WIndows 8 Phone SKD debugging / Windows Phone Emulation) works perfectly.

I found these instructions from a posting by user JSaa (Credit to him!) at
http://communities.vmware.com/thread/423744?tstart=0

Happy WP8 development on your Mac

推荐HP Connection Manager

这是一款网络管理软件,我经常遇到的问题就是,在不同的地方,网络设置参数不一样,笔记本到一个地方就需要设定一次。现在的操作系统可以帮你简单记住WiFi的SSID,来帮助你实现切换无线网络,可是遇到复杂的环境,比如需要设置代理和VPN的情况下,就没有办法了。

这次推荐的这个小工具解决了这样的问题。废话不多说了直接看图。

在这个软件中,你可以设置多个位置

针对每个位置你可以设定网络代理,VPN和一些其他的东西。

同时还可以设置根据什么条件自动切换位置最后一个辅助功能就是,如果你是有线连接到笔记本了,你同样可以将笔记本作为无线路由器共享你的网络给你手边的无线设备。

[转]1000万应用下载量的非传统营销技巧

Iris Shoor是VisualTao的联合创始人。VisualTao开发了基于云的可让设计师协同编辑的CAD制作软件,后被Autodesk收购,成为移动端的AutoCAD—AutoCAD WS。 Iris Shoor撰文介绍了这款app的营销技巧。

我做的应用(AutoCAD WS)下载量超过了一百万时,第一个浮现在我脑海里的问题是:我最后怎么成了做营销的?我先前是一个易怒的产品经理,可从没有想过能做营销,直到我的App处在生死之间。

我和别人联合创办了一家公司(VisualTao,后被Autodesk收购),为工程师开发CAD B2B应用。应用一发布,我们就按照书中教我们的去做:产品定位,和公关公司合作去接触各种博主(和媒体),但这没什么用。于是我们又试了两到三回,给产品加了些功能,给更多的博主写信,但还是没什么用。

我逐渐认识到要想在成千上万的app里吸引用户注意,营销就不仅是app成功的元素,而且是要素。我们只是一个小团队,营销预算很有限。作为工程师和设计师,我们只能用自己的方式出战。

在接下来的几个月我们抛弃了我们所知道的传统营销手段,开始探索新的创意方式去接触新用户,然后用我们工程师的方式去衡量每一步进展,直到最后。最近这个app即将迎来一千万下载量,很多客户来自于财富500强公司。

下面是在这个过程中对我们帮助很大的非传统营销技巧:

将无聊变有趣

这款应用在我们眼里是最令人兴奋的—它能改变工程师和设计师共同工作的方式。但是,并没有太多媒体分享我们的兴奋。我们被媒体归类为一款小众软件,很难提高覆盖面。

对于这类应用而言第一步就是去承认它确实处在一个很小的细分市场。专业级应用是不会对普通人有吸引力的,于是我们就打算通过创造出很多有趣,古怪甚至是令人动容的内容来跳出我们狭窄的领地。与其推销产品或给产品添功能,还不如试着去逗人们笑,让他们有所感触。

这有个例子:当我们发布Android版本AutoCAD WS时我们决定要利用android用户最喜欢的东西—android小绿机器人。我们做了“Andy工程师”这个产品吉祥物,App宣传视频里也出现很多次Andy的搞怪。那个视频有超过一百万的浏览量,这对于一个CAD专业应用而言是很多的了。这些素材让我们登上了主流的android博客,android粉丝也会向他们身边的设计师介绍这款应用。

收集用户故事和反馈

从第一天起我们就听说了很多关于用户是怎样用这款app的好故事,有人用它来设计主题公园,也有人用它来构建石油钻塔。但每次我们接触那些公司,让他们写故事给我们,通常得到的都是“公司有规定(不能泄露图纸)”或“这对我有什么用”这些推辞。于是我想与其联系这批用户还不如转向那些主动联系我们的用户。

当收到那些有趣公司的用户发来的求助邮件时,我就直接给他们回复电话。没错,想象一下你刚发出邮件,10分钟后就收到了开发者给你的电话。先给用户解决他们的疑问,再问他们平时是怎样使用,这款app是否帮助他们变得更有效率,获得他们的准许后,我就把这些写成故事。不到两周时间我们就有了很多好故事,有设计巴西矿井的,有设计儿童医院的,还有建造音乐厅的。

小贴士:你越早回复电话你越可能得到别人的合作。我有一小时原则:必须在收到邮件的一小时内给用户回电话。

构建你与用户交流的直接通道

每个成功的创业公司也都有它的低谷期,出了表现很差的版本或是一些可怕的bug。而这也正是你要直接和你用户交流的时候。

要求用户用他们的email注册是我做过的最艰难的产品决定。我们在注册过程中丢失了约10%的用户。但这些在后来的意外中都有了回报,有次是服务器故障,有次是云服务中断。在这样的节点,很多用户是不会看你博客说明或是你twitter账户的,他们会直接去app store里给你app评1星!努力经营这么久的4.5/5星排名因为这么几天的技术问题就直接跌落,这可是每个应用开发者的梦魇。而使用邮件和在应用内弹出消息使得我们能直接告知用户所出现的问题。出人意料的是,不仅有很多用户表示理解和支持,我们甚至发现在通知用户恢复服务后,就有一个使用高峰。

本地化不仅仅是语言翻译

不管是收费app还是免费app—移动领域就是看数字说话。每一次下载都很重要,不管它是来自纽约还是来自中国。App本地化是第一步,但我们发现数据中有两倍的增长归功于我们本地化营销。于是我们开始将app store页面中“每个像素的内容”都进行本地化。

仅仅翻译产品描述是不够的—我们希望俄罗斯用户看到屏幕截图上显示的是一个俄罗斯的用户名,巴西用户看到的例图是葡萄牙语(巴西官方语言)的,中国用户看到app里联系人的邮箱是他们常用邮件服务商的。我们在每个国家都有不同的营销方案,用当地的语言发送产品介绍给当地的媒体,给出那个国家的应用下载数据等。小贴士:我们甚至记录每个设备所设置的语言,发给用户对应语言的电子期刊。

营销就是要讲产品的故事。我们为认为正确的事努力探索,并达到了我们想要的结果。成千上万的App正在应用商店里找他们的生存空间,我希望能看到更多的独特营销手段,和讲故事的方式。当然还有下载量,越多越好。

Using the iPad retina display with Adobe Air

Using the iPad retina display with Adobe Air

19th March 2012

Last Friday, the new iPad was launched by Apple, with its new retina display. I did a few tests to try to use the high-resolution retina screen at its maximum resolution from Adobe Air. Here are the results.

The simple option doesn’t work

The first thing to note is that Apple deliberately limited the new retina resolution to Apps built with the iOS 5.1 SDK. This is to avoid incompatibility issues with Apps that were released before the new iPad was available. So apps built with earlier versions of the iOS SDK use pixel doubling and have an effective resolution of 1024×768 pixels, like the iPad 2.By default, Adobe Air compiles with iOS 4.0. I don’t know what’s special about iOS 4.0 that Adobe can distribute this version with Air but not later versions, but that’s the way it is. So, if you compile your Air app the normal way, you will not get retina resolution on the new iPad. Everything will still work fine, but it will use pixel doubling to get the same results as on the iPad 2.

Compiling with iOS 5.1

If you have a Mac, there is a solution. Adobe Air since Air 3.1 includes a build setting to specify the version of the iOS SDK to use. The setting is the platformsdk and you can read more about it on this Adobe blog. If you read through the comments in that post you’ll see that this is only supported when compiling on OSX, at the moment, but Adobe hope to bring it to Windows sometime in the future.So, if you have a Mac, download and install XCode. In the new XCode, the SDK is inside the application package – the filepath is /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/. Now use the playformsdk setting to build against iOS 5.1.

via Using the iPad retina display with Adobe Air.

The test

To test this I built a little app, with just a few lines of code –

package com.sticksports.test
{
  import flash.display.Sprite;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.events.Event;
  import flash.system.Capabilities;
  import flash.text.TextField;

  public class RetinaTest extends Sprite
  {
    public function RetinaTest()
    {
      stage.scaleMode = StageScaleMode.NO_SCALE;
      stage.align = StageAlign.TOP_LEFT;
      addEventListener( Event.ENTER_FRAME, getStats );
    }

    private function getStats( event : Event ) : void
    {
      removeEventListener( Event.ENTER_FRAME, getStats );

      var textField : TextField = new TextField();
      textField.width = stage.stageWidth - 40;
      textField.height = stage.stageHeight - 40;
      textField.x = 20;
      textField.y = 20;
      textField.border = true;
      textField.multiline = true;
      addChild( textField );

      textField.appendText( "Capabilities.screenResolutionX : " + Capabilities.screenResolutionX + "\n" );
      textField.appendText( "Capabilities.screenResolutionY : " + Capabilities.screenResolutionY + "\n" );
      textField.appendText( "Capabilities.screenDPI : " + Capabilities.screenDPI + "\n" );
      textField.appendText( "stage.stageWidth : " + stage.stageWidth + "\n" );
      textField.appendText( "stage.stageHeight : " + stage.stageHeight + "\n" );
      textField.appendText( "stage.fullScreenWidth : " + stage.fullScreenWidth + "\n" );
      textField.appendText( "stage.fullScreenHeight : " + stage.fullScreenHeight + "\n" );    }
  }
}

I didn’t use Flash Builder for my tests because I’m an FDT user, so the apps were built from Ant scripts. First I built the swf in the standard way.

<exec executable="${sdk.home}/bin/amxmlc" failonerror="true" dir="../package">
  <arg line='-source-path ../src'/>
  <arg line='-default-size=960,640'/>
  <arg line='-default-background-color 0xFFFFFF'/>
  <arg line='-default-frame-rate 60'/>
  <arg line='-debug=false'/>
  <arg line='-optimize=true'/>
  <arg line='-swf-version=13'/>
  <arg line='-output RetinaTest.swf'/>
  <arg line='../src/com/sticksports/test/RetinaTest.as'/>
</exec>

I gave the swf a default size to match the iPhone, just to see what Air gave me as the stage size as a result.

The application descriptor file requests the high resolution display, as for the iPhone retina screen.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/3.0">

  <id>com.sticksports.RetinaTest</id>
  <filename>RetinaTest</filename>
  <name>Retina Test</name>
  <versionNumber>0.0.1</versionNumber>
  <versionLabel>v0.0.1</versionLabel>
  <copyright>Stick Sports Ltd.</copyright>

  <initialWindow>
    <content>RetinaTest.swf</content>
    <aspectRatio>portrait</aspectRatio>
    <autoOrients>true</autoOrients>
    <fullScreen>true</fullScreen>
    <renderMode>cpu</renderMode>
    <softKeyboardBehavior>none</softKeyboardBehavior>
    </initialWindow>

  <icon>
    <image29x29>icons/icon_29.png</image29x29>
    <image57x57>icons/icon_57.png</image57x57> 
    <image72x72>icons/icon_72.png</image72x72> 
    <image114x114>icons/icon_114.png</image114x114> 
  </icon>

  <iPhone>
    <InfoAdditions>
      <![CDATA[
        <key>UIDeviceFamily</key>
        <array>
          <string>1</string>
          <string>2</string>
        </array>
        <key>UIStatusBarStyle</key>
        <string>UIStatusBarStyleBlackOpaque</string>
      ]]>
    </InfoAdditions>
    <requestedDisplayResolution>high</requestedDisplayResolution>
  </iPhone>

</application>

I built the ipa twice, using the Air 3.2 release candidate from Adobe Labs. I built it once using the default version of the iPhone SDK (version 4.0) that is bundled with Air.

<exec executable="${sdk.home}/bin/adt" failonerror="true" dir="../package">
  <arg value="-package"/>
  <arg value="-target"/>
  <arg value="ipa-ad-hoc"/>
  <arg value="-provisioning-profile"/>
  <arg value="${ios.provisioning.profile}"/>
  <arg value="-storetype"/>
  <arg value="pkcs12"/>
  <arg value="-keystore"/>
  <arg value="${ios.keystore.file}"/>
  <arg value="-storepass"/>
  <arg value="${ios.keystore.password}"/>
  <arg value="../publish/default/RetinaTest.ipa"/>
  <arg value="../build/RetinaTest-app.xml"/>
  <arg value="RetinaTest.swf"/>
  <arg value="Default.png"/>
  <arg value="icons"/>
</exec>

And once with the iOS 5.1 SDK

<exec executable="${sdk.home}/bin/adt" failonerror="true" dir="../package">
  <arg value="-package"/>
  <arg value="-target"/>
  <arg value="ipa-ad-hoc"/>
  <arg value="-provisioning-profile"/>
  <arg value="${ios.provisioning.profile}"/>
  <arg value="-storetype"/>
  <arg value="pkcs12"/>
  <arg value="-keystore"/>
  <arg value="${ios.keystore.file}"/>
  <arg value="-storepass"/>
  <arg value="${ios.keystore.password}"/>
  <arg value="../publish/5.1/RetinaTest.ipa"/>
  <arg value="../build/RetinaTest-app.xml"/>
  <arg value="RetinaTest.swf"/>
  <arg value="Default.png"/>
  <arg value="icons"/>
  <arg line="-platformsdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/"/>
</exec>

The equivalent command-line script is

adt -package -target ipa-ad-hoc -provisioning-profile YOUR_PROVISIONING_PROFILE -storetype pkcs12 -keystore YOUR_KEYSTORE_FILE -storepass YOUR_KEYSTORE_PASSWORD RetinaTest.ipa RetinaTest-app.xml RetinaTest.swf Default.png icons -platformsdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/

The results

With the default SDK the results are

Capabilities.screenResolutionX : 768
Capabilities.screenResolutionY : 1024
Capabilities.screenDPI : 132
stage.stageWidth : 960
stage.stageHeight : 640
stage.fullScreenWidth : 768
stage.fullScreenHeight : 1024

I was surprised the stageWidth and stageHeight don’t match the screenResolutionX and screenResolutionY, which is why I use the latter in my projects. As Florian mentioned in the comments, you can also use fullScreenWidth and fullScreenHeight, which I added after reading his comment. Aside from that, there’s no surprises here. The results are the same as on the iPad2.

With iOS 5.1 SDK, the results are

Capabilities.screenResolutionX : 1536
Capabilities.screenResolutionY : 2048
Capabilities.screenDPI : 132
stage.stageWidth : 1536
stage.stageHeight : 2048
stage.fullScreenWidth : 1536
stage.fullScreenHeight : 2048

This version uses the full resolution of the retina screen. The text is half the size on screen because the pixel resolution is doubled and the screenResolutionX and screenResolutionY and fullScreenWidth and fullScreenHeight are the correct size for the retina display. This time, surprisingly, the stageWidth and stageHeight did match the screen resolution – all the more reason not to trust them. Also, the screenDPI is incorrect, showing the same value as the iPad 2.

But, most importantly, the project has access to the full retina screen resolution. Hurrah!

Building with Air 3.1

As I said above, I initially used the public beta of Air 3.2 for this test. I reran the test using Air 3.1 and the results were the same, except building with Air 3.1 and iOS 5.1 gave the stageWidth as 1920px and stageHeight as 1280px. All other results were the same as for Air 3.2.

 

iOS获取图片的信息

相册中的图片需要使用 Assets Library Framework 配合获取图片信息

// Get the assets library
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

// Enumerate just the photos and videos group by using ALAssetsGroupSavedPhotos.
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{

// Within the group enumeration block, filter to enumerate just photos.
[group setAssetsFilter:[ALAssetsFilter allPhotos]];

// For this example, we’re only interested in the first item.
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:0]
options:0
usingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop)
{

// The end of the enumeration is signaled by asset == nil.
if (alAsset) {
ALAssetRepresentation *representation = [alAsset defaultRepresentation];
NSDictionary *imageMetadata = [representation metadata];
// Do something interesting with the metadata.
}
}];
}
failureBlock: ^(NSError *error)
{
// Typically you should handle an error more gracefully than this.
NSLog(@”No groups”);
}];

[library release];

[转]AIR开发ios游戏总结

最近开发了一个农场类游戏,游戏不算大,功能还算齐全。
我向大家说一样开发中遇到的问题:
1,尽量使用位图,如果是纯色块的话,可以用矢量。
2,资源和素材最好用外部加载的方式,特别是皮肤,这样可以动态的更新皮肤
3,遮罩的效率不高,如果非要用的话,最好把里面的图片先加载好。因为在移动设备里,外部资源加载消耗很大,可以在游戏刚开始把大部分加载好。
4,字体上是关键,最好选择设备有的字体,不要嵌入字体。嵌入的字体会出现问题,而且效率很低很低,特别是在ipad3和低清设备上面。如果你不知道有什么字体,可以在”越 狱”的ios机子上,用91软件,可以把上面的字体全部弄下来。
5,游戏中只使用一次的东西,可以用到的时候再加载,用完后就卸掉。像每日奖励这种,就可以这样做。
6,我们用AIR3.2打包后,会出现设备crash。用AIR3.1和3.3没有问题。但是3.1有个小问题,ipad3 loading那儿图片会斜一下,不过问题不大。
7,如果图形上面要求不是很高,可以只做两套UI,一套是iphone大小,一套ipad2大小,如果是低清设备,就把ihpone大小基础上缩小一倍,如果是ipad3就在ipad2大小基础上加大一倍。
8,最好把游戏进程和UI动画用不同的两个EnterFrame来控制。这样在一些大的UI弹出窗时,可以先暂停游戏进程。
9,做ios游戏,尽量用itouch来测试游戏。如果能在itouch上面跑得不错,自然在iphone,ipad上面问题就不大。
10,不需要鼠标操作的,要把mouseEnabled设置成false ,如果它的子对象也不需要鼠标事件,要把mouseChildren设置为false。
11,如果对手指触摸精确度要求不是很高,可以只用MouseEvent事件,一是方便测试,二是消耗CPU少。
13,如果要存储本地文件和数据,要把数据存储到File.applicationStorageDirectory下面,一是为了设备兼容性,二是这样软件更新的话,数据还在。
14,如果开发游戏的话,一定要用原生的AS项目,纯AS项目要比flex项目效率高很多。
15,尽可能早的真机测试,能更快地发现问题。
16,现在flash builder4.6及以上版本都能方便地打包ipa,完全可以不用adt命令行。