活久见:有些异常是不能被catch(Exception)捕获的,你得把catch参数去掉
作者:V君 发布于:2017-6-14 0:25 Wednesday 分类:折腾手记
TL;DR:
当你发现本应被捕获的异常却被无视 try-catch 语句时,
你应该试着去掉 catch(Exception ex) 中高亮的部分
写成 try {....} catch{....} 这种写法将不能直接取得异常实例,
你可以将上下文对象值记录下来作为排查线索。
本例:
将 MVC 5.2.3 站点部署到装了 mono 4.2.2 的Debian@树莓派。
首先就遇到一大堆兼容性问题。去掉一系列不兼容的组件。
(ApplicationInsights系列、CodeDom系列)
总算能报出些看起来有点线索的异常。
System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
at System.Reflection.Assembly.GetTypes () <0x721db540 + 0x00023> in <filename unknown>:0
at Ease.Ioc.IocManager.RegisterInterface (System.Reflection.Assembly[] assemblies, System.Type iface,
System.Func`1 lifetimeManager) <0x721db0c0 + 0x000fb> in <filename unknown>:0
at Ease.Ioc.IocManager..ctor () <0x721fb130 + 0x00283> in <filename unknown>:0
at Ease.Ioc.IocManager..cctor () <0x721faff8 + 0x00027> in <filename unknown>:0
这是模仿 ABP 在当前应用域中的所有程序集中寻找实现了指定接口的类,然后加到 IoC 容器。
(哎……谁让 ABP 还不支持 mono 呢。。。)
在对某个程序集调用 GetType 时爆炸了……
于是在其周围加上常规异常处理 try-catch(Exception) 试图找出有问题的程序集。
然而异常依旧引发,就跟没写 try-catch(Exception) 一样……
试着调整方法结构,避免一些在首次访问方法就引发异常的状况 —— 无果……
心一横,去掉 catch 语句的参数,记下当前调用 GetTypes 的程序集。
try
{
types.AddRange(asm.GetTypes().Where(p => false == p.IsAbstract && false == p.IsInterface && iface.IsAssignableFrom(p)));
}
catch
{
throw new Exception("Asm load fail?" + asm);
}
功夫不负有心人 or 瞎猫撞上死耗子? bingo! 抓到你啦!
Asm load fail?System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
咋办? 没办法哇! 试着把引用干掉看看吧…… 果然就没事儿了!
稍稍去了解一下那玩意儿,发现是一堆辅助类, 反正一时半会也用不上。
于是就这样,用作类似 Hello world 的站点首页就成功呈现出来啦!
—— 尽管是乱码…… 因为偷懒直接输出 Content 嘛! 接下来可以慢慢折腾啦!
标签: 软件开发 树莓派 C# linux mono 运行时错误
使用Adobe Premiere制作视频镂空叠加
作者:V君 发布于:2017-6-9 22:00 Friday 分类:折腾手记
首先用一张图来表示咱想说的啥,然后再到TL;DR吧 (pia~~
TL;DR:
1) 按叠加素材层次添加到序列;
2) 从效果中选择「RGB差值键」(有的是「RGB差异键」?),拖放到序列选中需要镂空处理的素材;
3) 在效果编辑器吸取要镂空的颜色;
4) 调整相似性以及圆滑程度,达到消除毛刺的镂空叠加效果
详(ting)细(wo)操(che)作(che)点进来看
JavaScript 字符串 半角转全角
作者:V君 发布于:2017-4-13 1:24 Thursday 分类:折腾手记
var arrProcessed = [];
var code;
for (var i = 0; i < t.length; i++) {
code = t.charCodeAt(i);
if (code > 32 && code < 127) code += 0xFEE0;
arrProcessed.push(code);
}
t = String.fromCharCode.apply(window, arrProcessed);
参考资料:爆栈,Unicode Map,爆栈,爆栈。
用来给竖排排版被打横的字符摆正,主要精髓是原生脚本。
扯扯:
比起被转载的满天飞的版本,还是自己重新码过,整洁度和性能都不在一个级别上。
真能忍受每次都调用 charCodeAt ,定义一个局部变量会死吗?
还有看到每次循环都作字符串拼接也犯了强迫症,丢进数组然后再调用原生功能一次转换。
标签: 软件开发 javascript Web技术
花式手动安装 Win7——无阉割完整安装64位Windows7仅需7G硬盘空间!
作者:V君 发布于:2017-3-6 4:41 Monday 分类:折腾手记
TL;DR:
在 PE,NTFS 格式化分区启用压缩(可选), 7z 解开 install.wim\4, 激活分区并 bcdboot.
走完安装流程,去掉休眠文件和页面文件.
安装前启用 NTFS 压缩能让装完以后只占用 7G 多一点的硬盘空间.
扯一扯:
最近又给自己弄了台机器(你特么几台机了?), 需要装系统.
听说NT6安装工具会有奇怪的东西跑进系统, 所以尝试着自己手动进行.
还意外地发现安装前设置压缩能很给力 乂目
详细步骤:
●准备系统盘ISO
不扯,MSDN你懂得 (´∀((☆ミつ
●准备PE
装系统首先要准备一个对应 32/64 位的 PE, 因为稍后要执行 bcdboot 设置启动引导.
●创建一个分区用来装系统
不想破坏原有系统的情况下,可以将系统盘收缩,在紧随其后的空间建立一个主分区.
格式化成NTFS,并激活. 然后重启再次进入PE,确保激活的分区被识别为C盘.
●解开系统包
用 7z 打开系统盘里的 install.wim 按需找版本目录, 一般情况下旗舰版是 4, 可参考xml
把里面的东西解压到根目录,启用压缩能省下不少空间(貌似还能缩短wim解包时间?)
●设置引导
开个命令行,转到 windows\system32 目录, 执行 bcdboot c:\windows /s c:
然后重启就能进入Sysprep流程
●后续优化
要达到装完以后只占7G硬盘空间, 需要禁止休眠 powercfg -h off
还要去掉页面文件, 但还是推荐留下 512MB 供辅助诊断
Mono Android WebView 应用之 JavascriptInterface
作者:V君 发布于:2017-2-26 18:45 Sunday 分类:折腾手记
上次咱初体验了 Android 的 WebView 随着使用中发现,
原来这货也可以把原生对象实例,作为接口丢进 js.实现在网页脚本直接调用原生功能.
只是方式有点坑, 不过咱还是填上了. 能够挺愉快的使用.
查阅了许多资料,具体限制为只能将字符串作为脚本调用的返回值.
如果你用字符串数组,那么 js 调用端会得到 undefined.
如果被调用的方法发生异常, 则整个应用挂掉...
接下来泥应该知道咱会怎样解决了吧.
是的, 用 JSON 包裹参数和返回值,并且封装调用结果(成功与否、异常信息).
只是, 没想到一直使用的 JSON 库 Newtonsoft.Json 在 2.2 版安卓上并不支持.
只好再找一个叫做 fastJson 的实现, 做个条件编译分别使用了.
到这里, 剩下的就是各种花样展开了.
如果每次都写完参数和返回值的 JSON 转换, 那要不要太呛?
于是,咱们需要封装, 同时也要自动生成 js 的 function stub.
就酱: 一个未经性能优化的初版封装出来了.
继承它,添加公开实例方法,打上 JsApi 特性.
将实例打进 WebView, 同时把 stub 打进 Razor 模板. 定义一个标识符存放输出的 stub.
这样就可以愉快的从 js 直接调用原生功能辣!
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)