看来电信个人宽带的443端口也没了

作者:V君 发布于:2020-1-26 4:53 Sunday 分类:小服杂记

由于最近几天回家过年,很晚才发现博客打不开,经过各种排查发现似乎是443端口被封了。只好用外部空间来搞了个重定向到8443端口,使博客暂时以一个不太好看的网址重见天日。
之前已发布的链接依旧有效。

这就是一月份的文章?

标签: 端口封杀

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

开始接触 STM32 —— Keil μVision 和 Visual Studio 相比太难用啦!

作者:V君 发布于:2019-12-31 10:59 Tuesday 分类:折腾手记

最近开始摸STM32,用 Keil μVision 来编写代码和调试。单片机型号是 F103 用 ST-Link/v2 以 SWD 的方式下载和调试。尽管 Keil 在占据的市场份额不小,但对于我这个被 VS 宠坏了的家伙来说,太难用啦!先列举些槽点,然后再看看有没有代替方案,如果能用 VS 来搞 STM32 开发就好咯……

吐槽:文档页签不能拖动
吐槽:编译、下载、启动调试,似乎不能一气呵成,得分开操作
  但愿是我不知道怎么配置一键,难道大伙们都能忍?
吐槽:智能感知……只能说是聊胜于无吧,尽管默认绑了 F12——
  可以转到定义,但在找到多个重复定义时,你蹦出一个符号窗格给我……
吐槽:项目 wide 搜索,貌似没有像VS那样列出匹配,只能上一个、下一个来导航
  但愿又是默认不启用的功能,只是我不没调出来……

代替方案?起初想到用 VsCode 来编辑代码,然后再回到 Keil 调试,考虑到 C 语言过于依赖环境,多一个少一个符号定义都会发生很大变化,估计 VsCode 的智能感知估计也不会好到哪里去吧……用各种关键字喂咕狗,找到一个叫做 VisualGDB 的扩展,主页上提到可以用来搞 STM32,但目前还没有试试看能不能用……(咕咕咕)后话:剁手买了正版,很香!

月底了,不刷存在感会觉得很方,必须凑合着发点什么出来

标签: 软件开发 嵌入式

评论(2) 引用(0) 浏览(719)

Xamarin Android 新手历险记之 AccessibilityService

作者:V君 发布于:2019-11-30 19:49 Saturday 分类:折腾手记

最近开始折腾 Android 的原生功能,想获取显示在屏幕上的界面元素。说到 Android 还想用我大 C♯ 去写,当然就是 Xamarin 啦!和往常一样,还是从 TL;DR 开始,然后再展开详细。

- TL;DR -
1. 在项目中新增一个类,本例命名为 MyAccessibilityService
2. 使其继承于 AccessibilityService (Android.AccessibilityServices)
3. 追加必要的 Attribute ,如 Service、IntentFilter、MetaData
4. 重写 OnServiceConnected 方法增加 SetServiceInfo 调用
5. 重写 OnAccessibilityEvent 根据 ServiceInfo 做对应动作,达到目的

- 展开 -
1. 略 (o ‵-′)ノ”(ノ﹏<。)
2. 略 (o ‵-′)ノ”(ノ﹏<。)
3. 这里可以稍稍展开
 ✸ Service 特性主要是 Label 和 Permission
  > 用 Label 来指定服务的显示名称
  > 用 Permission 指定必须的权限 BindAccessibilityService
 ✸ IntentFilter 喂进去一个 "android.accessibilityservice.AccessibilityService"
 ✸ MetaData 喂进去 "android.accessibilityservice" 和 Resource = XML 资源路径
  > XML 路径一般是 "@xml/accessibility_service_config",在对应地方写好配置文件即可
  > 为了能访问界面元素,确保在配置文件中启用 android:canRetrieveWindowContent
  ⚠ 注意 MetaData 第一个参数写错不会有检查,只会让服务不按XML配置文件工作
4. 这里主要是创建一个 AccessibilityServiceInfo 实例,然后喂给 SetServiceInfo 方法
  > Flags 属性确保有 RetrieveInteractiveWindows 位
  > EventTypes 用来给接下来的地方做事件筛选,比如用 WindowsChanged
5. 到这里就可以开始搞事情啦
  > 使用当前对象的 RootInActiveWindow 属性获取界面元素的树状结构根节点

- 再稍稍补充一下 -
如果只有 Service 而没有主界面,那就得手动跑到系统设置的辅助功能去启动服务。
有的国产Android手机系统界面被魔改得连辅助功能入口都被砍掉,这太尴尬。
我们可以在主界面做个按钮来导航到辅助功能设置:
1. 使用 Android.Provider.Settings.ActionAccessibilitySettings 实例化 Intent
2. 将其喂给 StartActivity 就可以实现捷径了

- 感受 -
这次能分担给大家的东西并不多。
我不会说因为 MetaData 第一个参数写错,然而没有报错,也获取不到界面元素,让我花了很多时间才找到问题所在。这个细节上咕狗做得很不厚道呀……

说好的每月一篇文章,这次有点踩线呀,虽然创建时间是19点,但发布时已经超过零点了,咕咕咕

标签: 软件开发 C# Android

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

Auto Scroll Utility for Windows 10 来自ThinkPad的桌面实用小工具

作者:V君 发布于:2019-10-26 16:03 Saturday 分类:应用软件

今儿咱来分享一个实用小工具,尽管不是解决问题也可以有TL;DR,但先听我扯扯吧

先扯
厂里配的工作机是ThinkPad笔记本电脑,拿到手之后当然首先是装系统和打驱动。
比起使用助手之类的玩意儿去弄脏系统,我更倾向于自己从官网下载。
去官网对应型号支持页面去按需选择下载。考虑到笔记本的快捷键功能,我顺便也把实用工具全都装上了。
在使用的过程中发现:在部分被拖到屏幕外的窗口,用鼠标在窗口上往屏幕外的方向继续移动,
这时候窗口会以反方向往屏幕中移回来,具体看这个动图。
点击查看原图
起初以为这是Windows10的新特性,想在自己的电脑也启用它,用尽各种关键字把咕狗翻个底朝天都没找到…
其他同事同样用Windows10也没有这个特性。我就猜是不是OEM实用工具了,翻找进程发现了它。
扯完了,让我们来获取它吧!即使你的电脑不是ThinkPad,通过一些手动操作还是可以使用的。

TL;DR
1. 咕狗“auto scroll utility”找到联想官网下载页,我这儿看到的文件名是 gfvv33ww.exe
2. 下载执行安装,默认会将文件释放到 C:\DRIVERS\AutoScroll 安装向导完成之后无法再使用图形界面继续
3. 将 _i386 文件夹中的 virtscrl.exe 和 virtscrl.dll 弄出来,这时候安装程序生成的文件夹可以删掉了
   p.s. 已经确认即使在64位系统下 _i386 的版本也能正常工作,文件比 _amd64 更小,何乐不为
4. 之后就是想办法用 system 身份运行 virtscrl.exe 了,一旦它跑起来就能享受推窗口的体验

对TL;DR的补充(新手指引)
如何让 exe 以 system 身份运行?
方法有很多,但除了用 Sysinternals 出品的 PsExec 之外其他方法都比较麻烦
用法:PsExec.exe -i -s -d cmd /c start /min C:\path\to\virtscrl.exe
首次使用会弹出许可协议,需要接受才能使用
将它设为开机启动,然后享受吧!

继续补充:这个小工具在远程桌面下无法正常工作

标签: 新手指引 小工具

评论(2) 引用(0) 浏览(1124)

初体验.NET Core 3.0,Core新特性和传统Framework的差别

作者:V君 发布于:2019-9-30 17:21 Monday 分类:折腾手记

这次不是解决问题,因此不像往常那样有TL;DR,那就做个TOC吧

- TOC -

  1. 框架程序集(差别)
  2. 接口默认实现(新特性)
  3. 编辑并继续(差别,已更正)
  4. 通过SSH远程调试(新特性)
  5. 项目文件(差别)
  6. 嵌入资源(差别)
  7. ASP .NET Core(差别)

- 0.先扯扯 -

最近更新了 VS2019,终于有机会接触 .NET Core 3.0,在看官方文档前先行体验一波,体验过程不断收集发现就有了本文的TOC,如果你去看文档,会发现有少量文档未提及的差别,也为撰写本文提供了动力。主要从个人体验总结。

- 1.框架程序集(差别) -

从新建第一个Core项目开始,和传统Framework的差别就能体现出来,Core已经自动把整个系统类库的所有程序集作为SDK引用到项目中,不像从前需要手动引入各种系统类库程序集。

- 2.接口默认实现(新特性) -

早在半年多以前就听说,C♯ 8.0 将能够在接口中定义包含方法体的方法,这个特性名为「接口默认实现」,也是打动我,使我投奔Core的诱惑之一。亲手操练之后发现,现在不仅能在接口中写实现方法,更能定义常量、甚至还能写静态方法,昔日的接口扩展方法将可以用默认实现代替。

- 3.编辑并继续(差别,已更正) -

这个差异在16.3.0得到更正,现在已经能在改变当前语句的同时将代码变更应用。(请无视这一条)编辑并继续:在调试中命中断点停下来,编辑代码,改变当前语句并继续执行。这里有点细节和传统不一样,需要改变操作顺序,会稍稍造成一点体验差异。传统Framework调试时我们可以按照 命中断点→修改代码→拖动箭头或者使用上下文菜单来改变接下来要执行的语句,拖动在改变语句的同时,代码变更会生效,使我们能够执按修改如期执行;到了.NET Core就有点不一样了,修改完代码之后不能紧接就着改变当前语句,这会实代码变更的提交动作被跳过,执行的行为和看到的代码将会不一致,我们只能继续往前走一步才生效。操作顺序就变成 命中断点→改变当前语句到要修改的代码前→修改代码→继续执行。

- 4.通过SSH远程调试(新特性) -

在过去要调试运行在Linux上的.NET应用程序,只能依靠第三方调试器,比如之前提到的MonoRemoteDebugger,第三方工具的体验和稳定性都远远比不上官方集成功能。现在我们可以通过SSH的方式直接附加到远程进程了。

- 5.项目文件(差别) -

过去的C♯项目文件记录着所有已包含的文件,而且变更后VS会重新载入项目,动作有点大。在Core之后有了极大改善,项目文件不再一一记录包含文件而是引入默认行为,将项目目录下的文件以扩展名对应默认生成行为的方式默认包含到项目中,如果有变更则仅记录变更的项。在项目文件变更后也极大地减轻了重新载入(刷新、应用变更)项目的动作。

- 6.嵌入资源(差别) -

这一点还没有查到相关文档。受影响的地方是生成操作为「嵌入的资源」的项,若和旁边的.cs文件同名(任意扩展名),则会生成与.cs文件中定义的第一个类全名的嵌入资源,且不带扩展名。若在.cs文件旁边有两个同名(不同扩展名)的文件设置为嵌入资源,将引发重名编译错误。这个行为和传统Framework不同。

- 7.ASP .NET Core(差别) -

关于ASP.NET Core和传统ASP.NET的差别太多,这里就简单点一下个人感受。对于ASP.NET Core而言Web服务器不再是必备环境,引入了SelfHost的工作方式。HTTP Runtime格局也有巨大变化,传统ASP.NET想要以最简单粗暴地方式处理请求需要引入HTTP模块,到了ASP.NET Core,新建一个空项目就是一个空的回调并传入HTTP上下文给你处理,简单粗暴更上一层楼了!

差点以为这个月会打破惯例至少发表一篇文章…

标签: 软件开发 C#

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

Powered by emlog 去你妹的备案 sitemap