XmlReader是.NET中处理XML的类。之前的W3C已经提出了DOM和SAX两种模型。作为最早的模型,这两种模型在各种语言中都有相应的实现,关于它们的讨论也有很多,在此不再赘述。
XmlReader是一种快速、无缓冲、向前并只读的轻量级XML引擎,在这一点上它和SAX是相同的。它和SAX的主要区别在于它们的设计模式是不同的。SAX是push模式的XML引擎,它会在读到相应的节点时,触发消息并将之发送给调用程序。而XmlReader则是pull式的XML引擎,它更符合人们的通常的对文件顺序处理的习惯。当然除此之外,它还有其他的好处。参看MSDN的相关章节。
通常情况下,pull模型比push模型的效率高,但push模型的灵活性要高些。例如,Dos下的编程主要是一种顺序执行的pull模型结构,而Windows下的编程则是一种基于消息的push模型结构。所以,读取特定标签内容的XML文档,采用XmlReader比较好,而对于那些结构不固定或需要遍历的XML文档用SAX较好。
PS: XmlReader提出的pull方案,后来被libxml2采用,成为了GTK+的一部分。
这是一个Wince的类。由于.NET CF中的System.Windows.Forms.Form没有DefWndProc参数,所以要想接收窗体消息就要用到它。不过它的dll需要自己添(在.NET CF的安装路径下可以找到这个Microsoft.WindowsCE.Forms.dll),接收C++编程时的那些WM_开头的消息时需要用到这个模块中的MessageWindow类。
代码示例如下:
public class MsgWindow : MessageWindow
{
public const int WM_CUSTOMMSG = 0x0400+3333;
private Form1 msgform;//Form1是用于接收消息的那个窗体Form。
public MsgWindow(Form1 msgform)
{
this.msgform = msgform;
}
protected override void WndProc(ref Message msg)
{
switch (msg.Msg)
{
case WM_CUSTOMMSG:
//do sth
break;
}
base.WndProc(ref msg);
}
}
C#项目属性中有个publish标签是关于发布程序的功能的。用过Java的人都知道,Java的可移植性是很不错的,但Java程序的部署相对于一般 的本地程序来说就显得比较麻烦了。至少在本人的程序生涯中,就多次经历拿着JAR文件兴冲冲的跑去,却发现目标机没有JRE的情况。
C#中的发布功能除了能打包程序和.NET Framework之外,还有网络发布的功能。这里我主要讨论单机程序的打包。如果只有程序文件的话,情况比较简单,没什么难度。如果还有数据文件的话就 要注意了。在程序文件(Application Files)对话框中,每个文件有一个发布状态(Publish Status)的属性,如果你希望数据文件和程序文件在同一个文件夹下的话,最好选择包含(Include)而不是数据文件(Data File),后者会把你的数据文件部署到一个专门的数据文件夹下,这个文件夹可用 System.Deployment.Application.DataDirectory获得。
.NET的跨平台一直不咋样,直到2014年MS推出的.NET core才有所改观。虽然.NET core可以开发C#应用,然而仅仅局限于非GUI的应用,所以目前更推荐使用Mono方案。
Mono早先是Xamarin推出的跨平台.NET替代项目,目前已经被MS收购,按照MS的路线图,Mono将作为非Windows平台的.NET方案而存在。它将和Windows平台的.NET方案共用.NET core的代码。
官网:
https://www.mono-project.com/
Mono有个IDE,叫做MonoDevelop。
官网:
https://www.monodevelop.com/
安装方面,尽管ubuntu的仓库已经有了Mono,但是却没有MonoDevelop,且该Mono版本与最新的MonoDevelop不兼容,因此还是老老实实采用官网的方案安装吧。
参考:
https://www.cnblogs.com/shanyou/p/4295163.html
.NET Core与.NET Framework、Mono之间的关系
https://www.cnblogs.com/wer-ltm/p/8776846.html#!comments
.NET:持续进化的统一开发平台
https://mp.weixin.qq.com/s/j5PFEkWd49SNKVdlWoqHiw
.NET Core很酷,你不得不知!
安装:
sudo apt install gtk-sharp3
编译:
mcs helloworld.cs -pkg:gtk-sharp-3.0
https://www.mono-project.com/docs/gui/gtksharp/hello-world/
gtksharp
NuGet是C#项目的包管理工具,作用类似maven、pip。
官网:
https://www.nuget.org/
https://www.zhihu.com/question/20451584
Java和C#最大的不同是什么?
https://blog.csdn.net/dodream/article/details/4719578
CLR、CLI、CTS、CLS的关系
https://www.zhihu.com/question/576573706
C#有方法可以直接编译成机器语言运行吗?(NativeAOT)
客观的说,目前开源领域并没有很好用的和Lisp配套的GUI工具集,几个开源实现要么完工度不高,要么过于古老,好几个的样式都是90年代中期的风格。
更有人指出,GUI基本上是OO语言的天下了,Lisp根本不适合干这个事。
不过事实的真相是:
1.最早的交互式GUI生成工具是用Lisp写的。没错,就是苹果乔教主旗下的Interface Builder,时间是1986年。
2.PTC公司的CAD系统是用Lisp和C++写的。
3.苹果公司早期使用MCL作为GUI开发语言(from 1984),因此那个时代有大量的程序是用Lisp写的。包括Mac上最早的MS Word。Objective-C是乔教主到NextStep之后的事,最初和苹果并无交集。
4.由于Mac在艺术家群体的流行。很多音乐软件是用Lisp写的,包括Open Music, PWGL, ScoreCleaner, Igor Engraver和Symbolic Composer等。
5.有家叫做LispWorks(From 1989)的公司提供对Lisp GUI的商业支持,而且提供的界面并不逊色于GTK、Qt等当代GUI工具集。上面提到的音乐软件基本上都是基于LispWorks的。
综上可见,Lisp开发GUI不是可能性的问题,而是一个有待重新发掘的问题。
Kotlin是一门编程语言,由JetBrains公司开发,与Java 100%互通。
官网:
http://kotlinlang.org/
官网文档:
http://kotlinlang.org/docs/reference/android-overview.html
国内中文文档:
https://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/
国内中文文档2:
http://www.liying-cn.net/kotlin/docs/reference/
国内中文文档3:
https://www.kotlincn.net/
官方示例:
https://github.com/Kotlin/kotlin-examples
Lua的包管理工具叫做LuaRocks。官网:
https://luarocks.org/
参考:
https://mp.weixin.qq.com/s/nwhSDxz1Pu2JCU_IeMR9ww
Lua程序逆向之Luac文件格式分析
http://lua-users.org/wiki/GraphicalUserInterfaceToolkits
Lua的GUI工具列表
https://mp.weixin.qq.com/s/BFIBTkdHAy38FiNGiuLYbQ
深入理解Lua虚拟机
官网:
https://www.haskell.org/
Haskell主要有两套包管理系统cabal和stack,它们的仓库都是一样的,只是前端语法不同。stack相对比较新,也是目前的首选。
Haskell的官方仓库:
http://hackage.haskell.org/
清华镜像:
https://mirrors.tuna.tsinghua.edu.cn/help/hackage/
Haskell的安装有多种模式,推荐Stack模式,直接使用Stack安装所需要的依赖。
Stack的官网:
https://www.haskellstack.org/
然而国内访问不了,幸好有github:
https://github.com/commercialhaskell/stack/releases/
PC上搭建Objective-C(以下简称OC)开发环境,主要借助GNUstep开源项目的成果。
以Ubuntu为例,步骤如下:
1.安装软件包。
sudo apt install gnustep-devel libjpeg-dev libtiff5-dev gobjc-4.9
2.设置环境变量。
GNUSTEP_MAKEFILES=/usr/share/GNUstep/Makefiles
普通模式:使用vim打开一个文件时默认模式,也叫命令模式,允许用户通过各种命令浏览代码、滚屏等操作。
插入模式:也可以叫做编辑模式,在普通模式下敲击 i 、a 或 o 就进入插入模式,允许用户通过键盘输入、编辑。
命令行模式:在普通模式下,先输入冒号:,接着输入命令,就可以通过配置命令对vim进行配置了,如改变颜色主题、显示行号等,这些配置命令也可以保存到/etc/vim/vimrc配置文件中,每次打开默认配置执行。
可视化模式:在普通模式下敲击前盘上的 v 键,就进入可视化模式,然后移动光标就可以选中一块文本,常用来完成文本的复制、粘贴、删除等操作。
替换模式:如果我们想修改某个字符,不需要先进入插入模式,删除,然后再输入新的字符,直接在普通模式下,敲击R键就可以直接替换。
EX模式:类似于命令行模式,可以一次运行多个命令。
用户统一使用ESC键返回到普通模式。
dd
: 删除整行
/
是向下查找,而?
是向上查找,n是继续查找。
u
——撤销上一个编辑操作
:set nu
: 显示行号
:行号
: 跳转到行号
yy
: 复制整行
p
: 粘贴
vim -on file1 file2 ...
:上下分屏。n为分屏个数。
vim -On file1 file2 ...
:左右分屏。
:new
——创建一个空白分栏界面,和原文件窗口上下排列。
:split
——将当前文件分成上下两栏显示。
:vnew
和:vsplit
——功能相同,不同的是新窗口是左右排列的。
:only
——取消分屏。
按下ctrl+w之后再利用方向键或者h,j,k,l可以选择当前激活的窗口。
把光标移动到下一个的屏:ctrl+w w
把光标移动到上一个的屏:ctrl+w p
关闭其他窗口:Ctrl + w, o
关闭当前屏:Ctrl+w,c
:vertical diffsplit file2
——垂直对比两个文档。
NeoVim是Vim的派生品,以及最有力的竞争者。
https://mp.weixin.qq.com/s/k5zdN0rJtVBSVMK4_6g5Bw
年仅62岁!开源巨擘“Vim之父”因病离世,一生写下Vim传奇
https://mp.weixin.qq.com/s/5694PDHy9BeoL8qy31MaxQ
如何用vim格式化代码
https://mp.weixin.qq.com/s/QpJWyLY5AyrXGF-j7LYTGg
1700页数学笔记火了!全程敲代码,速度飞快易搜索,硬核小哥教你上手LaTeX+Vim
https://mp.weixin.qq.com/s/tvn2SKXyrZZRGDF6-Myx3A
Vim激荡30年发展史
https://mp.weixin.qq.com/s/c9KAOJ6Z_5zjwI7C3OMq4w
5分钟学会Vim分屏操作方方面面
https://www.runoob.com/linux/linux-vim.html
Linux vi/vim
https://zhuanlan.zhihu.com/p/37352209
VimScript五分钟入门
您的打赏,是对我的鼓励