刚开始工作的时候,为了方便,买了1T西数移动硬盘做为数据存储;
才两年空间就不够了,于是又买了2T的希捷移动硬盘;新的硬盘用了快4年。
最近开发的时候发现硬盘的目录下会有路径无法访问的问题,工作时间又没空管,恰巧,前两天用M3U8-Downloader下载了几个视频的时候硬盘掉盘了(我不知道掉盘是什么意思,但我这种情况我称它为掉盘,就是硬盘不见了,只有重新插拔才能重新识别,在读某些数据的时候就会掉盘)
这里提醒一下各位,只要在日常使用中发现有路径无法访问问题;就要立马停止硬盘写入并做全盘备份防止数据丢失!
硬盘掉盘这个问题,我在网上并没有找到多少非常有效的处理指南;这里只写出我这一个多月来的数据拯救经历:
一开始有文章说可以用chdsk命令来修复硬盘,但我担心损坏数据决定先全盘备份
根据之前装系统接触到的工具来看我先尝试了傲梅轻松备份
用了傲梅轻松备份的磁盘克隆功能,但我低估了磁盘克隆的速度;再加上傲梅轻松备份没有进度提示;所以到一半的时候我就手动停止了
傲梅没有明显的进展,我通过网上的文章又尝试了另一款工具:diskgenius
我首先使用了全盘扇区复制功能,才两个小时就遇到了 ...
引言国庆闲来无事,打算补上之前没写的博客;碍于Jekyll的以下限制:
日常开发用的是Windows,Jekyll的环境略显麻烦
之前博客放在GitHub Page的,GitHub Page对Jekyll适配不佳,部分插件不支持
最近有几篇文章想做SEO,但是效果不好
打算试试其它博客方案
迁移步骤1.参照网上教程搭建基本的Hexo博客环境,本博客使用的是Fluid主题2.将原博客的所有文章迁移到HexoJekyll和Hexo都是静态博客网站,文章迁移很方便;将**_posts目录下的所有文章和文章的图片目录img都复制到source**路径下
执行hexo g、 hexo s预览网站,发现内容可以一个字都不用动
3.发布博客上面的教程展示的是将博客放到GitHub Page上 ,但我看其它文章建议把博客源码设为私有仓库(防止git的deploy密钥泄漏);但免费账号的私有仓库不支持GitHub Page,于是考虑cloudflare Page,cloudflare Page的架构预设上没有Hexo的模板,考虑到它们都是静态博客于是使用自定义命令发布了博客:
构建命令填hexo g ...
说明最近打算开通任天堂在线会员,但是找了一圈互联网却并没有那么一个汇总各区价格的地方;于是花两个月时间做了这样一个任天堂会员价格表。
已知任天堂会员可以全区通用,所以找到一个最便宜的区开通在线会员是一个省钱的方法。
下面汇总了已知的常用区的会员价格,原价和汇率每日更新。
实时价格(点击后可查看原价)点击查看
引言最近给家里换了软路由装上了PVE,于是又重拾了之前的公众号.
在修改微信公众号服务器后台URL地址时,微信提示:请输入合法的URL
这里之前用的是ngrok和frp的内网穿透方案;但我的VPS已经到期了,暂时也没有新入主机的需求
最终,在网上找到了两个解决方法
解决方案2023-1-12 14:05:12更新
3.cloudflare zero trust tunnelscloudflare zero trust tunnels的支持内网穿透,可以在NAS中部署服务端达到穿透内网的目的
打开Access→Tunnels→Create a tunnel根据提示安装对应客户端
如果安装的docker版本,可以什么都不做;直接在Public Hostname中新建一个服务器内网上的一个地址即可
如果安装的是windwos版本
执行cloudflared tunnel login登录账号
1.免费内网穿透服务
使用免费 FRP 内网穿透服务frp.freefrp.net
根据网站提示配置frpc.ini,使用以下docker命令启动frpc客户端
docker r ...
引言最近使用devextreme动态绑定grid数据的时候遇到一个异常
12345678910111213core.mjs:6494 ERROR TypeError: Cannot assign to read only property 'name' of function 'data => { var isCacheUpdated = storeData && storeData !== this._cachedStoreData; ...<omitted>... }' at inheritor.setName (ui.grid_core.columns_controller.js:1920:1) at createColumn (ui.grid_core.columns_controller.js:133:1) at Function.<anonymous> (ui.grid_core.columns_co ...
引言我们知道使用dotnet命令可以方便的启动c#程序,假如我有一组相互关联的服务,一般在测试的时候可以打开多个visual studio启动新实例
不过这只在需要调试它们的时候才有必要,一般也只需要分别在bin\debug中启动命令就行
每天写代码的时候都去启动这些服务未免有些麻烦,因此有了这篇文章.
解决方案复杂的解决方案要用命令行启动这些服务是要解决一些问题的,最关键的是状态检测;因为你直接用dotnet命令启动的是一个dotnet命令行窗口
一旦有多个服务启动了,且每个服务有很多的日志你就不知道哪些服务没启动成功;下面放出我写的一个示例
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657# 确保管理员权限运行脚本if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRol ...
引言PropertyGridControl有两种视图模式(ActiveViewType),经典和office
如果使用office视图(经典视图为Grid展示方式,因此无法隐藏,只能自定义ExpandableObjectConverter,具体可参考CourseConverter)绑定一个前文:devexpress如何在PropertyGridControl中直接编辑集合成员中的对象结果就是这样:
现在,ListCourses这个对象已经被展开了,所以它的集合编辑器没那么必要,如果我想要把这个Editor去掉,有什么办法吗?
解决方案官方并没有针对这个问题提供简单的解决方案,但是它有CustomDrawRowValueCell事件
这个事件可以自定义Editor
所以,问题就比较简单了;只需要不绘制Cell即可达到隐藏控件的目的
12345678private void PropertyGridControl1_CustomDrawRowValueCell(object sender, DevExpress.XtraVerticalGrid.Events.CustomDrawRowV ...
引言PropertyGridControl实际是Vertical Grid,它的每一行对应的是PropertyGridControl.SelectedObject中的属性,如果我想根据值隐藏行应该怎么做呢?
解决方案假如我现在只需要显示Course.Id=2的DicClassRoomId_Name栏位,查看Tree Traversal可知,可以通过VGridRowsIterator.DoOperation 方法遍历整个树达到自定义行内容的功能。
为此需要实现一个RowOperation (完整代码在文末)
1234567891011121314public class SetDicRowVisibleRowOperation : DevExpress.XtraVerticalGrid.Rows.RowOperation{ public override void Execute(DevExpress.XtraVerticalGrid.Rows.BaseRow row) { Console.WriteLine(row.Properties.C ...
引言PropertyGridControl默认使用PropertyGrid的集合编辑器,如果你要编辑集合中的项,必须点击按钮打开集合编辑器
如下图所示:
从图中不难发现,List是可以直接编辑Capacity属性的,那可以直接把Course对象变成List的成员脱离集合编辑器来编辑吗?
解决方案答案当然是可以的,通过观察可以发现,PropertyGridControl可展开编辑的就是Object,所以只需把集合中的成员映射为List中的Object即可,PropertyGrid已经有相应的解决方案了。
使用中间类型CourseCollection然后实现ICustomTypeDescriptor接口和PropertyDescriptor即可完成此需求,完整代码在文末
假如你想要自定义类型名称可继承ExpandableObjectConverter
参考资料
Customized Display of Collection Data in a PropertyGrid
示例项目源码:DevPropertyGridControlExpandCollection
引言PropertyGridControl默认使用PropertyGrid的集合编辑器,对于一个Dictionary对象是不能添加和删除的
如下图所示:
要想实现添加/删除功能,需要继承UITypeEditor实现一个自定义编辑器
解决方案Google之后发现已经有人实现了这一功能:GenericDictUiTypeEditor
由于PropertyGridControl继承自PropertyGrid,因此PropertyGridControl的大部分需求可参照PropertyGrid实现
参考Github为项目添加Nuget引用然后使用EditorAttribute(typeof(GenericDictionaryEditor<string,string>), typeof(System.Drawing.Design.UITypeEditor))即有增删功能
参考资料
Using a Dictionary in a propertygrid
https://github.com/TechSmith/GenericDictUiTypeEditor
