写在前面的话:
Sprite HD 是一个怀孕很久终于出世的孩子,所以值得用文字来记录成长过程。
Sprite HD是跨平台的设计师原型创作工具,帮助设计师直接在移动设备上创建原型,并可直接在设备上预览设计成果。
节约了从电脑端设计,然后同步到移动设备上的繁琐过程所花费的时间,大大提高了生产效率,并且可以直接作为usability testing 的工具使用。 Continue reading
写在前面的话:
Sprite HD 是一个怀孕很久终于出世的孩子,所以值得用文字来记录成长过程。
Sprite HD是跨平台的设计师原型创作工具,帮助设计师直接在移动设备上创建原型,并可直接在设备上预览设计成果。
节约了从电脑端设计,然后同步到移动设备上的繁琐过程所花费的时间,大大提高了生产效率,并且可以直接作为usability testing 的工具使用。 Continue reading
如果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职场救生法则》已经升级为加强版了,增加了更多的法则,并加入了一些必要的说明。第一版发出后受到不少朋友的反馈,一些朋友指出文章似乎有点“灰暗”,现实是残酷的,但我们应该以积极阳光的心态来应对,故此本文增加了更多的“阳光”要素,心态应该是第一位的,让我们享受人生吧! Continue reading
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
我做的应用(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
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.
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/
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!
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.
NSString *appurl = [NSString stringWithFormat:@”http://itunes.apple.com/us/app/id%d”,yourappid];
[[UIApplication sharedApplication] openURL:[NSURL urlWithString:appurl]];
相册中的图片需要使用 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];
|