Mryqu's Notes


  • 首页

  • 搜索
close

Windows下MongoDB安装与配置

时间: 2014-03-30   |   分类: db+nosql     |   阅读: 66 字 ~1分钟
到官网http://www.mongodb.org/downloads下载MongoDB并安装在c:\mongodb目录下,安装后需要进行配置才能启动MongoDB。首先创建如下目录: md c:\mongodb\data md c:\mongodb\db md c:\mongodb\log md c:\mongodb\etc 接着创建MongoDB配置文件:c:\mongodb\etc\mongo.conf systemLog: destination: file path: C:/mongodb/log/mongo.log logAppend: true storage: dbPath: C:/mongodb/data/db journal: enabled: true net: http: enabled: true RESTInterfaceEnabled: true 通过如下命令启动MongoDB: C:\mongodb\bin\mongod.exe --config C:\mongodb\etc\mongo.conf 可以通过以下三种方式验证MongoDB是否安装成功: 访问MongoDB监听端口 http://localhost:27017/ ,确认出现类似信息。 通过C:\mongodb\bin\mongo.exe登录Javascript shell并使用 访问HTTP接口 http://localhost:28017/ 并查看MongoDB服务器信息 在启动MongoDB的窗口通过Ctrl+ C停止MongoDB的运行。 最后通过如下命令将MongoDB配置成Windows服务: C:\mongodb\bin\mongod.exe --config C:\mongodb\etc\mongo.conf--install 当然也可以通过如下命令手工配置Windows服务: sc create MongoDB binPath= "C:\mongodb\bin\mongod.exe--config=C:\mongodb\etc\mongo.conf--service" start= demand DisplayName= "MongoDB" 参考 Install MongoDB on Windows MongoDB Configuration Options

重温MVC:一个很好的MVC图

时间: 2014-03-26   |   分类: Tech     |   阅读: 12 字 ~1分钟
今天看了一个帖子A terrific Model View Controller (MVC) diagram,感觉文中说的很对:一个技术如果能简洁地表达出来,才容易被人记住并记的牢。该文中的Model/View/ControllerUML图共有两个,第一个图非常简单,仅展示作者用于控制器、视图和模型的符号。第二个图展示了MVC模式允许的操作和禁止的操作。 用户与视图对象交互。 视图对象和控制器对象可以相互访问调用。 不同的控制器对象之间可以相互访问调用。 控制器对象可以访问调用模型对象。 除了上面这四种访问方式,禁止对象之间的其他通信方法。

玩一下LineNumberReader

时间: 2014-03-26   |   分类: Java     |   阅读: 99 字 ~1分钟
找资料的副产品就是发现了LineNumberReader这个类,跟它的父类BufferedReader相比多了计算文件行数的功能。记不得以前是否用过了,这里记录一下备用。 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class TestFileLineNum { public static int countLinesV1(String flName) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(flName)); int cnt = 0; while (reader.readLine() != null) { cnt++ ; } reader.close(); return cnt; } public static int countLinesV2(String flName) throws IOException { LineNumberReader reader = new LineNumberReader(new FileReader(flName)); while (reader.readLine() != null) { } int cnt = reader.getLineNumber(); reader.close(); return cnt; } public static void main(String[] args) throws IOException { for(int i=0;i<4;i ) { String flName = "test" + i + ".
阅读全文 »

[算法] 学习无向图

时间: 2014-03-21   |   分类: Algorithm.DataStruct     |   阅读: 246 字 ~2分钟
本文是学习http://algs4.cs.princeton.edu/41graph/的吐槽和体会。 一点吐槽 一开始对GraphClient.java中numberOfSelfLoops函数进行count/2不解,翻回Graph.java,看看addEdge函数才明白,合着对自循环连接,adj里面加两次。这么干有什么好处么?!! 再后来看Cycle.java,对hasParallelEdges函数又不解,仔细想想Graph.java不但接受addEdge(1,23)和addEdge(23, 1),对执行多次addEdge(1,23)也不拒绝。一个无向图这么弄,对么?算不算检查不严格呀?!! 理解Cycle.java 示例代码: public static void main(String[] args) { Graph G = new Graph(4); G.addEdge(0, 1); G.addEdge(1, 2); G.addEdge(1, 3); G.addEdge(2, 3); Cycle finder = new Cycle(G); if (finder.hasCycle()) { for (int v : finder.cycle()) { StdOut.print(v + " "); } StdOut.println(); } else { StdOut.println("Graph is acyclic"); } } dfs搜索: |上一节点u|当前节点v|下一节点w|注解 |—– |-1|0|1|节点1没有标注,嵌套dfs |0|1|3|节点3没有标注,嵌套dfs |1|3|2|节点2没有标注,嵌套dfs |3|2|1|节点1已标注,发现cycle,创建栈,依次: (在for循环中)push 2 (在for循环中)push 3 push 1 push 2说白了就是当发现下一节点w已经标注,那就返回去找w到v的路径,然后凑上w和v,就是一个环路。 理解Bipartite.java 二分图又称作二部图、两偶图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(iin A,j in B),则称图G为一个二分图。
阅读全文 »

GitHub fork操作

时间: 2014-03-17   |   分类: Tool   Git     |   阅读: 57 字 ~1分钟
Fork(分支)操作不是Git实现的一部分,仅是GitHub独有的一个在服务器端克隆代码库的操作。假定我作为GitHub用户usr2,对用户usr1的github.com/usr1/demo代码库有兴趣。我可以通过clone命令将该代码库克隆到本机,并且可以通过pull命令获得该代码库的更新。但是除非用户usr1将我(用户usr2)设为该代码库的贡献者,否则我无法将我提交的修改通过push命令推送到该代码库。但是通过fork操作,我就可以将github.com/usr1/demo代码库完整复制到我的GitHub帐号下(包括代码库中的文件、提交历史、问题等等),例如下图的github.com/usr2/demo。我可通过clone命令将自己的github.com/usr2/demo代码库克隆到本机,我完全有权限将本机提交的修改通过push命令推送到上述自己的代码库。如果我希望我的修改被usr1采纳,我可以发送一个pullrequest通知usr1。至于usr1是否接收我的修改,决定权在usr1。克隆代码库的时候,所使用的远程代码库地址自动被Git命名为origin。其效果类似于: git remote add origin git://github.com/usr2/demo.git github.com/usr2/demo代码库在fork操作之后就不再获得github.com/usr1/demo的后继更新了。可以手工添加github.com/usr1/demo为上游代码库地址: git remote add upstream git://github.com/usr1/demo.git 我可通过fetch命令获取上游代码库的更新,在本机合并后,通过push命令推送到自己的远程代码库。 参考 GitHub help: Fork A Repo GitHub help: Syncing a fork GitHub help: Adding collaborators to a personal repository Simple guide to forks in GitHub and Git stackOverflow: Git fork is git clone? stackOverflow: What is the difference between origin and upstream in github

转战Octave

时间: 2014-03-16   |   分类: Tech     |   阅读: 11 字 ~1分钟
可赶上机器学习的课了,原来学过《集体编程智慧》里面机器学习算法的Python实现,这次想着有个巩固提高。可是老师偏偏使用Octave,杂就杂吧,学学matlab风格的编程也不错。 Matlab是一款数值计算和分析的优秀软件,可是价格昂贵。其开源替代品就是Scilab和Octave。 Scilab是由INRIA(法国国立计算机及自动化研究院)和ENPC(法国国立桥梁学院)开发的开源科学计算自由软件。与Matlab类似,Scilab数据类型丰富,可以很方便地实现各种矩阵运算与图形显示,能应用于科学计算、数学建模、信号处理、决策优化、线性/非线性控制等各个方面。它还提供可以满足不同工程与科学需要的工具箱,例如Scicos,信号处理工具箱,图与网络工具箱等。可以说,就基本的功能如科学计算、矩阵处理及图形显示而言,Matlab能完成的工作Scilab都可以实现。由于Scilab的语法与Matlab非常接近,熟悉Matlab编程的人很快就会掌握Scilab的使用。有意思的是,Scilab提供的语言转换函数可以自动将用Matlab语言编写的程序翻译为Scilab语言。 GNU Octave是自由软件基金会支持的遵循GPL协议的一个自由再发布的软件,作者是以John W.Eaton为首的一些志愿者。它提供了一个环境,该环境支持叫做GNUOctave的高级语言,这种语言与Matlab兼容,主要用于数值计算。它提供了一个方便的命令行方式,可以数值求解线性和非线性问题,以及做一些数值模拟。 Octave也提供了一些工具包,可以解决一般的线性代数问题,非线性方程求根,常规函数积分,处理多项式,处理常微分方程和微分代数方程。它也很容易的使用Octave自带的接口方式扩展和定制功能。 Octave相对于Scilab,对Matlab的语法兼容性更好,几乎没有差别。比如,Octave也使用M文件的形式来扩展功能和定义函数。因此熟悉Matlab的用户更容易接受Octave环境。 它可编程的性能更好,Octave语言功能更为强大,几乎提供所有系统函数的支持,Octave在语法上也更接近C的语法,比如提供++和–这样的预算符。这样,我们可以在Octave环境里面增加一些更为强大和易用的扩展。不象在Matlab和Scilab环境中限制比较多,有时无法充分的利用系统资源。它的计算库都是用C写,而Scilab则基本是Fortran的编写的。这也是一份有用的资源。和GNU下面的其他软件也可以较多协作。劣势就是Octave的功能比起Scilab要简单一些,这使得Octave对一些用户来说意义不如Scilab大。而且Octave目前没有图形界面,只能以命令行方式进行交互。 第一次编程作业的效果图: 将原来的一些编程思路转换成矩阵和矢量是一个挑战,对于复杂一些编程,还是逃不开纠结和调试。

[Hadoop] 压缩MapReduce的Mapper输出

时间: 2014-03-03   |   分类: BigData     |   阅读: 17 字 ~1分钟
介绍 压缩map输出是以压缩和解压缩的CPU消耗为代价来减少磁盘和网络IO开销。Hadoop中,mapper的输出数据是写到Mapper所在的本地磁盘的,并以网络传输的方式传送到Reducer所在的节点上。mapreduce.map.output.compress默认为false,即不对map输出进行压缩。如果中间数据不是二进制的,通常建议使用map输出压缩。 Hadoop支持的的内建压缩编码如下: 如果设置mapreduce.map.output.compress为true且没有设置mapreduce.map.output.compression.codec的话,默认使用org.apache.hadoop.io.compress.DefaultCodec。 |压缩格式|算法|工具|默认扩展名|说明 |—– |DEFLATE|DEFLATE|N/A|.deflate|DEFLATE是一种压缩算法,标准实现是zlib,尚没有命令行工具支持。文件扩展名.deflate是一个Hadoop的约定。所有的压缩算法都存在空间与时间的权衡:更快的压缩速率和解压速率是以牺牲压缩率为代价的。org.apache.hadoop.io.compress.zlib.ZlibCompressor.CompressionLevel中定义了0~9压缩级别,0为无压缩,9为最佳压缩。支持Java实现和原生库实现。 |GZip|DEFLATE|gzip|.gz|GZip与DEFLATE使用同样的压缩算法,不过相对于DEFLATE压缩格式增加了额外的头部和尾部。GZip是一种常规的压缩工具,空间与时间得到很好的权衡。支持Java实现和原生库实现。 |BZip2|BZip2|BZip2|.bz2|BZip2压缩率高于GZip,但压缩速度较慢;解析速度优于它的压缩速度,但还是较其它压缩算法偏慢。由上图可知,BZip2是Hadoop内嵌压缩算法中唯一可以被分割的,这样一个输入文件可分成多个InputSplit,便于本地数据加载并被Mapper处理。相关技术可见处理跨块边界的InputSplit一文。支持Java实现和原生库实现。 |LZ4|LZ4|N/A|.lz4|LZ4和Snappy相对于GZip压缩速度得到很大提升,但没有GZip的压缩率高。仅支持原生库实现。org.apache.hadoop.io.compress.Lz4Codec.isNativeCodeLoaded()用于检查是否加载原生库,其调用者在没有加载原生库时会抛异常。 |Snappy|Snappy|N/A|.snappy|LZ4和Snappy相对于GZip压缩速度得到很大提升,但没有GZip的压缩率高。仅支持原生库实现。org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded()在没有加载原生库时会抛异常。 如果使用原生库压缩编码,需配置LD_LIBRARY_PATH。默认情况下,Hadoop自动在本地库路径(java.library.path)下查询并加载合适的本地库实现。通过设置属性io.native.lib.available为false禁用原生库,此时内建的Java实现将被使用。 Hadoop源码分析 在org.apache.hadoop.mapred.MapTask.MapOutputBuffer.init(Context)和org.apache.hadoop.mapred.ReduceTask.initCodec()方法中检查mapreduce.map.output.compress属性,如果为true,则加载mapreduce.map.output.compression.codec属性所设的压缩编解码器。 MapTask当将数据spill到硬盘时使用压缩编码器进行数据压缩。 ReduceTask在使用Shuffle结果是使用压缩解码器进行数据解压缩。 使用map输出压缩的应用示例

[算法] Mergesort练习

时间: 2014-02-20   |   分类: Algorithm.DataStruct     |   阅读: 650 字 ~4分钟
本作业帖用于练习http://algs4.cs.princeton.edu/22mergesort/里面的作业。 Merge with atmost log N compares per item. Design a mergingalgorithm such that each item is compared at most a logarithmicnumber of times. (In the standard merging algorithm, an item can becompared N/2 times when merging two subarrays of size N/2.) reference Lower boundfor sorting a Youngtableaux. A Youngtableaux is an N-by-N matrix such that theentries are sorted both column wise and row wise. Prove thatTheta(N^2 log N) compares are necessary to sort the N^2 entries(where you can access the data only through the pairwisecomparisons).
阅读全文 »

[算法] 求数组中倒置个数

时间: 2014-02-19   |   分类: Algorithm.DataStruct     |   阅读: 43 字 ~1分钟
http://algs4.cs.princeton.edu/22mergesort/中有一道题是求数组中倒置个数的,原题如下: Inversions. Develop and implement alinearithmic algorithm Inversions.java forcomputing the number of inversions in a given array (the number ofexchanges that would be performed by insertion sort for thatarray). This quantity is related tothe Kendall tau distance; 解决思路: Inversions.java在做MergeSort的过程中顺便求出了数组中倒置个数。假设上图中已经获得左右两个子部分中的倒置个数并进行了MergeSort。现在学习一下做整个数组的Merge时如何顺便计算这一层的倒置个数。 当aux[0]和aux[5]进行比较时,A小于E,则可知A比左半部分都小(少比较了4次),倒置+5 当aux[0]和aux[6]进行比较时,C小于E,则可知C比左半部分都小(少比较了4次),倒置+5 当aux[2]和aux[7]进行比较时,E小于G,则可知E比左半部分中G及其之后的数都小(少比较了2次),倒置=+(4-2+1)=+3 整个数组的倒置数为左边部分内部倒置数+右边部分内部倒置数+13。算法时间复杂度为NlogN。

Markdown介绍

时间: 2014-02-19   |   分类: Tech     |   阅读: 341 字 ~2分钟
Markdown是一种用于普通文本的便于读写的轻量级标记语言,可以转换成HTML、LaTeX或Docbook文档。很多网站都支持Markdown,如GitHub、Wikipedia和博客平台WordPress。RMarkdown将R代码和markdown进行有效集成以用于文学编程(LiterateProgramming),R代码会在RMarkdown转化markdown处理过程中被执行,并将R代码结果一同插入markdown文档。下面的示例是基于knitr工具完成RMarkDown转换的。 Markdown 文字样式:斜体和粗体、删除线 *斜体表述1* 和 _斜体表述2_ 示例。 **粗体表述1** 和 __粗体表述2__ 示例。 ___斜粗体表述1___ 和 ***斜粗体表述2*** 示例。 ~~删除线表述~~ 示例。 斜体表述1 和 斜体表述2 示例。粗体表述1 和 粗体表述2 示例。斜粗体表述1 和 **斜粗体表述2**示例。删除线表述 示例。 段落和换行 一个空行(两个回车)会被转换成分段,在行末加两个或多个空格会被转换成换行。 标题 在行首用一到六个井号 (#) 开始该行为标题行 # H1示例 ## H2示例 ### H3示例 #### H4示例 ##### H5示例 ###### H6示例 H1示例 H2示例 H3示例 H4示例 H5示例 H6示例 另一种方式用下一行的一到多个等号表示一级标题,一到多个短划线表示二级标题。 H1示例 ========= H2示例 --------- H1示例 H2示例 水平分割线 通过单行输入3个或3个以上中短划线、星号或下划线进行输入水平分隔线, 短划线、星号或下划线之间可以包含空格: --- *** ___ - - - * * * _ _ _ 列表 HTML 列表分无序列表 (unordered list, ul) 和有序列表 (ordered list, ol) 两种。在Markdown 中用星号、加号、减号开始一行表示无序列表,用数字开始一行表示有序列表。例如:
阅读全文 »
45 46 47 48 49 50 51 52 53

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%