vuex-electron使用的小坑

最近使用的electron-vue框架中,自带了vuex-electron模块。本来照着vuex官方文档写的,结果发现this.$store.dispatch(‘example’)无效,根本无法调用成功。 经过反复被坑与Google+Baidu,终于发现vuex-electron这个模块引入了两个插件: plugins: [ createPersistedState(), createSharedMutations() ] 其中createSharedMutations这个插件用于进程间共享数据,因此还需要经过一点小小的调整。目前大概有两种方案: 1.推荐:在electron的主进程的index.js中引入store: import store from '../renderer/store' (以上import路径仅针对electron-vue的默认结构,具体路径请自行调整) 2.如果不需要共享数据,也可以放弃这个插件,在store/index.js中把createSharedMutations插件的引用给去掉即可。

November 9, 2020 · 1 分钟 · Remo

【转】10 分钟服务器安全设置,Ubuntu安全设置入门

英文:Cody Littlewood 译者:伯乐在线 – Panblack 链接:http://blog.jobbole.com/103344/ Bryan Kennedy 的《5分钟服务器安全设置》很好地介绍了对多数服务器攻击的防御对策。我们对他的方法做了一些修改,记录下来,作为推广我们的流程和最佳实践的一部分。还增加一些额外的解释,年轻的工程师们应该可以从中受益。 我每天上午检查 logwatch 邮件的时候,看到那些成百上千的登录尝试,几乎没有成功的,完全就像是一种享受。(有很多非常令人无语,比如用 1234 做 root 密码反反复复的登录)。这篇入门文章适用于 Debian/Ubuntu服务器,这是我们最喜欢的服务器发行版,通常我们这些服务器只是作为 docker 容器的宿主机,不过原理仍然适用。下一次我们再深入讲解如何保护专门用作 docker 宿主机的服务器。 在大规模系统上,当然最好是用 Ansible 或 Shipyard 这类工具完全自动化配置。不过偶尔的,你只是搭建一台独立服务器或为一个 Ansible recipe 准备基准设置,这就是本文要涵盖的内容。 声明:本文仅仅是入门和基础,你需要根据自己的需求来扩展。 重要的事先说 我们还没给 root 设密码呢,密码要随机、要复杂。我们用一种密码管理软件的密码生成器,调至最复杂设定。PW 管理软件将密码加密保存,并且由一个很长的主密码保护着。这里提供了多项冗余措施——长、复杂、随机的密码 + 加密保存/另一个长密码保护。不管你是用 PW 管理软件或其他手段,要妥善保管密码并且要加密保存。你只有在忘了 sudo 密码时才会用到这个密码。 # passwd * 注:在 HN 和 Redit 上有很多关于 root 密码的讨论,值得一读。 下一步就需要更新软件库并升级系统、应用最新的补丁。我们后面有个章节专门介绍如何自动安装安全更新。 apt–get update apt–get upgrade 添加用户 永远不要以 root 登录服务器。在用户名方面我们跟 Bryan 遵循类似的惯例,但是你可以根据自己的喜好使用任何惯例。在小团队里,大家共用一个用户名不是问题;但是队伍再大一些的话,最好是给不同的用户设定不同的权限级别,只给精心挑选的少数用户赋予 sudo 权限。...

May 21, 2020 · 3 分钟 · Remo

C#中的 explicit 和 implicit 关键字

简单记录一下。 explicit explicit 用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如如下类型: public class StringCombine { private readonly string _firstString; private readonly string _secondString; public StringCombine(string firstString, string secondString) { this._firstString = firstString; this._secondString = secondString; } public string Combine() { return $"{_firstString} {_secondString}"; } } 可以看到StringCombine类中有一个Combine()方法,用于将该类中的两个私有成有组合后输出: StringCombine stringCombine = new StringCombine("Hello", "world!"); string newString = stringCombine.Combine(); Console.WriteLine(newString); 如上代码将会输出Hello world!。 现在我们在StringCombine类中添加一段代码: public static explicit operator string(StringCombine stringCombine) { return stringCombine.Combine(); } 这时我们稍稍修改一下上面的代码: StringCombine stringCombine = new StringCombine("Hello", "world!...

January 21, 2020 · 1 分钟 · Remo

DataGrip导出CSV文件中文乱码

最近用DataGrip导出查询结果为CSV文件后,用Excel打开发现中文出现乱码的情况: 搜出来很多解决DataGrip中文乱码的方法都不对。后来发现我错怪DataGrip了,原来这是Excel的一个特性导致的:Excel读取文件时,不是默认按照utf-8编码读取的,而是会根据文件的BOM头来识别,如果没有BOM头,则按照unicode编码处理。 而DataGrip导出的CSV文件是不包含BOM头的,所以Excel按照unicode编码读取就会出现中文乱码。 解决方案一 对于已导出的CSV文件,可以用Notepad++或其他文本编辑器打开,然后菜单栏选择“编码”–>“转为UTF-8 BOM编码”,然后保存即可。 这时候再用Excel打开,中文就可以正常显示了。 解决方案二 不直接导出文件,查询出结果后,在结果栏右上角选择导出格式为Tab-separated(TSV),然后选择导出到剪贴板,或者Ctrl+A全选结果后复制,然后直接粘贴到Excel中即可。

December 17, 2019 · 1 分钟 · Remo

【转】C#基础小知识之 yield 关键字

转自博客:一天两天三天 对于yield关键字我们首先看一下 msdn 的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问器是迭代器。 通过使用 yield 定义迭代器,可在实现自定义集合类型的 IEnumerable 和 IEnumerator 模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 IEnumerator)。 yield是一个语法糖 看 msdn 的解释总是让人感觉生硬难懂。其实 yield 关键字很好理解。首先我们对于性质有个了解。yield 是一个语法糖。既然 yield 是在C#中的一个语法糖,那么就说明yield是对一种复杂行为的简化,就是将一段代码简化为一种简单的形式,方便我们程序员使用。 那么yield到底是对什么行为的简化。我们首先来看一下yield的使用场景。 还是来看msdn上的例子。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { foreach (int i in Power(2, 8, "")) { Console.Write("{0} ", i); } Console.ReadKey(); } public static IEnumerable<int> Power(int number, int exponent, string s) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } yield return 3; yield return 4; yield return 5; } } } 这是msdn上yield的一种使用场景。...

August 16, 2019 · 5 分钟 · Remo