Archive for 算法-编程

之前没有这个错“Type Error: Network request failed”,然后之后有了,很纳闷。 通过查找发现是ios9之后请求必须走https不然系统就给你禁掉了。解决办法   Info.plist文件里修改 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>localhost</key> <dict> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> 这个官方网站也有提,“Running On Device”这节。

Continue

搞了两三次升级了,各种问题,都不记得了。   npm install --save react-native@0.29 然后提示 “UNMET PEER DEPENDENCY react@15.0.2”。 npm WARN react-native@0.29.1 requires a peer of react@~15.2.0 but none was installed.   然后根据提示升级react的版本,npm install --save react@~15.2.0。 然后又执行了一遍:npm install --save react-native@0.29 就好了。   第二部执行:react-native upgrade,会替换很多配置等文件。   第三步:rnpm link 导入资源

Continue

去官网下载个zip包,然后解压。进入目录执行python setup.py然后就安装完了。 先不考虑搭建安卓环境,环境变量配置直接跳过。执行完source ~/.bash_profile后。 cocos -v 2.1 说明安装成功了。 文档地址:http://www.cocos2d-x.org/docs/editors_and_tools/cocosCLTool/index.html 创建新项目

cocos compile -s ~/MyCompany/MyGame -p ios -m release -o ~/MyCompany/MyGame/bin

运行项目

cocos run -s ~/MyCompany/MyGame -p ios

Continue

很多东西搞一次查一次很烦,记一下,下一次找笔记。加深记忆 react-native-vector-icons这个改了一下配置文件导入静态资源,upgrade react-native的时候每次选择替换配置文件,然后会找不到资源文件。执行rnpm link就好了 对于安卓和ios两个版本,发现大部分人的做法是开发两套,我直接写了一套,对于不兼容的地方判断操作系统不同针对。方法 var { Platform } = React; var styles = StyleSheet.create({ height: (Platform.OS === 'ios') ? 200 : 100, });    

Continue

想研究一下virtualenv是怎样保证python运行环境独立的。库里边带了几个二进制,导致clone源代码的时候发现库好大啊,当时就祈祷源码不要太多。 目录结构 大体看了一下文件目录,主要文件就一个virtualenv.py。(也确实安装完就这一个文件) bin/rebuild-script.py这个文件是用来构建新的virtualenv.py文件的。 virtualenv_embedded 文件夹里边的文件是 生成虚拟环境后的脚本,但不是最终版的。上边构建文件将这几个文件插入virtualenv.py virtualenv_support 几个二进制库 创建一个环境 $ virtualenv ENV 从virtualevn main()入手,2000多行。前边解析参数,extend_parser和adjust_options可以自定义修改参数,目的应该是可以使创建环境的命令简单。after_install是环境创建完成后执行,可以做一些基础包的安装等操作。我猜virtualenvwrapper应该会对这几个函数定义。 --python参数可以指定解析器的版本。resolve_interpreter是返回指定解析器的绝对路径,作者使用path变量和提供的执行文件名组合再判断文件是否存在,是否可执行来判断。我感觉可以直接使用which取一下,差不多。 VIRTUALENV_INTERPRETER_RUNNING是判断是否使用的指定解析器,不是指定解析器,就更改变量,用指定解析器重新执行。是的话就继续执行。在加载文件的时候判断是指定解析器,把virtualenv安装环境的path去掉。 后面删掉了PYTHONHOME,make_environment_relocatable好像是对环境目录移动复制等操作后进行重定向,这个没用过。主要就把环境bin目录下的文件的python执行解析器,修改lib库文件路径 create_environment就是创建环境的函数了,第一个参数是环境根目录,后边都是执行参数。 path_locations 根据不同系统解析器环境,返回要创建的环境的目录 install_python,开始先判断了不能用虚拟环境创建自己,clear参数清除环境下的lib库。使用sys.prefix找到python安装路径,还有一个real_prefix和base_prefix这俩路径官网没查到什么意思 创建新环境的lib文件夹,fix_lib64是为了兼容一些别的环境lib文件夹命名不同,咋不开始就定好。使用os库找到标准库的目录stdlib_dirs.然后将标准库文件软连接到新环境的lib下,copy_file分析了是软连接然后找到真实文件,连接到真实文件上. 还有一个REQUIRED_MODULES必要库,先判断这些必要库是否在标准库里边,不在通过imp.find_module找到,同样添加软连接到lib目录.这个应该也是为了兼容吧.其中lib目录有单独的一套,卧槽 我只能说这是python的坑吗,我觉得肯定不是作者特意写好多。(具体不了解不同系统有啥区别也不想看) 创建lib目录下的site-packages,site又是一套我查.include也是软连接 bin目录python二进制复制,那么多代码都是不同py实现的结果,其实就一句copy.不是windows解析器二进制还有带版本号的。然后测试了一把解析器能不能执行。最后返回新环境python的路径 install_distutils 安装 install_wheel 安装安装包的工具. install_activate 安装环境的启动退出脚本 install_python_config 安装python_config文件 上边两个模式基本相同,源文件在virtualenv_embedded下,通过编译到virtualenv.py文件里,然后安装的时候替换相关变量,然后生成新的文件。 最后再看看activate.sh文件如何启动 执行这个脚本的时候,先进行deactivate操作,相当于切换环境。主要就是判断之前的环境变量保存的几个变量是否存在,存在还原, 并删除。因为可以不存在,当前使用的system的python环境.ps1也还原 下边进行新环境变量的赋值。记录要切换的环境根目录,path加入环境bin目录, 删掉pythonHOME.更改ps1加上环境名,替换。pydoc重新绑定,变成了现在的pydoc。 然后就没了

Continue

java有一个jstat 可以查看gc的情况等数据。可以看一下如何注入python进程获取gc每一代的次数。主要使用gdb 首先ps找一个python进程的pid。 ps aux| grep python 1264   然后执行 gdb -p 1264 -batch -eval-command='call PyGILState_Ensure()' -eval-command='call PyRun_SimpleString("exec(\"import gc\\nprint(gc.get_count())\")")' -eval-command='call PyGILState_Release($1)' 你会发现 1264启动日志输出一个元祖(492, 8, 0),分别代表每一代gc的次数。 同样也可以进行手动gc,或者查看线程数等操作。或者执行任意代码。  

Continue

这个问题是老长时间之前的了,我在repl下边看书边写代码测试一些看书想到的问题,然后把你个内建函数名写错了,sbcl提示我参数不是list,但是群里求救别人都没看出来是函数名写错了,后来我发现是特么的函数名写错。但是我很纳闷,为啥会这么个出错模式。 有人推荐我下了lw,lisp works。然后lisp works提示函数未找到。然后就会轻松知道原因了。 后来妮神给我讲,函数调用是根据名字来确定用哪个函数,而cl标准未规定函数调用的时候,是在参数计算前确定哪个函数还是在后,或者中间。 所以这个问题就导致了,sbcl和lw一样是先执行参数后确定函数的,因为可能参数里边会定义这个函数。(javascript也是这样的)sbcl执行参数发现参数不是list报错了,我测试的那个函数是匹配列表的,可以是cons所以不一定是列表,真是凑巧啊。而lw可能回溯回去 报了函数名不正确的错误。 群里另一个人好像用clisp的实现,是先确定函数然后计算参数的。 当时群里写过一个测试代码,杀叔让我写一个python版本的,我在函数里边用了global,然后python也就替换了。

Continue

妮神教的,没看过标准的我只能猜测,不过开始猜测的还正确了 我在一个包文件里这么定义了一个常量 (defconstant +levels+ (vector :error :warning :info :debug)) load的时候说重复定义,这显然是不正确的,我其他地方都没定义过,显然后边那个值又计算了。我在群里问就是后边这个值是不是又计算了一次。 不过我不知道原因是load了多次导致的 妮神的讲解就是,加载到repl的时候会load多次,然后 就会定义多次,而常量不允许定义多次,cl的实现就会判断定义的时候后边的值是否eql,eql就通过,不eql就报错。而vector虽然是不变长的,但是还不是一个对象,执行两次不eql,所以会报错。 直接用defparameter定义的,包里边自己别修改一般不会有问题吧。

Continue

在妮神帮助下,学习了很多cl的知识,后边都总结一下。 本想晚上洗袜子,跑步。写代码写的上火,写了一晚上写了40行cl代码,四个宏,并且功能还没做完。想给框架先写个log模块的,用宏可以编译前判断log打印等级决定生成是否打印,现在整的完全不想写cl代码了[泪流满面] 洗洗睡,袜子明天起的早再洗 今天早上思路清晰多了,代码精简到34行.修复了一个bug。问题是修复了这个bug,展开式变成4行,没修复之前展开式只有一行,不爽 ,,四行的话和写个函数没啥区别了 昨晚上和今天早晨的微博,然后就不记录前后原因了。 说说怎么编译包。 首先要load 依赖包,不然会编译的时候找不到。 (ql:quickload "cl-async") 编译包的顺序,要先编译package.lisp并且load。不然编译别的文件会找不到你自己定义的包. (load (compile-file "package.lisp")) 之后按顺序编译其他文件 (load (compile-file "logging.lisp")) (load (compile-file "server.lisp")) 这样其实就可以执行代码了。不过退出repl从新加载的时候,顺序一样,要先load依赖包,然后loadpackage,最后load相关包文件。然后写代码测试。

Continue

今天本来想写点web框架代码,早早睡觉的,框架代码写了一点。发现测试时候load 然后执行,想文件多了没法搞了。先看看cl打包吧。 然后就查看过的书,找讲包的内容,发现很少。就一个defpackage,实用cl编程里边讲的多一点,注意事项很多,然并卵,写完发现一样不好用。 去群里求救,需要asdf这么个东西,起了个蛋疼名。之前用过但是不知道干嘛的,文档 https://www.common-lisp.net/project/asdf/asdf.html 首页有个有意思的地方Examples Download any of the many packages available through Quicklisp to see as many examples. 哈哈,不过文档里有。 看文档sbcl里边好像自带asdf,我装过quicklisp,并且启动repl的时候自动加载。可以直接使用(asdf:asdf-version)看到asdf的版本3.0.2 duang.asd

(in-package :asdf-user)

(asdf:defsystem duang
  :description "A simple Web Framework."
  :author "0x55aa "
  :license "BSD"
  :version "0.0.1"
  :depends-on (#:cl-async)
  :components ((:file "package")
               (:file "server")))
主要定义包的依赖关系 package.lisp
(defpackage :duang
  (:use :common-lisp :cl-async)
  (:nicknames dg)
  (:export #:start-server))
server.lisp
(in-package :duang)
(defun start-server () ())
然后代码的位置要能被sbcl发现,看文档可以自定义,等会儿看看quicklisp文档有没有。我直接放到~/quicklisp/local-projects/文件夹下了。 最后在repl里(asdf:load-system "duang") (dg:start-server)就行了 (require :duang) (load ) (ql:quickload "duang") 都行 这么点东西搞了一晚上

Continue