在前面的几篇关于Free编程的讨论示范中我们均使用了基础类型的运算结果.但在实际应用中因为需要考虑运算中出现异常的情况,常常会需要到更高阶复杂的运算结果类型如Option.Xor等.因为Monad无法实现组合(monad do not compose),我们如何在for-comprehension中组合这些运算呢?假如在我们上一篇讨论里的示范DSL是这样的: trait Login[+A] case class Authenticate(uid: String, pwd: String) ext…
方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() print (endtime - starttime).seconds 方法 2 start = time.time() run_fun() end = time.time() print end-start 方法3 start = time.clock() run_fun() end =…
在上一节我们讨论了通过Coproduct来实现DSL组合:用一些功能简单的基础DSL组合成符合大型多复杂功能应用的DSL.但是我们发现:cats在处理多层递归Coproduct结构时会出现编译问题.再就是Free编程是一个繁复的工作,容易出错,造成编程效率的低下.由于Free编程目前是函数式编程的主要方式(我个人认为),我们必须克服Free编程的效率问题.通过尝试,发现freeK可以作为一个很好的Free编程工具.freeK是个开源的泛函组件库,我们会在这次讨论里用freeK来完成上次讨论中以失…
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务必一致 建议4: 避免带有变长参数的方法重载 建议5: 别让null值和空值威胁到变长方法 建议6:覆写变长方法也循规蹈矩 建议7:警惕自增的陷阱 建议8:不要让旧语法困扰你 建议9:少用静态导入 建议10:不要在本类中覆盖静态导入的变量和方法 建议11:养成良好习惯,显示声明UID 建议12:避免…
建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示: 灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,可以再运行期改变类型. 便捷:脚本语言是一种解释性语言,不需要编译成二进制代码,也不需要像Java一样生成字节码.它的…
从上面多篇的讨论中我们了解到scalaz-stream代表一串连续无穷的数据或者程序.对这个数据流的处理过程就是一个状态机器(state machine)的状态转变过程.这种模式与我们通常遇到的程序流程很相似:通过程序状态的变化来推进程序进展.传统OOP式编程可能是通过一些全局变量来记录当前程序状态,而FP则是通过函数组合来实现状态转变的.这个FP模式讲起来有些模糊和抽象,但实际上通过我们前面长时间对FP编程的学习了解到FP编程讲究避免使用任何局部中间变量,更不用说全局变量了.FP程序的数据A是…
一 C语言的历史 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台. 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为A…
附注:不要问我为什么写这么快,是16年写的. 1.名词解释 支持向量机中的机:在机器学习领域,常把一些算法看做一个机器,如分类机(也叫作分类器) 2.问题描述 空间中有很多已知类别的点,现在想用一个面分开他们,并能对未知类别的点很好的识别类别. 3.算法思想 由问题描述可知,现在算法要解决两个问题: 找到一个平面,可以很好的区分不同类别的点,即使分类器的训练误差小,线性可分时要求训练误差为0. 很好的识别未知类别样本的类别,即多大程度上信任该分类器在未知样本上分类的效果. 令满足以上两点的超平面…
Akka是一种消息驱动运算模式,它实现跨JVM程序运算的方式是通过能跨JVM的消息系统来调动分布在不同JVM上ActorSystem中的Actor进行运算,前题是Akka的地址系统可以支持跨JVM定位.Akka的消息系统最高境界可以实现所谓的Actor位置透明化,这样在Akka编程中就无须关注Actor具体在哪个JVM上运行,分布式Actor编程从方式上跟普通Actor编程就不会有什么区别了.Akka的Remoting是一种点对点的跨JVM消息通道,让一个JVM上ActorSystem中的某个A…
F盘   新建文本文档 hello.txt 内容为: print("hello world! hello 2018!"); 打开CMD cd c:\                               \\cd=change directory dir                                    \\查看当前目录的文件列表 先进入文件的位置,在进Python程序的位置 + 文件名称 打开Python的交互界面 cd..                …
变量                                                                                                                                变量: 把程序运算的中间结果赋予一个名字临时存到内存里,以备后面的代码继续调用,这个名字的学名就叫做“变量. 声明变量: name =  "Alex li" 变量规范: 1.变量名只能是 字母.数字或下划线的任意组合 2.变量名的…
平行运算 前言: 编写Python程序时,我们可能会遭遇性能问题,即使优化了代码,程序也依然有可能运行的很慢,从而无法满足我们对执行速度的要求,目前的计算机,其cpu核心数越来越多,于是,我们可以考虑通过平行计算来提升性能,能不能把代码的总计算量分配到多个独立的任务之中,并在多个CPU核心上面同时运行这些任务呢? 很遗憾,Python的全局解释器锁(GIL)使得我们没有办法用线程实现真正的平行计算,因此,上面那个想法行不通.另外一种常见的建议,是用C语言把程序中对性能要求较高的那部分代码,改为扩…
在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到D盘根目录: 3.配置环境变量: 4.下载hadoop的eclipse插件,并将插件放到eclipse的plugins目录下: 5.打开Eclipse,选择菜单"Window"-->"Preferences",在左侧找到"Hadoop Map/Reduc…
我们写的C#程序,很多的时候不是能一次就写对的.尤其是在实际的项目中,你经常要做的工作就是不断修改你写的程序,让它正常运行.程序有错误,主要是两种情况.一种是程序报错了,不能正常运行下去.另一种是程序没有报错,但是程序的执行结果不是我们想要的.通常程序员管这些错误叫做bug.怎么能更容易的找到这些程序的错误呢. Visual Stuido提供了调试的功能让我们可以比较容易的调试程序,更加有效的找到出错的地方. Visual Studio的主要调试功能包括这些: 1. 输出一些关键点的调试信息.…
实例1: 一年365天,,以第一天的能力值为基数1.0,当好好学习时能力值相比前一天提高1%,没有学习时能力值相比前天要降低1%,每天努力和每天放任,一年下来的能力值相差多少? 解析: 如果每天都好好学习的话,就是计算1.01的365次方,为什么是365呢?因为这个能力值1是在第一天就拥有的,然后第一天好好学习就需要乘1.01,作为第一天的收获,第一天为1.0*(1+1%),第二天为1.0*(1+1%)**2.........第365天为1.0*(1+1%)**364.x**y在python中的…
前言 volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~ 1.volatile的用法 2.vlatile变量的作用 3.现代计算机的内存模型(计算机模型,总线,MESI协议,嗅探技术) 4.Java内存模型(JMM) 5.并发编程的3个特性(原子性.可见性.有序性.happen-before.as-if-serial.指令重排) 6.volatile的底层原理(如何保证可见性,…
自从用 dotnet run 成功运行第一个 "Hello world" .NET Core 应用程序后,一直有个好奇心:dotnet run 究竟是如何运行一个 .NET Core 应用程序的? 在 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 与 在Linux上以本地机器码运行 ASP.NET Core 站点 之后,这个好奇心被进一步激发,于是“探秘 dotnet run”顺理成章地成为.NET跨平台之旅的下一站. 首先我们了解一下 dotnet 命令是…
最近用到IAP内置购买,阅读官方文档,在网上找了些资料,在这里作下整理,以便日后查找和修改,主要流程方向确定,文档和相关转载内容截图不一一指出,google一堆. 1.查找官方文档,两张目录截图,对主要流程大致了解:                               官方文档: https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introd…
使用Inno Setup 打包.NET程序,并自动安装.Net Framework http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/2405730.html Inno Setup是什么 Inno Setup 是一个windows系统下的安装包制作程序.它是免费的(而且允许免费用于商业用途).官网网站:http://www.jrsoftware.org/ 虽然说.NET 可以使用VS来打包安装包,但可定制化绝对不如Inno Setup…
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-…
Android实训案例(一)--计算器的运算逻辑 应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了一下,看到mk(没有打广告-.)上有视频,于是看了下他的逻辑,以前还真是小瞧计算器了,计算器要是高级一点的处理起来更加繁琐,这里就做了一个简单一点的,这次用的是Android Studio 开发的,毕竟自己也是一直很推崇AS,但是在之前的博客里都只是为了方便,一直在用Eclipse 一直强烈推荐大家还是转移到AS上去,虽然我…
lambda & 三元运算 lambda: 1 >>> def add(x,y):           #定义一个加法函数 2     return x+y              #返回两个参数的相加的值 3 4 >>> z=f(3,4)                 5 >>> print(z) 6 7                                     #调用加法函数返回7 7 >>> lambd…
这不是标题党,今天给大家推荐一个很棒的国产工具类库:Hutool.可能有很多朋友已经知道这个类库了,甚至在已经在使用了,如果你还没有使用过,那不妨去尝试一下,我们项目组目前也在用这个.这篇文章来简单介绍一下这个类库. 官网地址:https://www.hutool.cn/ Hutool是Hu + tool的自造词,前者是作者致敬他的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界.看来写这个类库的作者(不止一个)也是文艺青年啊. Hutool是一个…
1.创建特性 用于标注依赖注入 using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; namespace Util.Attributes { /// <summary> /// 标注要运用DI的类 被此属性标注的类 要被注册到依赖注入容器中 并且可以指定类要映射的接口或者类 /// 此属性只能运用于类,并且此属性不能继承 /// </summary&g…
今天公司让我把Winform程序里的一块单独成一个exe文件,从原程序中打开新的exe程序,这就涉及到参数的传递,故来记录下传递参数到exe程序的方式 第一种方式 首先在程序A中添加引用using System.Diagnostics; string strA = "hello" + "," + "world"; Process pro = Process.Start(@"C:\testB.exe", strA);//打开程序…
1.输入一个四位数,在控制台分别显示个位,十位,百位,千位的数值 var a = prompt("请输入一个四位数的正整数"); var b = parseInt(a/1000); var c = parseInt(a/100); var d = c%10; var e = a%100; var f = parseInt(e/10); var g = a%10; console.log('千位数是:' + b,'百位数是:' + d,'十位数是:' + f,'个位数是:' + g);…
C# 如何判断指定文件是否正被其它程序使用 起因:项目中发现在操作文件时,系统经常抛出异常,表示文件正被其它程序占用. 需求:为了事先判断,以确认指定的文件是否正被其它程序使用,需要方法进行判断. 思路:在程序中,我们经常遇到读写文件的情况,而这个时候该文件可能被其他程序占用,那么怎么判断文件是否被占用,从而友好的提示用户呢? 这里提供一个简单的办法,他就是尝试着去读该文件,如果失败,则说明文件被占用 实现: /// <summary> /// 返回指示文件是否已被其它程序使用的布尔值 ///…
客户端程序 #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<stdlib.h> #include<stdio.h> #include<errno.h> #include<sys/un.h> #include<fcntl.h> #include<sys/msg.…
1.概述 1.1.为什么要回收? 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断地分配内存空间而不进行回收.除非内存无限大,我们可以任性地分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 1.2.哪些内存需要进行垃圾回收? 对于虚拟机中线程私有的区域,如程序计数器.虚拟机栈.本地方法栈都不需要进行垃圾回收,因为它们是自动进行的,随着线程的消亡而消亡,不需要我们去回收,比如栈的栈帧结构,当进入一个方法时,就会产生一个栈帧,栈帧大小也可以借助类信息确定,然后栈帧入栈,执行方法体,退…
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式.正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性.在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛. 正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等.此外,许多使用比较广泛…