活久见:有些异常是不能被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 运行时错误

评论(0) 引用(0) 浏览(1512)

使用Adobe Premiere制作视频镂空叠加

作者:V君 发布于:2017-6-9 22:00 Friday 分类:折腾手记

首先用一张图来表示咱想说的啥,然后再到TL;DR吧 (pia~~

TL;DR: 

1) 按叠加素材层次添加到序列;

2) 从效果中选择「RGB差值键」(有的是「RGB差异键」?),拖放到序列选中需要镂空处理的素材;

3) 在效果编辑器吸取要镂空的颜色;

4) 调整相似性以及圆滑程度,达到消除毛刺的镂空叠加效果


详(ting)细(wo)操(che)作(che)点进来看

阅读全文>>

标签: 多媒体 视频编缉 Premiere

评论(1) 引用(0) 浏览(1634)

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技术

评论(0) 引用(0) 浏览(1248)

花式手动安装 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 供辅助诊断

标签: Windows7 系统安装

评论(0) 引用(0) 浏览(1336)

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 直接调用原生功能辣!

标签: 软件开发 移动端 Android HybridApp

评论(0) 引用(0) 浏览(1753)

Powered by emlog 去你妹的备案 sitemap