我对开源运动的思考

软件历史的里程碑:从UNIX到开源运动 本文回顾了软件历史中的重要里程碑,从UNIX的起源讲起,经历了BSD的发展,GNU和FSF的兴起,以及Linux内核的诞生。文章详细描述了互联网和万维网的诞生对开源运动的重大影响,并分析了开源软件成为“杀手级应用”的过程。文章还探讨了开源革命的经济影响,以及它如何改变了软件行业和整个社会。 阅读详情

今天无事浏览网页,看到袁萌老先生的博客上关于开源软件的一些文章,让我又想起开源软件的前途。我是一个菜鸟级的技术爱好者,热衷于编程,但却没有取得多少成绩。作为一个编程爱好者,我深知开发软件不易,开发出人性化的软件更不易,程序员必须投入大量的精力和时间。试想你花费大量时间和精力写出来的凝聚着你的智慧和心血的软件,你是否愿意开放源代码并且让大家免费使用?开源软件最大的收益者还是用户。我不得不承认,我是中国广大盗版软件用户的一员,在我们周围充斥着各种各样的破解版、修改版、精简版的软件,“有免费的,我们干嘛不用”。这是大多数盗版软件使用者的心理,也是中国人普遍的小市民心理。

这样,在一个技术爱好者和软件用户双重身份的我身上就产生了矛盾!一方面,热衷技术,崇尚技术,希望自己写出的软件得到别人的肯定,这种肯定自然需要金钱来衡定;另一方面,不可能每一个自己使用的软件都由自己来开发,不可避免的要使用别人的软件,而作为一个学生的我,经济能力有限,周围又充斥各种破解版,导致我还是用上了盗版软件。说出来不怕人笑话,现在我电脑里面只要是有版权的软件都是破解版。

或许自由软件可以解决我身上的矛盾,一方面,自由软件还是有他自己的盈利模式的;另一方面,自由软件是免费的。但是,我还是没有使用开源软件,自由软件也没有兴起。我觉得原因有很多,我也说不清楚,大部分软件开发者是不愿意将自己的软件开源的,程序员也是人,程序员也得养家糊口;很多收费软件已经确立了它的市场霸主地位。周围的人用的都是Windows,教科书上讲的最多的也是Windows,Linux我又用不习惯,所以我干嘛不去用盗版的Windows。很多人都说,开源软件使全球开源拥护者智慧的结晶,因此开源软件比收费软件做的好。对于此观点,我却不能苟同,开源软件开发者虽然多,可是与收费软件开发者人数比起来,还是九牛一毛。收费软件由于市场的驱动,做得肯定更人性化一些。虽然开源软件有自己的盈利模式,我们可以看看他主要的七种盈利模式,几乎每种盈利模式都没有收费软件的盈利模式有效,甚至作为收费软硬件的附属品。

我绝对不是开源运动反对者,但是我要说的是:开源运动还有很长的路要走!

合宙ESP32C3实战:MPU6500六轴传感器数据读取与校准全解析 本文详细解析了如何使用合宙ESP32C3开发板读取和校准MPU6500六轴姿态传感器数据。从硬件接线、开发环境搭建到核心代码解析,提供了全面的实战指南,帮助开发者快速掌握传感器配置与数据处理技巧,适用于姿态控制、运动检测等应用场景。 阅读详情

相关推荐

6种常用数据分析方法详解:从描述统计到时间序列

数据分析是连接数据与业务决策的桥梁。面对海量数据,掌握描述性统计与对比分析可快速了解现状与差距;相关分析与回归分析能揭示变量间的关联与影响大小;聚类分析用于用户分群,时间序列分析则预测未来走势。这些方法广泛应用于用户画像、销量预测、活动效果评估等场景,是数据分析师和运营人员必备的技能。系统掌握这6种核心方法的使用场景、原理逻辑与实操步骤,能够帮助读者建立完整分析框架,真正用数据驱动业务增长。

weixin_34405354的博客 335

我对开源运动的看法

    现在开源运动正在轰轰烈烈的展开着,正在软件开发世界形成一股潮流,很多公司,包括很多大公司像google等,也在积极的支持这项运动.当然与此对立的就是那些商业软件了.    其实从很早的时候开始,程序员一直有个共享代码的好传统,后来不知道从什么时候开始商业的保密性开始流行,很多公司不再无私的贡献出自己开发的源代码了.其实软件的开源从很多方面来看都是很有好处的.    一方面它促进了代码的重用

丰盘文档管理软件 2179

Ubuntu 上 1Panel 的安装与高效运维实践

本文详细介绍了在Ubuntu系统上安装和高效运维1Panel面板的完整实践指南。内容涵盖了一键安装、Docker容器可视化部署、计划任务自动化以及网站数据库管理等核心功能,并提供了安全加固、资源监控与数据备份等进阶技巧,旨在帮助用户快速搭建并管理一个强大易用的服务器环境。

weixin_29210759的博客 144

2452.学习周刊-2024年52周

此心光明,亦复何言,这句话是王阳明在临终前对自己一生的评价,心中光明,别人的评论已无关紧要。

紫电的学习笔记 423

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 373

CY7C68013 C0模式启动

C0或是C2启动的目的,是更改USB芯片的ID信息,并把固件载入到芯片内部RAM中运行。C0模式是指只从EEPROM中载入USB ID信息,因为只有ID信息(8个字节),所以只需要一个小容量的EEPROM即可。当然大容量的EEPROM也可以使用C0模式,但是小容量的EEPROM只能使用C0模式启动。如下图所示: 使用小容量的EEPROM要将A0,A1,A2接地。 这里我用了个24LC01,容量1

Fezl的博客 1740

开源贡献最大 我选 微软

刚刚填那个开源调查表,填了下开源贡献最大的我选了微软,虽然我是MS绝对的支持者,但这个选择绝对客观原因很简单,我认为,如果历史上没了MS的出现,没有了MS这么"杰出的‘垄断’",开源会不会出现?开源会不会像今天这样繁荣,我不确定~你也可以想一下,当软件界“百花争鸣”,没有MS的时候,开源会怎样?呵呵,一己之见

xiueplane的专栏 451

超螺旋滑模控制(STA)

超螺旋滑模控制又称超扭滑模控制,可以说是二阶系统中最好用的滑模控制方法。

Lyajpunov的博客 1万+

携手业内专家赋能AI时代--EpiK铭识协议发起开源知识运动

携手业内专家赋能AI时代–EpiK铭识协议发起开源知识运动 1月10日,2021开源数据运动线上研讨会成功举办。EpiK邀请清华大学信息技术研究院副院长邢春晓、中国计算机学会知识图谱SIG主席、著名知识图谱专家王昊奋、著名数据及知识图谱公司创始人及项目负责人王会珍等重量级嘉宾参与,该活动在人工智能及大数据领域引起广泛关注。 此次研讨会,由EpiK铭识协议发起,希望借助区块链去中心化的协作模式搭建一个共建共享共益的开放知识库。这大大迎合了当下“数据开放共享”理念和相关政策,事实上,知识图谱的开放与互联,对于

miahehee的博客 440

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 427

微信公众号网页H5跳转小程序实战指南(开放标签wx-open-launch-weapp)微信H5跳转小程序、wx-open-launch-weapp、小程序跳转按钮、微信开放标签、H5打开小程序

跳转小程序(wx-open-launch-weapp)唤起App显示支付按钮等等……而我们这次要用的,就是跳转小程序的标签。场景是否支持服务号网页✅ 支持小程序静态网页托管✅ 支持订阅号❌ 不支持微信外部浏览器❌ 不支持这个“开放标签”功能其实很强大,除了跳转小程序,还有唤起APP、跳支付、调用客服等能力。但可惜资料零散,很多坑等着你亲自踩一遍。这篇文章我整理的流程基本涵盖了从“能不能跳”到“怎么跳”的完整路径,希望你能像我一样省下几个小时的踩坑时间。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1163

开源软件的真正价值

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33979203的博客 662

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

苏里克——开源软件“传道士”

 苏里克——开源软件“传道士”   作者:英国《金融时报》记者理查德•沃特斯 2005年11月18日 星期五     马休•苏里克(Matthew Szulik)看起来不像是一个理想主义者。首先在软件业从事市场销售,然后负责建设另外两家软件公司,他的经历,不属于那种通常会培养理想主义倾向的经历。作为Linux操作系统最大发行商红帽公司(Red Hat)的董事长和首席执行官,苏里克向

YAN DAI 1464

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

从自由软件到开源软件是文明的进步还是商业的进步?

软件工业文明的社会进化开源软件的诞生 开源软件的诞生 一切事情似乎会有一种计划,但往往在一些必然与偶然之中可以找到一些具体的发展思路与方法。在发布GNU工程的多年中,黑客们似乎是以一种特别的精神与喜好推动着自由软件的发展。正如我们在国内推动工业4.0一样的,前期并没有政府及企业的支持与要求。后期也没有为了政策的引导而进行变形,改变为工业互联网与智能制造。因为这是一种自我的思考与认知。 我们不反对大...

u011480710的博客 208

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

别再错过!这些隐藏版小网站,让你大呼过瘾!

今天给大家分享一些摸鱼小网站,再忙也别忘记摸鱼呀~~~

yang的博客 1万+

Linus Torvalds:Linux背后的智者

编者的话:提起Linux之父Linus Torvalds,人们首先想到的是他的不近人情,总是听说他“炮轰”这个“炮轰”那个,却很难有机会接近他,了解他是个什么样的人。近日,他做客TED,为我们展现了他鲜为人知的一面。他两次改变了技术世界,第一次是Linux,第二次是Git,他是如何想到要开发这两个软件的?他如何看待开源运动?他又是如何评价自己的性格?以下是访谈全文,翻译自TED视频字幕。\\Chr...

weixin_34366546的博客 78

技术人攻略访谈:开放制造的机器之心

本文首发于雷锋网,经作者本人推荐分享至InfoQ中文站。《技术人攻略访谈》系列将在InfoQ上开辟专栏,我们会定期挑选好的访谈在这里分享。\\罗未@WRTnode,豌豆机器小组(WRTnode machine team)发起人。开源硬件领域的万千开发板中,WRTnode是一支新秀,这个体积娇小的板子跑着最新的Linux内核,天生强大的网络交互能力,加上功耗低、信价比高、计算能力强等一系列优势,在公...

cpongo5 478

编程进化史:从打孔到AI的百年跃迁

60-70年代,集成电路技术突破推动硬件小型化和算力提升,硬件架构趋于稳定(冯·诺依曼体系),1972年诞生的C语言兼具高级语言特性和底层控制能力,Unix操作系统和Linux内核的成功证明了其强大生命力。计算机硬件基于真空管和继电器,体积庞大且计算能力有限,程序员需要通过物理开关和插线板输入二进制指令,这种直接操作硬件的编程方式效率极低。编程工作作为一种职业,是伴随着计算机的诞生而产生的,迄今不足百年,但沧海桑田,现在的编程从语言到方法已经与最初的千差万别,其重要性也不可同日而语了。

weixin_48325445的博客 668

OSCON 2014第2天的主题演讲

我们在OSCON 2014第2天的主题演讲中回来了! 这是来自俄勒冈州会议中心的波特兰的实时视频 。 请参阅第1天的主题演讲 。 蒂姆·布雷(Tim Bray):威胁 我们可以通过政治和政策以及通过我们作为工程师的工作来努力改变我们的公民自由和言论自由的许多威胁。 其中一些问题可以在媒体上看到,例如在Model View Culture上,他最近在开源上发布了一个问题,内容涉及开放...

cumo7370的博客 124

《黑客与画家》阅读随笔

一本书,阅读时期不一样,真的有不同的感受,本科时期被推荐,没读;经过读研三年+目前工作三个月,近期再次被推荐,阅读之后,对其中记录下来的话都很有感触。好像是感受到了一些读书的魅力了。

Cailing_CL的博客 279

关于Kalibr开源标定工具箱的思考和避坑建议

Kalibr开源标定工具箱的思考和避坑建议(未完待续),后续会及时更新,不足之处请批评指正。

weixin_42946174的博客 3044

【免费下载】 电力拖动自动控制系统-运动控制系统 课后思考题答案

电力拖动自动控制系统-运动控制系统 课后思考题答案 去发现同类优质开源项目:https://gitcode.com/ 资源简介 本仓库提供的是《电力拖动自动控制系统-运动控制系统》一书的配套资源,特别针对阮毅、陈伯时教授合著版本的课后思考题提供了详细的答案。此文档对于学习电力拖动及运动控制领域的学生和研究者而言,是一个极为宝贵的辅助学习资料。通过深入解析每个思考题目,帮助读者巩固理论知识,加深对自...

gitblog_06692的博客 3011

从OSPO 来思考开源治理问题

相比于OSPO的职责,国内企业对开源治理工作的进行,如果不是国家政策和标准的推动,很可能只是增加对 SCA工具来确保企业自身的开源组件安全。但对于整个软件供应链来说,只靠工具来维护是远远不够的

技术杂谈 3690

MCU开发板如何降低嵌入式开发门槛:从创客运动到实战入门

微控制器(MCU)作为嵌入式系统的核心,其工作原理是通过集成处理器、存储器和外设接口,实现对物理世界的感知与控制。随着半导体工艺进步和模块化设计成熟,MCU成本大幅降低,开发体验也通过高级抽象框架和集成化IDE得到简化,这极大地推动了技术民主化。其技术价值在于将复杂的底层硬件操作封装成易用的函数库,让开发者能聚焦业务逻辑而非硬件细节,从而加速产品原型开发。在应用场景上,MCU广泛应用于物联网设备、智能家居、教育套件和创客项目中,成为连接数字世界与物理世界的桥梁。本文以Arduino、ESP32等流行开发板为

weixin_30546189的博客 317

3个创新方案:重新定义人体运动分析的开源工具

OpenSim作为一个开源肌肉骨骼模拟系统,正在彻底改变我们理解和分析人体运动的方式。想象一下,你能够像工程师分析机械系统一样,精确地量化人体运动的每一个细节——这正是OpenSim带给生物力学研究者和临床医生的核心能力。通过将复杂的生物力学过程转化为可计算、可优化的数字模型,它让运动分析从定性描述走向了精准量化。 ## 行业痛点:为什么传统方法无法解决运动分析难题? 传统的人体运动分析面临着

gitblog_00251的博客 987

中国缺乏独立游戏制作大环境(转载)

作者 钵来僧 一、中国缺乏独立游戏制作的经济基础  让我们先考察公开源代码运动。  当公开源代码运动在全世界如火如荼地展开时,当Open source的大本营sourceforge.net有了上万个公开源代码项目的时候,人们吃惊地发现:做为程序员人数众多的中国,居然对公开源代码运动没有什么贡献:贡献最多的是欧美,日本(愤青不要骂我,日本人贡献的公开源代码Ruby语言现在成了香饽饽,咱们douba...

数据库天地 157
上一篇: MAKEWPARAM
下一篇: 静态切分窗口的替换与更新
yingzai621
博客等级 码龄19年 12粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值