blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/fastzch/i love programming as my life!zh-cnsat, 08 apr 2023 20:40:51 gmtsat, 08 apr 2023 20:40:51 gmt60hybrid开发资源网站汇总http://www.blogjava.net/fastzch/archive/2014/08/05/416566.htmlrobin's programming worldrobin's programming worldtue, 05 aug 2014 01:45:00 gmthttp://www.blogjava.net/fastzch/archive/2014/08/05/416566.htmlhttp://www.blogjava.net/fastzch/comments/416566.htmlhttp://www.blogjava.net/fastzch/archive/2014/08/05/416566.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/416566.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/416566.html
包含iscroll, infinity wall等




robin's programming world 2014-08-05 09:45
]]>
从 usb 设备启动 surfacehttp://www.blogjava.net/fastzch/archive/2014/04/01/411761.htmlrobin's programming worldrobin's programming worldmon, 31 mar 2014 16:15:00 gmthttp://www.blogjava.net/fastzch/archive/2014/04/01/411761.htmlhttp://www.blogjava.net/fastzch/comments/411761.htmlhttp://www.blogjava.net/fastzch/archive/2014/04/01/411761.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/411761.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/411761.html
当 surface 关闭时从可启动 usb 设备启动
步骤 1:     将可启动 usb 设备连接到 usb 端口。
步骤 2:     按住音量减小 (-) 控制键。
步骤 3:     按下并释放电源按钮。
步骤 4:     当显示 surface 徽标时,释放音量控制键。 surface 将启动 usb 设备上的软件。

当 surface 启用时从可启动 usb 设备启动
步骤 1:     将可启动 usb 设备连接到 usb 端口。
步骤 2:     从屏幕右边缘向左轻扫,然后点击“设置”。
(如果您使用鼠标,请指向屏幕的右上角,将鼠标指针下移并单击“设置”。)
步骤 3:     点击或单击“更改电脑设置”。
步骤 4:     点击或单击“更新和恢复”,然后点击或单击“恢复”。
步骤 5:     在“高级启动”下,点击或单击“立即重新启动”。
步骤 6:     在“选择一个选项”屏幕中,点击或单击“使用设备”。
步骤 7:     在“疑难解答”屏幕中,点击或单击“高级选项”。
步骤 8:     在“高级选项”屏幕中,点击或单击 usb 设备的名称。surface 将重新启动并从 usb 设备启动。

btw, 还是官方文档靠谱,还是google靠谱!!!
原文地址:http://www.microsoft.com/surface/zh-cn/support/storage-files-and-folders/boot-surface-pro-from-usb-recovery-device


robin's programming world 2014-04-01 00:15
]]>
xcode plugins package managerhttp://www.blogjava.net/fastzch/archive/2014/02/05/409533.htmlrobin's programming worldrobin's programming worldtue, 04 feb 2014 18:28:00 gmthttp://www.blogjava.net/fastzch/archive/2014/02/05/409533.htmlhttp://www.blogjava.net/fastzch/comments/409533.htmlhttp://www.blogjava.net/fastzch/archive/2014/02/05/409533.html#feedback1http://www.blogjava.net/fastzch/comments/commentrss/409533.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/409533.htmlxcode plugins package manager
https://github.com/mneorr/alcatraz

通过这个工具,我还装了以下插件:
ajkextendedopening
bbudebuggertuckaway
bbuncrustifyplugin
cocoapods
codepilot
dlautoresizemaskplugin
deriveddata exterminator
fuzzyautocomplete
hostringsense
ksimagenamed
omcolorsense
omquickhelp
pluginconsole
quicklocalization
scxcodeminimap
vvdocumenter-xcode
xcfixin_currentlinehighlighter
xcodeautoclosedebug
xcodeplus delete line

这些插件都是相当的好用呀!!!


robin's programming world 2014-02-05 02:28
]]>
ubuntu环境下apache2与tomcat集成http://www.blogjava.net/fastzch/archive/2014/02/05/409532.htmlrobin's programming worldrobin's programming worldtue, 04 feb 2014 18:21:00 gmthttp://www.blogjava.net/fastzch/archive/2014/02/05/409532.htmlhttp://www.blogjava.net/fastzch/comments/409532.htmlhttp://www.blogjava.net/fastzch/archive/2014/02/05/409532.html#feedback4http://www.blogjava.net/fastzch/comments/commentrss/409532.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/409532.html    apt-get install apache2

重启命令: /etc/init.d/apache2 restart

/etc/apache2/conf.d/charset
这个是网站编码配置,需要将最后行的 #adddefaultcharset utf-8 前面的#去掉,使用utf-8编码,当然也可以把 utf-8改成别的编码。

这个是网站目录配置,想更改网站目录的话,就修改这个,上面的目录的 apache2.conf 里面也有网站目录的
/etc/apache2/sites-available/default


2、 install jk connector.
apt-get install libapache2-mod-jk
so文件会被安装到目录: /usr/lib/apache2/modules 中。
安装完后,在/etc/apache2/mods-enabled下会多出一个jk.load文件,重启apache2后,apache自动装载这个文件以加载mod_jk.


3、修改httpd.conf,一开始它是空的,增加
#server name
servername 127.0.0.1

#jk config
#jkworkersfile /etc/libapache2-mod-jk/workers.properties
jklogfile /var/log/apache2/mod_jk.log
jkloglevel info
jkmount /*.jsp ajp13_worker
jkmount /*/servlet/ ajp13_worker
jkmount /*.do ajp13_worker

4、/etc/apache2/sites-available中增加一个文件,文件名随便.
如我的tomcat,内容如下:

  serveradmin fastzch@gmail.com
  documentroot "/var/www"
  errorlog "/var/log/apache2/ediskmanage_errors.log"
  customlog "/var/log/apache2/ediskmanage_accesses.log" common

  jkmount /servlet/* ajp13_worker
  #让apache支持对servlet传送,用以tomcat解析
  jkmount /*.jsp ajp13_worker
  #让apache支持对jsp传送,用以tomcat解析
  jkmount /*.do ajp13_worker
  #让apache支持对.do传送,用以tomcat解析


5、执行 a2ensite tomcat

6、/etc/init.d/apache2 reload

7、部署应用后重启tomcat即可

robin's programming world 2014-02-05 02:21
]]>
phonegap debug notehttp://www.blogjava.net/fastzch/archive/2014/01/02/408382.htmlrobin's programming worldrobin's programming worldthu, 02 jan 2014 06:17:00 gmthttp://www.blogjava.net/fastzch/archive/2014/01/02/408382.htmlhttp://www.blogjava.net/fastzch/comments/408382.htmlhttp://www.blogjava.net/fastzch/archive/2014/01/02/408382.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/408382.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/408382.html
the following are notes for debug feature:
the "console" is a plugin now, so we need to add it by following command:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git

and then you could use console api now, e.g.:
console.log('onsuccess! contacts.length:'  contacts.length );

you will see logs on output console of xcode or logcat of eclipse.
pls see following screenshots:







robin's programming world 2014-01-02 14:17
]]>
ios app -- whetc 发布http://www.blogjava.net/fastzch/archive/2012/11/10/391148.htmlrobin's programming worldrobin's programming worldsat, 10 nov 2012 12:06:00 gmthttp://www.blogjava.net/fastzch/archive/2012/11/10/391148.htmlhttp://www.blogjava.net/fastzch/comments/391148.htmlhttp://www.blogjava.net/fastzch/archive/2012/11/10/391148.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/391148.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/391148.html主要是为武汉车主提供etc查询的功能。

有需要的朋友,可直接在app store上搜whetc,然后下载。
也可通过下载链接直接下载:https://itunes.apple.com/cn/app/whetc/id558349225

有什么好的建议或问题请留言。谢谢!



robin's programming world 2012-11-10 20:06
]]>
how to uninstall dnscrypt client on machttp://www.blogjava.net/fastzch/archive/2012/09/16/387829.htmlrobin's programming worldrobin's programming worldsun, 16 sep 2012 10:14:00 gmthttp://www.blogjava.net/fastzch/archive/2012/09/16/387829.htmlhttp://www.blogjava.net/fastzch/comments/387829.htmlhttp://www.blogjava.net/fastzch/archive/2012/09/16/387829.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/387829.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/387829.htmlhttp://shared.opendns.com/dnscrypt/packages/osx-client/
下载  


robin's programming world 2012-09-16 18:14
]]>
首个ios app终于提交了http://www.blogjava.net/fastzch/archive/2012/09/03/386856.htmlrobin's programming worldrobin's programming worldmon, 03 sep 2012 03:45:00 gmthttp://www.blogjava.net/fastzch/archive/2012/09/03/386856.htmlhttp://www.blogjava.net/fastzch/comments/386856.htmlhttp://www.blogjava.net/fastzch/archive/2012/09/03/386856.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/386856.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/386856.html至于是个什么应用,我想可能还得先保密一两周什么的,这得看apple的速度了,哈哈...

有兴趣的可以猜猜看。


robin's programming world 2012-09-03 11:45
]]>
xp iis出现the specified module could not be found解决方法http://www.blogjava.net/fastzch/archive/2012/07/03/382092.htmlrobin's programming worldrobin's programming worldtue, 03 jul 2012 07:09:00 gmthttp://www.blogjava.net/fastzch/archive/2012/07/03/382092.htmlhttp://www.blogjava.net/fastzch/comments/382092.htmlhttp://www.blogjava.net/fastzch/archive/2012/07/03/382092.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/382092.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/382092.html

robin's programming world 2012-07-03 15:09
]]>
open mac ftp serverhttp://www.blogjava.net/fastzch/archive/2012/06/30/381890.htmlrobin's programming worldrobin's programming worldsat, 30 jun 2012 15:15:00 gmthttp://www.blogjava.net/fastzch/archive/2012/06/30/381890.htmlhttp://www.blogjava.net/fastzch/comments/381890.htmlhttp://www.blogjava.net/fastzch/archive/2012/06/30/381890.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/381890.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/381890.htmlwhile this hint will work as stated, it's pretty much incorrect usage of launchctl for the purpose of the hint.

launchctl load...loads the ftp service into launchd's database of services. when you do an unload, you are telling launchd to not manage it anymore.

so a better way to do this--probably the proper way--is to first issue the command to load the service:

sudo launchctl load -w /system/library/launchdaemons/ftp.plist

then, if you'd like to stop ftp, issue this command:

sudo launchctl stop com.apple.ftpd

and if you decide you'd like to bring it back up, use this command:

sudo launchctl start com.apple.ftpd

if you'd like for launchd to forget about ftp, that is when you would run this:

sudo launchctl unload /system/library/launchdaemons/ftp.plist

the hint as-is will work, but seems a little counter-productive to make launchd remember and forget about ftp all the time.



robin's programming world 2012-06-30 23:15
]]>
spring 3 mvc and json examplehttp://www.blogjava.net/fastzch/archive/2012/06/04/379962.htmlrobin's programming worldrobin's programming worldmon, 04 jun 2012 15:06:00 gmthttp://www.blogjava.net/fastzch/archive/2012/06/04/379962.htmlhttp://www.blogjava.net/fastzch/comments/379962.htmlhttp://www.blogjava.net/fastzch/archive/2012/06/04/379962.html#feedback1http://www.blogjava.net/fastzch/comments/commentrss/379962.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/379962.html原文地址:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/


published: july 28, 2011 , updated: july 27, 2011 , author: mkyong

 

in spring 3, you can enable “mvc:annotation-driven” to support object conversion to/from json format, if jackson json processor is existed on the project classpath.

in this tutorial, we show you how to output json data from spring mvc.

technologies used :

spring 3.0.5.release
jackson 1.7.1
jdk 1.6
eclipse 3.6
maven 3
1. project dependencies

to use json in spring mvc, you need to include jackson dependency.

   
        3.0.5.release
   

 
   
 
       
       
            org.codehaus.jackson
            jackson-mapper-asl
            1.7.1
       

 
       
       
            org.springframework
            spring-core
            ${spring.version}
       

 
       
            org.springframework
            spring-web
            ${spring.version}
       

 
       
            org.springframework
            spring-webmvc
            ${spring.version}
       

 
   


 
2. model

a simple pojo, later convert this object into json output.

package com.mkyong.common.model;
 
public class shop {
 
    string name;
    string staffname[];
 
    //getter and setter methods
 
}

 
3. controller

add “@responsebody” in the return value, no much detail in the spring documentation.

as i know, when spring see

jackson library existed on classpath
“mvc:annotation-driven” is enabled
return method annotated with @responsebody
it will handle the json conversion automatically.

package com.mkyong.common.controller;
 
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.pathvariable;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.bind.annotation.responsebody;
import com.mkyong.common.model.shop;
 
@controller
@requestmapping("/kfc/brands")
public class jsoncontroller {
 
    @requestmapping(value="{name}", method = requestmethod.get)
    public @responsebody shop getshopinjson(@pathvariable string name) {
 
        shop shop = new shop();
        shop.setname(name);
        shop.setstaffname(new string[]{"mkyong1", "mkyong2"});
 
        return shop;
 
    }
 
}
4. mvc:annotation-driven

enable “mvc:annotation-driven” in your spring configuration xml file.

    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
    xsi:schemalocation="
        http://www.springframework.org/schema/beans    
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
   
 
   
 

5. demo

url : http://localhost:8080/springmvc/rest/kfc/brands/kfc-kampar


download source code

download it – springmvc-json-example.zip (7 kb)
references

mvc-annotation-driven documentation
high-performance json processor
spring mvc and xml example


robin's programming world 2012-06-04 23:06
]]>
mongodb install notes on mac:http://www.blogjava.net/fastzch/archive/2012/06/03/379837.htmlrobin's programming worldrobin's programming worldsat, 02 jun 2012 17:15:00 gmthttp://www.blogjava.net/fastzch/archive/2012/06/03/379837.htmlhttp://www.blogjava.net/fastzch/comments/379837.htmlhttp://www.blogjava.net/fastzch/archive/2012/06/03/379837.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/379837.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/379837.htmlreference page: http://docs.mongodb.org/master/tutorial/install-mongodb-on-os-x/

1, install brew, if it is exist, skip this step.
reference page:  http://mxcl.github.com/homebrew/
execute the following command:
#/usr/bin/ruby -e "$(/usr/bin/curl -fssl https://raw.github.com/mxcl/homebrew/master/library/contributions/install_homebrew.rb)"

2, install mongodb:
#brew update
#brew install mongodb

3, use mondod command to startup mongodb
#nohup mongod &

4, enter mongo shell for testing:
#mongo

mongodb shell version: 2.0.5
connecting to: test
> db.test.save({a:1})
> db.test.find()
{ "_id" : objectid("4fca4824293f5115fa740813"), "a" : 1 }

5, gui client recommendations:

mongoexplorer
mongohub

6, mongodb has provided a web base management inerface:
http://localhost:28017/

7, export and import:
$ mongodump -h test.xxxx.com:52000 -d dataname -o /home/aa/dev/mongodb/data

mongodump mongo导出数据库命令 mongodump --help 可以查看该命令下所有的帮助

-h 导出源
-d 要导出的数据库名称
-o 数据库要导出的位置

在终端滚过n行之后,数据库导出完成,可以去/home/aa/dev/mongodb/data 目录下查看导出的文件,bson格式的(我导出后没有马上就看到文件,等了一会才出现的,原因不明)

然后数据库恢复使用:mongorestore 命令

$ mongorestore -d cmsdev  /home/xx/dev/mongodb/data/cmsdev

-d 使用的数据库名称
后面直接加你刚才导出的目录,这样是直接恢复所有表

如果-c 是恢复一个表


robin's programming world 2012-06-03 01:15
]]>
永久恢复联通 iphone4 的 youtubehttp://www.blogjava.net/fastzch/archive/2012/01/17/368638.htmlrobin's programming worldrobin's programming worldtue, 17 jan 2012 02:43:00 gmthttp://www.blogjava.net/fastzch/archive/2012/01/17/368638.htmlhttp://www.blogjava.net/fastzch/comments/368638.htmlhttp://www.blogjava.net/fastzch/archive/2012/01/17/368638.html#feedback2http://www.blogjava.net/fastzch/comments/commentrss/368638.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/368638.html

原文地址: http://www.inanu.net/post/314.html
ios 5.0.1 亲测


永久恢复联通 iphone4 的 youtube

作者:  日期: 2011-05-18

在有 g.f.w. “保护”下的天朝网络,联通竟然还阉割掉了 iphone4 的 youtube 应用,真是断子绝孙啊!不甘心,一定要把 youtube 找回来!

在网上看了很关于恢复联通 iphone4 youtube 的方法,总结下大致就 2 种方法:
1. 利用sbsettings恢复;(我测试是没有效果的)
2. 在 safari 上访问 m.youtube.com 之后挂个主屏幕的标签;(图标太恶心)

下面终极恢复方法来了:

  • 该方法只适用于联通 iphone4;
  • iphone4 必须已经越狱,如果不想越狱的,请使用上面的方法 2;
  • 该方法适用于所有的 ios 固件版本;

1. 将 iphone4 连接至 i-funbox,并进入到 //applications/youtube.app 目录;

2. 将目录中的 info.plist 文件复制到你的电脑上(做个备份,以防万一);

3. 将下面的代码复制粘贴到一个文件中,并命名为 info.plist;

4. 将新建的 info.plist 复制到 iphone4 中的 youtube.app 目录,覆盖原文件;

5. 重启 iphone4;

hoho! 熟悉的 youtube 图标回来啦!


xml version="1.0" encoding="utf-8"?>
doctype plist public "-//apple computer//dtd plist 1.0//en" "http://www.apple.com/dtds/propertylist-1.0.dtd">
<plist version="1.0" converted_by="i-funbox.com">
<dict> 
    <key>dtxcodekey>
        <string>0324string>
        <key>dtsdknamekey>
        <string>iphoneos4.1.internalstring>
        <key>cfbundlenamekey>
    <string>youtubestring>
    <key>uiapplicationexitsonsuspendkey>
        <true />
    <key>cfbundledevelopmentregionkey>
    <string>englishstring>
    <key>cfbundleversionkey>
    <string>1.0string>
    <key>dtplatformnamekey>
    <string>iphoneosstring>
    <key>cfbundlepackagetypekey>
    <string>applstring>
    <key>cfbundlesupportedplatformskey>
    <array>
        <string>iphoneosstring>
    array>
    <key>sbusesnetworkkey>
    <integer>3integer>
    <key>cfbundleinfodictionaryversionkey>
    <string>6.0string>
    <key>cfbundleexecutablekey>
    <string>youtubestring>
    <key>dtcompilerkey>
    <string>4.2string>
    <key>sbmatchingapplicationgenreskey>
    <array>
        <string>entertainmentstring>
        <string>social networkingstring>
    array>
    <key>cfbundleurltypeskey>
    <array>
        <dict>
            <key>cfbundleurlnamekey>
            <string>youtube internal urlstring>
            <key>cfbundleurlschemeskey>
            <array>
                <string>youtubestring>
            array>
        dict>
 
    array>
    <key>cfbundleidentifierkey>
    <string>com.apple.youtubestring>
    <key>cfbundleresourcespecificationkey>
    <string>resourcerules.pliststring>
    <key>dtplatformversionkey>
    <string>4.1 gmstring>
        <key>cfbundleiconfileskey>
        <array>
               <string>icon-72.pngstring>
               <string>icon.pngstring>
               <string>icon@2x.pngstring>
        array>
        <key>cfbundledisplaynamekey>
        <string>youtubestring>
    <key>cfbundlesignaturekey>
    <string>????string>
    <key>cfbundledisplaynamekey>
    <string>youtubestring>
    <key>uisupportedinterfaceorientationskey>
    <array>
        <string>uiinterfaceorientationportraitstring>
        <string>uiinterfaceorientationportraitupsidedownstring>
        <string>uiinterfaceorientationlandscapeleftstring>
        <string>uiinterfaceorientationlandscaperightstring>
    array>
    <key>minimumosversionkey>
    <string>4.1string>
    <key>uidevicefamilykey>
    <array>
        <integer>1integer>
        <integer>2integer>
    array>
dict>
plist>



robin's programming world 2012-01-17 10:43
]]>
[转]查找 exc_bad_access 问题根源的方法http://www.blogjava.net/fastzch/archive/2012/01/05/367925.htmlrobin's programming worldrobin's programming worldthu, 05 jan 2012 08:18:00 gmthttp://www.blogjava.net/fastzch/archive/2012/01/05/367925.htmlhttp://www.blogjava.net/fastzch/comments/367925.htmlhttp://www.blogjava.net/fastzch/archive/2012/01/05/367925.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/367925.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/367925.html原文地址: http://www.cocoachina.com/macdev/objc/2011/0219/2661.html

写程序遇到 bug 并不可怕,大部分的问题,通过简单的 log 或者 代码分析并不难找到原因所在。但是在 objective-c 编程中遇到 exc_bad_access 问题的时候,通过简单常规的手段很难发现问题。

    写程序遇到 bug 并不可怕,大部分的问题,通过简单的 log 或者 代码分析并不难找到原因所在。但是在 objective-c 编程中遇到 exc_bad_access 问题的时候,通过简单常规的手段很难发现问题。这篇文章,给大家介绍一个常用的查找 exc_bad_access 问题根源的方法。

    首先说一下 exc_bad_access 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。举一个简单的例子来说明吧,首先看一段java代码:

public class test{
        public static void main(string[] args){
                string s = “this is a test string”;
                s = s.substring(s.indexof(“a”),(s.length()));
                system.out.println(s);
                
        }
}

    这种写法在java中很常见也很普遍,这不会产生任何问题。但是到了 objective-c 中,就会出事,考虑这个程序:

#import

int main (int argc, const char * argv[]) {
nsautoreleasepool * pool = [[nsautoreleasepool alloc] init];
        nsstring* s = [[nsstring alloc]initwithstring:@”this is a test string”];
        s = [s substringfromindex:[s rangeofstring:@"a"].location];//内存泄露
        [s release];//错误释放
[pool drain];//exc_bad_access
return 0;
}


    这个例子当然狠容易的看出问题所在,如果这段代码包含在一个很大的逻辑中,确实容易被忽略。objective-c 这段代码有三个致命问题:1、内存泄露;2、错误释放;3、造成 exc_bad_access 错误。

    1, nsstring* s = [[nsstring alloc]initwithstring:@”this is a test string”]; 创建了一个 nsstring object,随后的 s = [s substringfromindex:[s rangeofstring:@"a"].location]; 执行后,导致创建的对象引用消失,直接造成内存泄露。

    2,错误释放。[s release]; 这个问题,原因之一是一个逻辑错误,以为 s 还是我们最初创建的那个 nsstring 对象。第二是因为从 substringfromindex:(nsuinteger i) 这个方法返回的 nsstring 对象,并不需要我们来释放,它其实是一个被 substringfromindex 方法标记为 autorelease 的对象。如果我们强行的释放了它,那么会造成 exc_bad_access 问题。

    3, exc_bad_access。由于 s 指向的 nsstring 对象被标记为 autorelease, 则在 nsautoreleasepool 中已有记录。但是由于我们在前面错误的释放了该对象,则当 [pool drain] 的时候,nsautoreleasepool 又一次的对它记录的 s 对象调用了 release 方法,但这个时候 s 已经被释放不复存在,则直接导致了 exc_bad_access问题。

    那么,知道了 exc_bad_access 的诱因之一后,如何快速高效的定位问题?

1: 为工程运行时加入 nszombieenabled 环境变量,并设为启用,则在 exc_bad_access 发生时,xcode 的 console 会打印出问题描述。

首先双击 xcode 工程中,executables 下的 可执行模组,

在弹出窗口中,variables to be set in the environment,添加 nszombieenabled,并设定为 yes,点击选中复选框启用此变量。

    这样,运行上述 objective-c 时会看到控制台输出:untitled[3646:a0f] *** -[cfstring release]: message sent to deallocated instance 0x10010d340

    这条消息对于定位问题有很好的提示作用。但是很多时候,只有这条提示是不够的,我们需要更多的提示来帮助定位问题,这时候再加入 mallocstacklogging 来启用malloc记录。


    当错误发生后,在终端执行:

malloc_history ${app_pid} ${object_instance_addr}

    则会获得相应的 malloc 历史记录,比如对于上一个控制台输出

untitled[3646:a0f] *** -[cfstring release]: message sent to deallocated instance 0x10010d340

    则我们可以在终端执行,结果如下:

buick-wongs-macbook-pro:downloads buick$ malloc_history 3646 0x10010d340
malloc_history report version: 2.0
process: untitled [3646]
path: /users/buick/desktop/untitled/build/debug/untitled
load address: 0×100000000
identifier: untitled
version: ??? (???)
code type: x86-64 (native)
parent process: gdb-i386-apple-darwin [3638]

date/time: 2011-02-01 15:07:04.181 0800
os version: mac os x 10.6.6 (10j567)
report version: 6

alloc 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | [nsstring initialize] | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | nxcreatemaptablefromzone | malloc_zone_malloc
—-
free 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | _finishinitializing | free

alloc 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | -[nsplaceholderstring initwithstring:] | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | _class_initialize | [nsmutablestring initialize] | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | nxcreatemaptablefromzone | malloc_zone_malloc
—-
free 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | -[nsplaceholderstring initwithstring:] | objc_msgsend | lookupmethod | prepareformethodlookup | _class_initialize | _class_initialize | _finishinitializing | free

alloc 0x10010d340-0x10010d35f [size=32]: thread_7fff70118ca0 |start | main | -[nscfstring substringwithrange:] | cfstringcreatewithsubstring | __cfstringcreateimmutablefunnel3 | _cfruntimecreateinstance | malloc_zone_malloc

    这样就可以很快的定位出问题的代码片段了,注意输出的最后一行,,,这行虽然不是问题的最终原因,但是离问题点已经很近了,随着它找下去,八成就会找到问题。



robin's programming world 2012-01-05 16:18
]]>
[copy]创业公司应该如何招人?http://www.blogjava.net/fastzch/archive/2011/12/31/367620.htmlrobin's programming worldrobin's programming worldsat, 31 dec 2011 02:24:00 gmthttp://www.blogjava.net/fastzch/archive/2011/12/31/367620.htmlhttp://www.blogjava.net/fastzch/comments/367620.htmlhttp://www.blogjava.net/fastzch/archive/2011/12/31/367620.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/367620.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/367620.html

创业公司应该如何招人?

 ,知乎 001 号员工

374 票,来自 金错刀, zx, 程非 
其实从 08 年到现在,我一直想这事能不能有点窍门,或者是实用的方法,结论是几乎没有。

我用过的大家都用的方法:

  • 在水木上发贴子(有点效果)
  • 在蓝色理想上发贴子(无效)
  • 在技术邮件组里发贴子(无效)
  • 买 51job/智联 最便宜的服务(有点效果)
  • 给所有可以想到的人打电话,请他们推荐(无效)
  • 给所有和你讨论过创业,喝过点小酒的人打电话(无效)
  • 约前同事私下谈(有效)

我用过的大家可能没有用的方法:

  • 上 twitter,看 xxx 的 follower,一个一个看,看他们的 twitter,博客,google reader 分享,想办法搞到邮件,联系,半夜电话骚扰。
  • 上豆瓣,前端后端挑几本重量级的书,去找想看,看过,正在看这本书的人,一个一个看,看他们的活动,博客,google reader 分享,想办法搞到邮件,联系,半夜电话骚扰。
  • 找同事,问他们都看什么技术博客,想办法搞到邮件,联系,半夜电话骚扰。

谈几点体会:

不要太指望周围的人

从社招和校园招聘筛选初级人才的方法不适合创业公司,所以创业者只能靠自己去当猎头,从你周围的人,同学,朋友,和接触过的公司员工开始。

这是事实,也是陷阱。周围的人在能力上恰好满足创业需求的可能极低,人情债又超高,对方其实很勉强,但你却臆想他完全胜任,动之以情拉入伙,结果就是撑不了多久,单纯靠交情为纽带,很快就会透支得一干二净。

别以为人人都想创业

我在招人的过程中遇到过很多很聪明的人,也遇到过很多独特的人,但到了最后一刻,他们会犹豫,把创业视为机会者,会自己鼓励自己,但问题是太多的人实际上都只看到了创业风险的一面,选择时会倾向于规避风险。

还有,即使是有能力的心有梦想者,也会有很多的实际情况,为知乎招人时,有人家里有重病患者,无法从事需要加班的工作,有人无法换城市,有人自由习惯了,有时候,他们和你通电话,只是想知道你正在做的事情。


robin's programming world 2011-12-31 10:24
]]>
[转]自定义uitableviewhttp://www.blogjava.net/fastzch/archive/2011/12/29/367465.htmlrobin's programming worldrobin's programming worldthu, 29 dec 2011 01:12:00 gmthttp://www.blogjava.net/fastzch/archive/2011/12/29/367465.htmlhttp://www.blogjava.net/fastzch/comments/367465.htmlhttp://www.blogjava.net/fastzch/archive/2011/12/29/367465.html#feedback1http://www.blogjava.net/fastzch/comments/commentrss/367465.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/367465.html
原文地址: http://blog.sina.com.cn/s/blog_7e3132ca0100wyls.html
在xcode对应头文件中修改该类所继承的父类:
@interface tableviewcontroller:uiviewcontroller
{
}
在对应的.m文件中添加如下代码:
@implementation tableviewcontroller
{
uitableview *tableview = [[uitableview alloc]initwithframe:cgrectmake(0,0,320,460) style:uitableviewstyleplain];
tableview.datasource = self;
tableview.delegate = self;
[self.view addsubview:tableview];
}
这样就在view上添加了一个tableview,但其样式是默认的,其中的内容也是空白的,而且此时是无法运行的,因为在头文件中添加了uitableviewdatasource和uitableviewdelegate两个类,所以必须设置一些自定义tableview样式的方法,下面列举了一些相关的方法:
设置cell高度:
-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath
设置sectionheader高度:
-(cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section
设置sectionfooter高度:
-(cgfloat)tableview:(uitableview *)tableview heightforfooterinsection:(nsinteger)section
设置section数目:
-(nsinteger)numberofsectionsintableview:(uitableview *)tableview
 
设置sectionheader内容:
-(nsstring *)tableview:(uitableview *)tableview titleforheaderinsection:(nsinteger)section{
设置各个section中的cell个数: 
-(nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section
设置cell内容: 
-(uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath
 
设置cell行缩进量:
-(nsinteger)tableview:(uitableview *)tableview indentationlevelforrowatindexpath:(nsindexpath *)indexpath
设置cell被选中响应前动作(例如:可用以判断选中的cell,来阻止其响应)
-(nsindexpath *)tableview:(uitableview *)tableview willselectrowatindexpath:(nsindexpath *)indexpath
设置cell选中触发响应:
-(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath


robin's programming world 2011-12-29 09:12
]]>
【转】xcode分析crashlog的方法http://www.blogjava.net/fastzch/archive/2011/12/28/367403.htmlrobin's programming worldrobin's programming worldwed, 28 dec 2011 04:24:00 gmthttp://www.blogjava.net/fastzch/archive/2011/12/28/367403.htmlhttp://www.blogjava.net/fastzch/comments/367403.htmlhttp://www.blogjava.net/fastzch/archive/2011/12/28/367403.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/367403.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/367403.html 

原文地址:

bug是永远伴随着程序员们的东西,各种各样的情况造成程序crash掉也是家常便饭。windows下的很多大型软件在崩溃的时候,都会弹出提示框,询问用户是否将crash的信息发送到软件厂商,以供软件开发商debug。app store中的软件也有这个功能,用户在使用软件的时候,如果程序崩溃,错误信息会发送到apple的服务器中,软件的开发者们可以很方便在后台获得自己程序的crash log,供自己调试。

但随之而来的问题是,我们收到的程序崩溃调试信息多半是汇编语言一样的堆栈代码,同时这些信息并不是在我们debug的时候产生,所以看到这一串crash log的天书,常常无可奈何。xcode很好的解决了这一问题,它所提供的orgainzer分析器加上symbolicatecrash,可以分析二进制文件以及源代码和crashlog之间的连接,直接找出源程序中出错的代码行。方法网上到处是,本文不讨论。

但是如果使用symbolicatecrash无法定位到出错的代码行的话,怎么整呢?有一个办法,如下:

首先查看crash log中的崩溃线程,假如是这样的:

thread 0 crashed:
0   libobjc.a.dylib               0x00003ec0 objc_msgsend 24
1   myapp               0x000036d2 0×1000 9938

我们得到了用户发生崩溃情况的内存地址:0x000036d2

然后回到我们应用程序的build目录,目录下一定要包含myapp.app 和myapp.app.dsym两个文件。

在控制台使用dwarfdump命令,解析出内存地址,如: 

dwarfdump –lookup 0x000036d2 –arch armv6 myapp.app.dsym

输出信息如下:

直接定位到代码的出错行,cool!



robin's programming world 2011-12-28 12:24
]]>
[转] objective-c内存管理教程和原理剖析口诀与范式http://www.blogjava.net/fastzch/archive/2011/12/01/365258.htmlrobin's programming worldrobin's programming worldthu, 01 dec 2011 01:25:00 gmthttp://www.blogjava.net/fastzch/archive/2011/12/01/365258.htmlhttp://www.blogjava.net/fastzch/comments/365258.htmlhttp://www.blogjava.net/fastzch/archive/2011/12/01/365258.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/365258.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/365258.html
posted on 2010-03-08 00:35  阅读(2331)    

凯发k8网页登录的版权声明

此文凯发k8网页登录的版权归作者vince yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接,且必须包含此凯发k8网页登录的版权声明的完整内容。

 

版本 1.1 发表于2010-03-08

 

 口诀与范式

1           口诀。

1.1          谁创建,谁释放(类似于“谁污染,谁治理”)。如果你通过allocnewcopy来创建一个对象,那么你必须调用releaseautorelease。换句话说,不是你创建的,就不用你去释放。
例如,你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用releaseautorelease。如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease,那么你需要在这个类的dealloc方法中调用release;如果调用了autorelease,那么在dealloc方法中什么都不需要做。

1.2          除了allocnewcopy之外的方法创建的对象都被声明了autorelease

1.3          retain,谁release。只要你调用了retain,无论这个对象是如何生成的,你都要调用release。有时候你的代码中明明没有retain,可是系统会在默认实现中加入retain。不知道为什么苹果公司的文档没有强调这个非常重要的一点,请参考范式2.7和第三章。

2           范式。
范式就是模板,就是依葫芦画瓢。由于不同人有不同的理解和习惯,我总结的范式不一定适合所有人,但我能保证照着这样做不会出问题。

2.1          创建一个对象。

classa *obj1 = [[classa alloc] init];

2.2          创建一个autorelease的对象。

classa *obj1 = [[[classa alloc] init] autorelease];

2.3          release一个对象后,立即把指针清空。(顺便说一句,release一个空指针是合法的,但不会发生任何事情)

[obj1 release];

obj1 = nil;

2.4          指针赋值给另一个指针。

classa *obj2 = obj1;

[obj2 retain];

//do something

[obj2 release];

obj2 = nil;

2.5          在一个函数中创建并返回对象,需要把这个对象设置为autorelease

classa *func1()

{

  classa *obj = [[[classa alloc]init]autorelease];

  return obj;

}

2.6          在子类的dealloc方法中调用基类的dealloc方法

-(void) dealloc

{

         

         [super dealloc];

}

2.7          在一个class中创建和使用property

2.7.1     声明一个成员变量。

classb *objb;

2.7.2     声明property,加上retain参数。

@property (retain) classb* objb;

2.7.3     定义property。(property的默认实现请看第三章)

@synthesize objb;

2.7.4     除了dealloc方法以外,始终用.操作符的方式来调用property

self.objb 或者obja.objb

2.7.5     dealloc方法中release这个成员变量。

[objb release];

示例代码如下(详细代码请参考附件中的memman-property.m,你需要特别留意对象是在何时被销毁的。):

@interface classa : nsobject

{

         classb* objb;

}

 

@property (retain) classb* objb;

@end

 

@implementation classa

@synthesize objb;

-(void) dealloc

{

         [objb release];

         [super dealloc];

}

@end

2.7.6     给这个property赋值时,有手动releaseautorelease两种方式。

void funcnoautorelease()

{

         classb *objb1 = [[classb alloc]init];

         classa *obja = [[classa alloc]init];

         obja.objb = objb1;

         [objb1 release];

         [obja release];

}

 

void funcautorelease()

{

         classb *objb1 = [[[classb alloc]init] autorelease];

         classa *obja = [[[classa alloc]init] autorelease];

         obja.objb = objb1;

}

 

 

示例代码文件链接:

@import ;@import url(/uploads/css/css/cuteeditor.css);

robin's programming world 2011-12-01 09:25
]]>
mac上查看adobe air的版本http://www.blogjava.net/fastzch/archive/2011/10/09/360246.htmlrobin's programming worldrobin's programming worldsun, 09 oct 2011 01:19:00 gmthttp://www.blogjava.net/fastzch/archive/2011/10/09/360246.htmlhttp://www.blogjava.net/fastzch/comments/360246.htmlhttp://www.blogjava.net/fastzch/archive/2011/10/09/360246.html#feedback0http://www.blogjava.net/fastzch/comments/commentrss/360246.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/360246.htmlmac上看个adobe air的版本没想到如此复杂,备忘一下:

mac os x

  • open the /library/frameworks/adobe air.framework/versions/1.0/resources/info.plist text file and locate the cfbundleversionentry. the corresponding string entry represents the version of air, for example: 1.5.3.9130 
原文地址:
@import ;@import url(/uploads/css/css/cuteeditor.css);

robin's programming world 2011-10-09 09:19
]]>
android media player 深入观察http://www.blogjava.net/fastzch/archive/2011/08/06/355906.htmlrobin's programming worldrobin's programming worldsat, 06 aug 2011 00:36:00 gmthttp://www.blogjava.net/fastzch/archive/2011/08/06/355906.htmlhttp://www.blogjava.net/fastzch/comments/355906.htmlhttp://www.blogjava.net/fastzch/archive/2011/08/06/355906.html#feedback1http://www.blogjava.net/fastzch/comments/commentrss/355906.htmlhttp://www.blogjava.net/fastzch/services/trackbacks/355906.html    a. open core,stagefright等agent不支持同时存在join stereo 和 stereo两种类型的音乐数据,否则抛出 oncompeletion 事件。
    b. quicktime支持得很好,没问题。

2,media player用流数据的话,如果超过5秒种没有任何数据写入,便会抛出broken pipe异常,这个也是很让人费解的,在网络不好时,常常超过5秒得不到数据。

3,android 2.3.3中,低于128k的音乐数据需要很长时间prepare,如果是一个16k的音乐数据,需要超过120秒,据观察,至少需要 250,000 bytes以上数据才能使其prepared. 或许这是为了更好的播放体验在考虑,但是有时候似乎适得其反。

4,android 2.2中,低于56k数据的音乐,用流播放时,getcurrentposition数据不准确,通常播了一秒,这个position只走了400-700ms(依bitrate不同而有所区别)。 

另:imageview 不支持u.s. web coated (swop) color workflow。不管是你放在drawable中,用bitmapfactory去decode,都无法支持。
    其实似乎整个java都不支持,这个比较奇怪!这可是很流行的一种格式呀!做java的人的杯具!


robin's programming world 2011-08-06 08:36
]]>
网站地图