Windows 10 18282 新桌面壁纸 4K 原版 Windows 10 18282 new wallpaper 4K original version
直接下载链接(Dowload link):https://www.sunjw.us/blog/wp-content/uploads/2018/11/img0_3840x2160.jpg
Windows 10 18282 新桌面壁纸 4K 原版 Windows 10 18282 new wallpaper 4K original version
直接下载链接(Dowload link):https://www.sunjw.us/blog/wp-content/uploads/2018/11/img0_3840x2160.jpg
fHash 2.0.0 for Mac OS X is available on Mac App Store now!
fHash is an open source files’ hash calculator for Windows and Mac OS X
The icon “希” is from hash in Chinese “哈希”.
Thanks for Trend Micro Mobile Club’s support.
Project Site https://github.com/sunjw/fhash
What’s New in JSToolNpp:
Project site:
http://www.sunjw.us/jstoolnpp/
Download links:
SourceForget.net
工作之后好久不写博客了,这里都要长草了。。。
之前写过一篇 Build CyanogenMod 10.2 for Nexus 4,现在手机换成 Nexus 5 了,系统也升级到 CM 12 了,写一篇 How to 总结一下。
1. 你还是要准备一台机器(虚拟机也行),装上 Ubuntu,Ubuntu 14 LTS 是个不错的选择,LTS 会有很长时间的软件更新支持。硬盘分的大一些,100GB 起步吧,内存 3G 起,其他随意。
2. 系统装好之后,按照 CM 官方的指导 How To Build CyanogenMod Android for Google Nexus 5 (“hammerhead”) 安装必要的软件。需要注意的是,编译 CM 12 需要 OpenJDK 7,所以安装时,将 openjdk-6-jdk openjdk-6-jre 换成 openjdk-7-jdk openjdk-7-jre,另外 Ubuntu 14 已经没有 ia32-libs 这个包了,需要安装 lib32z1 lib32ncurses5 lib32bz2-1.0 作为 32 位兼容运行时。
3. 之后就可以按照手册准备 repo,使用 repo init -u https://github.com/CyanogenMod/android.git -b cm-12.0 初始化 repo。
4. repo sync
5. breakfast hammerhead
6. 这里建议在 breakfast 之后再 repo sync 一次
7. Nexus 5 的私有库在这里有 https://github.com/TheMuppets/proprietary_vendor_lge,可以将其添加到本地 repo,打开同步好的源码目录,进入 .repo/local_manifests 目录,在其中创建 lge.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <manifest> <project name="TheMuppets/proprietary_vendor_lge.git" path="vendor/lge" remote="github" /> </manifest>
之后再 repo sync 一次。
8. 到这里源码同步完成,可以 brunch hammerhead 啦。
需要注意的是,请使用多种方法科学上网。
前段时间,在用 npp 分析一个 html 文件时,准备把其中的混合在一起的 js 分离出来,在 js 前后换行时 npp 崩溃了,感觉是哪里 bug 了,重试了几次都能很稳定的重现。本着张银奎老师的精神,上调试器。用 windbg 附加到 npp 进程,重现这个 crash 后,停到调试器内,看了下栈。
很明显栈溢出了,返回地址都是文本中的字符,溢出发生在 NotepadSharp.dll 也就是 Notepad# 插件中。Npp 上的插件基本都是开源的,那就把代码搞下来,用 VS 编译了个 debug 版,放进去再次触发崩溃,发现 PluginDefinition.cpp 的 void Newline() 函数中
What’s New in JSToolNpp 1.16:
Download links:
SourceForget.net Download
Google Code Download
一直想尝试着自己编译 CM,毕竟如果想修改系统 Apk,就有可能需要编译整个系统。于是在开了一台 Ubuntu x86_64 虚拟机(这是一个大坑,等会儿说)作为编译机器,参考的主要是 CM 官方 wiki:http://wiki.cyanogenmod.org/w/Build_for_mako?setlang=en。根据 wiki 指示准备好基础环境后,开始 repo sync,总共下载了 6GB 多的工程代码。总的来说,一直到 wiki 的 “Start the build” 一节,都没有问题,照着做就好了。不过当执行 brunch mako 之后,坑就一个个冒出来了。
第一个坑是磁盘空间,一开始给虚拟机分配的磁盘小了些,明显不足以完成整个编译,于是又加了个 40GB 的虚拟磁盘,并且在该磁盘上编译。40GB 似乎够了,不过最后的事实证明其实 40GB 几乎不够,最终完成编译后只剩 400MB 了!所以编译 Android 还是分配一个大一点的磁盘吧。
第二个坑就是 x86_64,ARM 处理器目前还是 32 位的,包括编译使用的 repo 好像也是 32 位的,所以首先需要安装 32 位 c/c++ 运行库。之后真正的坑在于 JDK,wiki 中没有明确说明 JDK 应该安装 32 位还是 64 位的,我一开始想 java 部分应该和架构没什么关系,就装了个 64 位 JDK,结果开始使用 javadoc 编译 Droiddoc 时,make 出错了,显示错误 45,一开始在论坛上查了一下,说是应该使用 Oracle JDK,于是尝试安装了 64 位的 Oracle JDK,结果还是一样出错。后来仔细看了论坛,发现其实问题是 64 位 JDK。也不知道为什么,64 位 JDK 的 javadoc 就是会导致编译错误,但是之前的 jar 包都编译正常。通过 apt-get 安装了 32 位 Open JDK 后,问题解决了。
第三个坑是内存,一开始只给虚拟机分配了 1GB 内存,结果在编译 framework 时,malloc.c 中的 assert 出错了。。。关机,调整到 2GB,编译终于继续下去了。
第四个坑是 CM 加入的 Focal,在编译 external/Focal 中的链接库时总是出错,论坛上说 Focal 不太稳定,可以不编译。好吧,暴力一点,直接把 external/Focal 和 apps/Focal 删掉了,编译继续。
最终花了一个下午+半个晚上(不包括 repo sync 的时间,这个根据网速会有所不同,可以自己算算下载 6GB 需要多久),终于编译出来了。好了,能编译了,下一步就是准备尝试修改了。
增加 Shell Extension 实现的高级右键菜单支持
修正其他 bug
Use Shell Extension to implement context menu shortcut
Fix other bugs
Download:
https://code.google.com/p/fhash/downloads/list
http://sourceforge.net/projects/fhash/files/1.8/
其实也就是记录一下用 WinDbg 调试 fHash 的一次过程,这个 bug 是由于没好好看文档造成的,我需要让 fHash 知道当前运行的操作系统是 32 位还是 64 位的,之后好去选择正确的 shell extension 文件。查文档看到了这个函数 IsWow64Process ,之后错误的以为 kernel32 中有这个函数就是 64 位操作系统,结果就已这个逻辑写下了错误的 64 位系统判断函数,和错误文件读取逻辑。
tstring tstrExeDirPath(pszExeFullPath); tstring::size_type idx = tstrExeDirPath.rfind(_T("\\")); tstrExeDirPath = tstrExeDirPath.substr(0, idx); tstring tstrShlExtDll = tstrExeDirPath; tstrShlExtDll.append(_T("\\fHashShlExt")); if(IsWindows64()) tstrShlExtDll.append(_T("64")); tstrShlExtDll.append(_T(".dll")); WIN32_FIND_DATA ffData; HANDLE hFind = FindFirstFile(tstrShlExtDll.c_str(), &ffData); bool bRet = (hFind != INVALID_HANDLE_VALUE); if(bRet) { #if defined(UNICODE) || defined(_UNICODE) wcscpy_s(pszShlDllPath, MAX_PATH, tstrShlExtDll.c_str()); #else strcpy_s(pszShlDllPath, MAX_PATH, tstrShlExtDll.c_str()); #endif FindClose(hFind); } return bRet;
结果很自然,在 32 位的 Windows XP 上没有执行正确。但是测试环境没有 VisualStudio,而且用的是 Release 编译,也没有带着符号文件,这怎么调试呢。Windows XP 上装有 WinDbg,那么就用它来调试。