原来.NET写的Linux桌面这么好看?

如何使用BlazorLinux平台下运行Desktop程序

本文将讲解如何使用Blazor运行跨平台应用,应用到的技术有以下几点

  • Blazor
  • Masa Blazor
  • Photino.Blazor
  • Ubuntu

用于验证跨平台性,并且是否提高开发效率,Blazor和Photino一块使用的技术称为Blazor Hybrid

Blazor的优点

Blazor是一种使用.NET和C#构建客户端Web应用程序的新兴技术。它允许开发者在浏览器中直接运行.NET代码,而无需依赖JavaScript。Blazor的技术优点主要表现在以下几个方面:

  1. 单一语言栈:Blazor允许开发者使用C#和.NET进行全栈开发。一种语言用于前端和后端可以大大简化开发过程,减少错误并提高效率。不再需要在JavaScript和C#之间来回切换,这减少了上下文切换的复杂性和出错的可能性。相比之下,传统的Web开发需要使用JavaScript、HTML、CSS等多种语言,而且JavaScript并不具备强类型特性,因此更容易出错。

  2. 运行在WebAssembly:Blazor利用WebAssembly(Wasm)技术,在浏览器中运行.NET代码。WebAssembly是一种在现代浏览器中运行的低级语言,它比JavaScript更接近机器语言,所以运行速度更快。而且,WebAssembly在浏览器中的执行环境是沙盒化的,这意味着它可以在不影响其他系统资源的情况下安全地执行。

  3. 强类型检查:Blazor使用C#,这是一种强类型语言。相比于JavaScript,强类型语言可以在编译时捕获更多的错误,降低运行时出错的可能性。同时,强类型语言可以提供更好的自动完成、重构和智能提示功能,这些都可以大大提高开发效率。

  4. 复用代码和库:由于Blazor使用.NET,你可以在前端和后端共享相同的数据模型和业务逻辑代码,避免了因为同步前后端代码而产生的大量重复工作。此外,.NET的库生态系统非常丰富,这意味着你可以在Blazor应用中直接使用大量现有的库和框架,无需对其进行修改。

  5. 组件化架构:Blazor采用了组件化的设计模式,这使得你可以创建可复用的UI组件,提高代码的可读性和可维护性。组件化架构也使得测试变得更加容易,因为每个组件都是独立的,可以单独进行测试。

  6. 与现有技术的兼容性:Blazor并不排斥其他Web技术。你可以在Blazor应用中使用JavaScript和JavaScript库,也可以将Blazor组件嵌入到现有的MVC或Razor Pages应用中。这种兼容性使得Blazor更加灵活,可以适应各种复杂的需求。

  7. 现代化的开发体验:Blazor支持热重载,这使得你可以在保存代码更改后立即在浏览器中看到效果,无需手动刷新页面。这大大提高了开发效率,让开发者可以快速迭代和调试。此外,Blazor还支持使用SignalR实现实时通信,使得创建实时Web应用变得更加简单。

  8. Microsoft的支持:Blazor作为Microsoft推出的一项技术,得到了强大的技术支持。Microsoft为Blazor提供了完善的文档,使得开发者可以快速学习和掌握这项技术。此外,Microsoft还定期发布更新,以增强Blazor的功能、改进性能和修复问题。强大的社区支持也是Blazor的一大优势,开发者可以在社区中寻求帮助、分享经验或参与到项目的贡献中。

  9. 跨平台支持:Blazor应用可以在任何支持WebAssembly的浏览器上运行,这意味着它具有出色的跨平台兼容性。你可以使用Blazor开发桌面、移动和Web应用,而无需针对不同平台编写不同的代码。

  10. 安全性:Blazor支持ASP.NET Core Identity和OAuth 2.0等安全认证和授权机制。你可以方便地为你的应用程序添加安全措施,以保护用户数据和应用程序资源。

  11. 可扩展性:Blazor的设计允许开发者创建自定义组件、中间件和服务,以满足特定需求。这使得Blazor具有很高的可扩展性,可以适应各种复杂的应用场景。

  12. 渐进式Web应用(PWA)支持:Blazor支持创建渐进式Web应用(PWA),这意味着你可以创建可离线运行、具有原生应用般表现的Web应用。PWAs在性能、可访问性和用户体验方面具有很多优势,使得它们越来越受到开发者和用户的青睐。

  13. Server-Side Blazor(Blazor Server):Blazor还提供了一种服务器端渲染模式,称为Blazor Server。在这种模式下,Blazor应用的所有逻辑都在服务器上运行,浏览器只负责显示UI。这使得应用的启动速度更快,同时减轻了客户端的负担。Blazor Server通过SignalR实现实时通信,确保UI与服务器状态同步。

    总之,Blazor作为一种使用.NET和C#构建客户端Web应用程序的技术,具有许多显著的优点,包括单一语言栈、WebAssembly支持、

开始使用Masa Blazor

开始我们的第一步,安装Masa Blazor的模板,请注意模板版本1.0.0-rc.2,只有1.0.0-rc.2才有新的项目模板

dotnet new install Masa.Template::1.0.0-rc.2

image.png

安装完成以后,我们发现Masa Blazor提供了.NET 的基本上所有平台的模板了,当然我们这篇只讲解Photino

好了继续我们创建项目模板。打开vs我们会发现在MASA下面出现了很多项目的模板,我们创建第一个Masa Blazor Photino App(MASA),然后默认选项创建项目,然后启动项目。

image.png

这是提供的一个默认的模板

image.png

在win下正常运行了,然后我们想要在Linux下尝试是否能正常运行,准备发布项目,右键我们的项目=>发布=>文件夹
image.png

由于我的Ubuntu系统是没有安装SDK的所以我就发布独立模式!然后将部署文件移动到Ubuntu
image.png

然后在当前目录下打开控制台

给予程序可执行权限,然后运行项目

sudo chmod +x MasaBlazorApp1
./MasaBlazorApp1

image.png

这是运行的效果。这是最简单的方式,下面我把Masa Pro提供的代码迁移到当前Demo中并且在Linux中运行

下面是移植在Window运行的效果
image.png

,然后继续之前的操作,发布Linux应用,然后运行
image.png

一个超好看的Linux桌面程序就写好了,非常简单,项目地址放在最下面

来自token的分享

技术交流群:737776595

项目地址:http://github.com/239573049/Photino.Masa.Blazor.Pro

由Masa Blazor赞助(快乐肥宅水)

本文转载于网络 如有侵权请联系删除

相关文章

  • Python自学教程1-安装pycharm和执行环境

    Python虽然简单,但是很多没有接触过的学起来还是比较困难的。因此很多人会报班去学,我觉得不需要花那个钱,只要方向正确,加上核心知识点的提炼,自学一个月左右就能上手。我尝试写下这个自学教程,只讨论核心知识点,跟着做,自学也可以的。如何学好一门编程语言python是最容易入门的一门语言,但是精通python是非常困难的。实际上,就算是那种天才选手,要精通一门编程语言也需要很多年持续不断的研究。而我们普通人,可能穷其一生,也达不到精通的程度。现在很多书籍,都越写越厚,很多的教程,都越做越长,这样他们可以收更多的版税,收更高的学费。但是有经验的人稍微翻一翻,就能看到破绽,很多的内容你这辈子可能都用不到。所以一定要挑重点去学编程。什么是重点呢?就是你即将用到的,马上就可以投入使用的,用到什么学什么。以项目和实战驱动,去学该学的内容。学习编程语言一定不要求多,而是要求精。python如何安装在任何的电脑上,想运行python代码都需要下载python解释器,解释器就是一个做好的软件,和其他软件没什么区别,只需要到官网上下载,点击安装就可以完成了。解释器有很多版本,每个版本都会加一些新功能和特性

  • Android - Mac & FFmpeg & AndroidStudio & CMake 环境搭建

    基础环境MacOS10.12.3AndroidStudio2.3NDK13.1.*FFmpeg3.2.*下载FFmpeg源码1gitclonehttps://git.ffmpeg.org/ffmpeg.git切换到3.2分支1gitcheckout-b3.2remotes/origin/release/3.2当然你也可以去去官网下载压缩包。编译FFmpegforAndroid修改FFmpeg的configure打开configure文件,找到:1234SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'替换成:1234SLIBNAME_WITH_M

  • c# 误区系列(二)

    前言继续整理误区系列,可能会对刚入门的新手有些帮助,然后希望有错误的地方可以指出。正文关于泛型方法的确定classPerson<T> { publicvoidadd(Ta) { } }复制那么请问这个add是否是泛型方法。初学者可能认为有泛型参数的就是泛型,其实不是的。这个是为什么呢?其实是这样子的,当泛型类型确认的时候,那么add定义的时候就已经确定了类型。比如说Person<string>,那么这个T就是string,Person<T>是泛型,但是Person<string>不是。当T确定是string的时候,在方法申明的时候就已经是string了,而不存在泛型这个概念。所有泛型的开销没有我们想象的这么大,在应用中,甚至使用泛型效率更高,不是说泛型是优化,而是泛型帮我们避免了太多装箱和拆箱操作。比如说以前的ArrayList,当我们把int存进去,是装箱,使用int又是拆箱。泛型方法是这样的:classPerson<T> { publicvoidadd<Q>(Ta,Qb) { } }复制在每次调用add的时候都

  • javascript入门到进阶 - javascript基础

    文章参考自MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#%E5%9F%BA%E7%A1%80 复制JavaScript是区分大小写的,并使用Unicode字符集。举个例子,可以将单词Früh(在德语中意思是“早”)用作变量名。varFrüh="Ken"; varfrüh="kennana"; 以上是两个不同的变量 复制「注释」//单行注释 /*这是一个更长的, 多行注释 */ /*然而,你不能,/*嵌套注释*/语法错误*/ 复制「声明」JavaScript有三种声明方式。var声明一个变量,可选初始化一个值。let声明一个块作用域的局部变量,可选初始化一个值。const声明一个块作用域的只读常量。varname="Ken"; letsex="男"; constage=20; 复制「变量节」在应用程序中,使用变量来作为值的符号名。变量的名字又叫做标识符,其需要遵守一定的规则。一个Jav

  • 【STM32F407的DSP教程】第15章 DSP统计函数-标准偏差、均方根和方差

    第15章      DSP统计函数-标准偏差、均方根和方差本期教程主要讲解统计函数中的标准偏差,均方根和方差的计算。15.1初学者重要提示15.2DSP基础运算指令15.3标准偏差(StandardDeviation)15.4均方根(RMS)15.5方差(Variance)15.7实验例程说明(MDK)15.8实验例程说明(IAR)15.9总结15.1初学者重要提示 特别注意本章13.5.2小节的问题,定点数求解平方根,本章节几个函数的源码都有调用到求平方根。 正确理解RMS均方根(重要,推荐必读):http://www.armbbs.cn/forum.php?mod=viewthread&tid=95470。15.2DSP基础运算指令本章用到的DSP指令在前面章节都已经讲解过。15.3标准偏差(Standarddeviation)这部分函数用于计算标准偏差,公式描述如下:Result=sqrt((sumOfSquares–sum^2/blockSize)/(blockSize-1))其中:sumOfSquares=pSrc[0]*pSrc[0]+pSrc[1]*pSrc[1]

  • 性能分析之用户数(线程数)/响应时间/TPS的关系

    最近在写一些东西的时候,把一些内容整理了一下。在考虑压力工具中的用户数(有些工具中称为线程数,本文后续都用“用户数”来说明)、响应时间、TPS三者之间的关系时,想到之前也有人问起过这样的问题,就是他们三者之间的共生的关系到底是什么样呢。这个公式我想谁都能知道了:TPS=(1/RT)*user(其中,RT单位是秒,user是用户数)先来画一下最简单的图(假设前提:每个user的事务定义都是一致的。):当有五个用户时,响应时间都稳定保持在0.2s,那这个场景的TPS显然是:TPS=(1/0.2)*5=25这是最简单的计算了。(也许你会说:“咳,不对,因为线画歪了!”你过来,我保证揍不死你。)这个看似简单的公式,在实际的场景中却是会出现千奇百怪的结果。因为大部分的场景都不会如此规整,例如: 这种情况下怎么计算TPS呢:TPS=2+4+6+4+1=17显然响应时间也是变化较大的,可能每个用户的每个事务的响应时间都是不一样的。在真实的场景中,这样的情况是必然会出现的,所以在计算TPS的时候,压力工具采用的是:先采集原始数据。即每个用户每个事务都记录下来。再根据粒度计算。TPS散点值=事务数/粒度

  • DP专题 | LIS POJ - 2533

    这篇来看LIS~上题。POJ-2533LongestOrderedSubsequenceDescriptionAnumericsequenceofaiisorderedifa1<a2<...<aN.Letthesubsequenceofthegivennumericsequence(a1,a2,...,aN)beanysequence(ai1,ai2,...,aiK),where1<=i1<i2<...<iK<=N.Forexample,sequence(1,7,3,5,9,4,8)hasorderedsubsequences,e.g.,(1,7),(3,4,8)andmanyothers.Alllongestorderedsubsequencesareoflength4,e.g.,(1,3,5,8). 一个数字序列ai是按照a1<a2<...<aN进行排列的上升序列,对于一个给定的数字序列(a1,a2,...,aN),其子序列为(ai1,ai2,...,aiK),其中1<=i1<i2<...<i

  • 爬虫课堂(二十五)|使用CrawlSpider、LinkExtractors、Rule进行全站爬取

    在爬虫课堂(二十二)|使用LinkExtractor提取链接中讲解了LinkExtractor的使用,本章节来讲解使用CrawlSpider+LinkExtractor+Rule进行全站爬取。 一、CrawlSpider介绍 Scrapy框架中分两类爬虫,Spider类和CrawlSpider类。Spider类的使用已经讲解了很多,但是如果想爬取某个网站的全站信息的话,CrawlSpider类是个非常不错的选择。CrawlSpider继承于Spider类,CrawlSpider是爬取那些具有一定规则网站的常用爬虫,可以说它是为全站爬取而生。 它除了继承过来的属性(name、allow_domains)外,还提供了新的属性和方法: 1.1、LinkExtractors classscrapy.linkextractors.LinkExtractor LinkExtractors的目的很简单:提取链接。每个LinkExtractor有唯一的公共方法是extract_links(),它接收一个Response对象,并返回一个scrapy.link.Link对象。 LinkExtractors

  • 拉来微博这个小伙伴,央视春晚会焕发第二春吗?

    今天,春晚节目主持人正式公布,康辉、朱迅、任鲁豫、李思思、尼格买提联袂主持,成为一个例行性新闻,提醒大家春节已进入倒计时。不过,似乎今天春晚的关注度,已大不如昨,在注意力涣散的移动互联网时代,如何让用户回归,是春晚不得不解决的问题。不论是与微信、支付宝合作的红包春晚,还是今年与微博达成新媒体社交平台战略合作,都表明春晚想要让观众回归的决心。春晚被互联网新媒体分流春节是华人最重要的节日,春晚是春节最重要的节目,如果说几年前这样说,应该没人反对,五六年前,家家户户在大年三十晚上都会一边团圆一边看春晚,春晚跟春联、压岁钱一样,成为一种民俗。不过,今天再这样说,恐怕有人对后半句不会同意。过年春晚已不是唯一的节目选择,越来越多的人不看春晚,或者看春晚也不再认真了。春晚从1983年开办至2018年,即将进入第36个年头,它成为许多人关于春节的记忆。不过,近年来春晚却遇到了热度下滑的问题。央视公布的数据显示,春晚收视率在2010年创下历史最高峰的38.26%。2014年冯小刚导演的春晚收视率仅为30.98%,2015年羊年春晚再度下滑,收视率第一次跌破30%,仅为29.60%。春晚收视率下滑的原因是

  • Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭

    上周发了一篇关于SpringBoot中使用@Async来实现异步任务和线程池控制的文章:《SpringBoot使用@Async实现异步调用:自定义线程池》。由于最近身边也发现了不少异步任务没有正确处理而导致的问题,所以本文就接前面的内容,继续说说线程池的优雅关闭,主要针对ThreadPoolTaskScheduler线程池。问题现象在上篇文章的例子中,我们定义了一个线程池,然后利用@Async注解写了3个任务,并指定了这些任务执行使用的线程池。在上文的单元测试中,我们没有具体说说shutdown相关的问题,下面我们就来模拟一个问题现场出来。第一步:如前文一样,我们定义一个ThreadPoolTaskScheduler线程池:@SpringBootApplication publicclassApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(Application.class,args); } @EnableAsync @Configuration classTaskPoolConfig{

  • 多维云通信:开放短信API接口,三网合一5秒准达

    多维云通信的短信验证码服务可以达到三网合一、五秒到达、简单调用、快速实现的效果,帮助第三方以及第三方客户达成合作,更有专属靓号可供选择,与其他短信验证码服务相比,多维云通信更加快速、稳定、高效,短信API接口更是广泛,价格更是便宜。近十年来,深圳市多维互联通信有限公司致力于发展最便捷、最安全的互联网云通讯服务,截至目前,深圳市多维互联通信有限公司已与超过10万家企业取得了合作,并为他们提供了最好的即时消息、语音、流量等电信业务及云通信解决方案,获得了一致的好评。深圳市多维互联通信有限公司不断发展,不断壮大,业务范围已经扩大到了34个省市,更有中国移动、联通、电信三大运营商的支持,与三大运营商的合作是深圳市多维互联通信有限公司成长的重要途径,这也使得深圳市多维互联通信有限公司累积了发展的经验。而在不断的发展过程中,有一重要领域登上舞台,就是短信验证码服务。无论是像中国移动、联通、电信这三大通讯企业,还是支付宝、当当这一类的消费购物软件,又或是一些娱乐网站、APP,都有一些功能需要有安全保障,最普遍的形式,就是发送短信验证码,短信验证码这一业务实施的安全性不仅可以为第三方平台提供信誉保障,

  • ABP入门系列(5)——展现层实现增删改查

    这一章节将通过完善Controller、View、ViewModel,来实现展现层的增删改查。最终实现效果如下图:一、定义ControllerABP对ASP.NETMVCControllers进行了集成,通过引入Abp.Web.Mvc命名空间,创建Controller继承自AbpController,我们即可使用ABP附加给我们的以下强大功能:本地化异常处理对返回的JsonResult进行包装审计日志权限认证([AbpMvcAuthorize]特性)工作单元(默认未开启,通过添加[UnitOfWork]开启)1,创建TasksController继承自AbpController通过构造函数注入对应用服务的依赖。[AbpMvcAuthorize] publicclassTasksController:AbpController { privatereadonlyITaskAppService_taskAppService; privatereadonlyIUserAppService_userAppService; publicTasksController(ITaskAppServi

  • c++中fstream是什么意思_c++形式参数

    大家好,又见面了,我是你们的朋友全栈君。初学C++fstream最近出于学习需要,接触了一些C++的程序,对于文件的操作,在C++中的实现方法与C中有些不同,现归纳如下:C++中对文件的操作,是围绕三种类型的文件流(ifstream,ofstream,ftream)进行的.而这三种流事实上是系统定义的类.操作中,首先使流与文件相关联,通过流(也就是类成员)来完成对文件的操作.文件使用完毕,一定要关闭,从而切断流与文件的关联,否则可能会损坏文件.在程序中要打开一个输入文件流,对文件进行读操作,必须说明类型为ifstream对象;要打开一个输出文件流,对文件进行写操作,必须说明类型为ofstream的对象;要建立一个输入输出的流,对文件进行读写操作,必须说明一个类型为ftream的对象.1.建立一个IO文件流有如下两种方式1)通过调用函数open()来实现fstreamtest_file;/**以读写方式打开argv[1]指定的文件,并将文件长度截为0*/test_file.open(test,ios::in|ios::out|ios::trunc);2)在创建IO流的同时与文件相关联,该

  • 腾讯云直播SDK如何实现秒开

    什么叫做“秒开”?秒开即从视频播放开始到真正看到第一帧画面所消耗的时间要尽可能的短(几百毫秒时间),不能让观众有明显的等待时间。nn这种能力主要依靠云端服务的优化以及播放器的配合,如果您组合使用腾讯云视立方·直播SDK,配合视频云服务实现直播能力,可以实现200ms左右的首屏打开速度,如果网络下行足够好的话甚至可以更快。如何实现“秒开”?App端使用直播SDK+FLV播放协议即可实现秒开:HTTP+FLV播放协议nHTTP+FLV协议是目前直播行业使用最普遍的播放协议,它的数据组织格式比较简单,可以做到一旦连通服务器就能获取到音视频数据。相比之下,RTMP协议由于连接初期不可避免的几次协商握手过程,导致在首帧速度方面略逊于FLV协议。腾讯云视立方·直播SDKn秒开的云端实现原理其实非常简单,服务器始终缓存一组GOP画面(至少包含一个可以用于解码的关键帧),这样播放器一旦连通服务器就可以获取到一帧关键帧(I帧),进而可以解码和播放,但这种云端的缓存也会带来负作用:播放器在连通服务器后,通常会一口气被塞过来几秒钟的音视频数据,从而产生不小的播放端延迟,我们称之为“秒开后遗症”。n一款好的

  • 算法:二分图最大匹配——匈牙利算法

    一想到二分图最大匹配,我就不禁想起那几个少年抢女朋友的故事,所以今天我就来说一下二分图匹配的解决方法——匈牙利算法。 例题 洛谷3386【模板】二分图匹配 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数。 输入格式 第一行,n,m,e。 第二至(e+1)行,每行两个正整数u,v,表示u,v有一条连边。 输出格式 共一行,二分图最大匹配。 输入输出样例 输入 111 11 复制 输出 1 复制 说明/提示 1<=n,m<=1000,1<=e<=n*m。 因为数据有坑,可能会遇到v>m或者u>n的情况,所以请把v>m或者u>n的数据自觉过滤掉。 二分图最大匹配——匈牙利算法 先说最大匹配是什么:二分图最大匹配其实就是在已有边中选取尽量多的边,但得保证每个点最多出现一次。那么最大匹配数也就是能选取的最多边数,这里为了方便理解我们可以想象成n个男生去追m个女生,每个男生如果说对一个女生有好感(二者间有一条边),那么他们就有希望在一起,但是因为只能一夫一妻,所以我们希望能组成尽量多的情侣,这就是二分图最大匹配。举个例子

  • 第13章 Windows内存体系结构学习笔记

    一、进程的虚拟地址空间 每个进程都有自己的虚拟地址空间。当进程中的各线程运行时,它们只能访问属于该进程的内存。 二、虚拟地址空间的分区 1、空指针赋值分区 这一分区是进程地址空间中从0x00000000到0x0000FFFF的闭区间,保留该分区的目的是为了帮助程序员捕获空指针的值。如果进程中的线程试图读取或写入位于这一分区内的内存地址,就会引发访问违规。 2、用户模式分区 这一分区是进程地址空间的驻地。可用的地址区间和用户模式分区的大小取决于CPU体系结构。从0x00010000开始。进程无法通过指针来读取、写入或以任何方式,访问驻留在这一分区中其他进程的数据。 3、内核模式分区 这一分区是操作系统代码的驻地。与线程调度、内存管理、文件系统支持、网络支持以及设备驱动程序相关的代码都载入到该分区。驻留在这一个分区内的任何东西为所有进程共有。虽然这一分区就在每个进程中用户模式分区的上方,但该分区中所有代码和数据都被完全保护起来。如果一个应用程序试图读取或写入位于这一分区中的内存地址、会引发违规。 三、地址空间中的区域 当系统创建一个进程并赋予它地址空间时,可用地址空间中的大部分都是闲置(f

  • Mac 使用Xray漏扫工具

    Mac使用Xray漏扫工具 1.进入xray官方网站 https://stack.chaitin.com/ 选择xray工具进入           2.选择下载版本Mac就下载darwin   M1芯片的下载arm64          3.下载之后进行解压发现得到一个单个文件     4.先简单运行一下  提示说没有配置文件。    5.但是当运行完就会发现配置文件已经生成好了。       6.再次运行发现已经可以使用了      7.最后使用调用python代码配合burp联动。         8.最后ca等证书也自己生成了。        xray.py importos os.system(r'./xray_darwin_arm64

  • 提问回顾

    之前提出的问题 对软工课刚开始时自己问题的回答 《构建之法》3.1节提到,花多少时间可以作为衡量一个软件开发的工作量的因素,即一组人的工作量可以用“人数x时间”来表示,而《人月神话》一书则是反对这种衡量标准的,请问实际项目中这样的标准实用吗? 这种标准对于个人或小团队开发来说是适用的。由于团队中人数越少,信息传递就越直接,不会造成在信息传递上产生额外的工作量,保证了大部分工作量集中在作业上。《人月神话》中反对“人月”标准的基本假设是大规模团队,故可见这个标准适用与否是视团队规模而定的。 3.1节讲的是个人能力的衡量与发展,请问代码量与个人的编码能力有直接关系吗? 从熟能生巧这种万金油观点来说,回答是肯定的。而以我本人的经验来分析,回答也是肯定的。代码量理论上与上机时间呈正相关,我个人认为程序员都是长脑子的生物,没有程序员会在长时间编码后不对对编码这项工作产生自己的理解。有了自己的理解意味着你就拥有了之前不曾拥有或者别人尚未拥有的东西。从这个意义上讲,编码能力是肯定提高了的。 第4章花了很多篇幅讲结对编程,请问结对编程在实际项目中真的十分高效吗?是否有很广的适用性? 其实

  • 使用Filter来过滤掉需要排除的数组对象

    问题描述:有个地方需要根据判断是否是总分公司来控制转正入口的显影,list是获取到的所有入口的数组,需要判断数组里哪个对象的title为"员工转正",本来打算用for循环的,之后发现filter挺方便而且代码少 获取到的list大概时这样子的 1[ 2{ 3title:"员工请假", 4img:'./路径', 5path:'./路径' 6}, 7{ 8title:"员工离岗", 9img:'./路径', 10path:'./路径' 11}, 12{ 13title:"员工转正", 14img:'./路径', 15path:'./路径' 16}, 17{ 18title:"员工加班", 19img:'./路径', 20path:'./路径' 21}, 22{ 23title:"员工..", 24img:'./路径', 25path:'./路径' 26}, 27{ 28title:"员工..", 29img:'./路径', 30path:'./路径' 31}, 32{ 33title:"员工..", 34img:'./路径', 35path:'./路径' 36}, 37]复制 &nb

  • &quot;狗屁不通文章生成器&quot;登顶GitHub热榜,分分钟写出万字形式主义大作(转载)

    前言 GitHub被誉为全球最大的同性交友网站,……,陪伴我们已经走过10+年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 上周给大家分享了一篇10个让你笑的合不拢嘴的Github项目,而且还拿了7万+个Star哦,有兴趣的朋友,可以看看, 印象最深刻的是“ 呼吸不止,码字不停 ”: 老实交代,你是不是经常准备写个技术博客,打开word后瞬间灵感便秘,码不出字?有什么办法能让自己一直激情四射的疯狂码字?一位程序员大佬给出了答案:“不许停止码字,停下来就删稿!” 这个项目它的功能用“丧心病狂”、“变态”的式逼你创作来形容都不为过,因为只要你开始码字了,就不能停下来,停下超过5秒直接删稿,所以时刻都在担心到5秒了,稿子会不会被删除,这种高产的方式如果被老板发现,并应用在工作日常写代码中,简直是程序员的恶梦,粹死机率直线上升~ 当然产品经理or老板被打死的机率也直线暴增,比如?: 又或者这样: 正文从这里开始~ 抱歉,太太太太久没写文章了,扯蛋有点多~ 俗话说:上有政策,下有对策,小学六年、初中三年、大学四年,多少作文、论文等等,是不是都

  • python之支付

    一,alipay方式   1,国内的alipay支付:我在网上找了好多的教程,大多数都是属于国内内支付的,所以在这里我就不详细介绍了,   操作:https://www.cnblogs.com/xuanan/p/7892052.html  2,境外的alipay支付:      使用python内置的模块:Alipay   alipay_client=Alipay( pid=PID, key=商户的key, seller_email=商家的email ) 复制     接口的集成: data={ 'partner':PID, '_input_charset':"utf-8", 'notify_url':异步回调接口, 'return_url':付款后返回给用户的接口, 'out_trade_no':订单号, 'subject':subject, 'currency':"USD(货币)", 'total_fee':价钱(美元), 'body':'Alwayshom

相关推荐

推荐阅读