Author: nista

153 次浏览
160 次浏览
187 次浏览
286 次浏览

获取项目中全部 NuGet 包以及对应的 License

我们在日常 .NET Core 项目开发的过程中,经常需要获得整个解决方案中所有项目所引用的 NuGet 包的列表、对应的 License,甚至有时候出于法律的考量,我们需要检查 NuGet 包中所有递归引用的内部包的 License。

如果我们手动进行检查,工作量是巨大的,因此我编写了一个 PowerShell 脚本,来自动化完成这个工作。

基本原理

首先,基于 dotnet 命令自带的 list package 方法,及 –include-transitive 参数,来获取全部包引用的列表。
随后,通过 WebClient 下载对应的 License 文件。

使用方法

将 .ps1 文件放置到项目解决方案文件 (.sln) 所在位置并运行即可。

*

In the process of daily .NET Core project development, we often need to obtain a list of NuGet packages referenced by all projects in the solution, corresponding licenses, and sometimes for legal considerations, we need to check all licenses of recursion internal packages in each directly referenced NuGet packages.

If we check it manually, the workload is huge, so I wrote a PowerShell script to automate this task.

Fundamental

It’s based on the list package method that comes with the dotnet command, and the –include-transitive parameter, to obtain a list of all package references. And then, download the corresponding license file through WebClient.

Instructions

Place the .ps1 file in the location of the project solution file (.sln) and run it.

*

# Place the file to .sln folder, and run

dotnet list package --include-transitive > NuGetPackageList.txt

mkdir ".\licenses" > nul 2> nul
echo "Package ID,Package Version,Package Spec URL,License URL" > LicenseList.csv

Select-String "(>)\s+(\S+)\s+(\S+)\s+(\S+)*" NuGetPackageList.txt  |  Select @{Name="Id"; Expression = {$_.Matches.Groups[2]}}, @{Name="Version"; Expression = {$_.Matches.Groups[3]}}  |  Sort-Object -Property @{Expression="Id"; Descending=$false}, @{Expression="Version"; Descending=$false} -unique | % {

    $packageId = $_.Id;
    $packageIdLowerCase = $packageId.ToString().ToLower();
    $packageVersion = $_.Version;
    $packageSpecUrl = "https://api.nuget.org/v3-flatcontainer/$packageIdLowerCase/$packageVersion/$packageIdLowerCase.nuspec"

    Write-Host
    Write-Host("o> $packageId")
    Write-Host("  $packageVersion`n  $packageSpecUrl") -ForegroundColor Green 

    Try {  
        # Refer to https://docs.microsoft.com/en-us/nuget/api/package-base-address-resource#download-package-manifest-nuspec
        [xml]$packageSpec = (New-Object System.Net.WebClient).DownloadString($packageSpecUrl);
        $packageLicenseUrl = $packageSpec.package.metadata.licenseUrl;

        Write-Host("  $packageLicenseUrl") -ForegroundColor Green 
        echo "$packageId,$packageVersion,$packageSpecUrl,$packageLicenseUrl" >> LicenseList.csv
        
        Try {
            $filePath = (Join-Path (pwd) 'licenses\') + "$packageId.$packageVersion.txt";
            (New-Object System.Net.WebClient).DownloadFile($packageLicenseUrl, $filePath);
        }
        Catch [system.exception] {
            # Write-Host ($error[0].Exception);
            Write-Host ("!!> Could not download license file for $packageId $packageVersion") -ForegroundColor DarkMagenta
        }
    }
    Catch [system.exception] {
        # Write-Host ($error[0].Exception);
        Write-Host ("!!> Could not read license for $packageId $packageVersion") -ForegroundColor Red
        echo "$packageId,$packageVersion,$packageSpecUrl,(none)" >> LicenseList.csv
    }

}
1,018 次浏览
175 次浏览

头脑风暴会议

在此整理一下近期举行的头脑风暴会议(Brainstorming)的组织经验。

  1. 一定要在会前,提前把大纲整理、标记好,进行明细的分类,从而快速、极其明晰的方式进行讨论,不要当场进行整理。

 

  1. 一定要提前打印材料,并分发,不要只是指望现场的屏幕分享大家能够集中精力。

 

  1. 一定要有两个主持人,一个负责背景介绍、记录、纠偏、控制范围。另一个现场指定,(提高参与度)一个负责引导,推进(不给复杂工作,但是应该拥有组织能力或掌握组织方法),这样彼此之间可以互相约束,纠偏。

 

  1. 如果时间不够,要将任务横向的合并讨论(扩大讨论的目标范围),这也体现了会前大纲的重要性(能够极其明晰的量化讨论范围、点)。

 

  1. 让大家提建议的时候,一定要手写到便签上,不要通过发言的方式,因为大家不爱说话,或者不方便说话。要不断地给大家灵感、建议、诱导大家发言。

 

Brainstorming

1,463 次浏览

有你

有你,就像喧闹街边的那株新芽
是丛中一点非凡的绿

有你,就像匆忙表盘上的时针
是凌乱纷杂的时间里片刻的安宁

你是蛋糕夹心的薄荷与草莓
完整了酸甜

在海岸的石头堤坝上,
在狂乱暴虐的风雨下,
指尖相触
我们的脚下是无限的坚定
我们的背后是一片安宁

我想与你,去看每一片海
你是看得见的心
我们是看不见的盘根

2020.3.21 午后


阿尔伯特·奥布莱(Albert Aublet),《在海岸石头堤坝》(Sur Les Galets)

300 次浏览

PMP 活动:让虚拟团队创造更高的绩效

讲师: 大连市项目管理协会 – 高屹

学习笔记

2020-03-20 FRI Hendry Qi

  1. 当前的客观现状和约束
    a. 我们身边有很多虚拟团队(远程团队)的存在
    b. 无法抗拒的客观约束不断催生更多的虚拟团队诞生(比如当前的疫情:处于安全、防疫的考虑)

  2. 这些客观原因导致虚拟团队(远程团队)、远程办公不断的普遍
    a. 虚拟团队的定义是:团队成员致力于同一个项目,却分布在不同的地理位置,彼此需要通过沟通技术来实现共同工作。
    b. 优势:即使团队成员(或个别专家)不在同一个办公位置,也可以通过在家办公被纳入团队。
    c. 挑战:虚拟团队的沟通成本高、成员易产生孤立感、团队效能低下、难以分享知识和经验、难以跟进项目进度和生产率、一旦出现问题,各自都倾向回避,不愿担责。
    d. 远程办公最大的问题是沟通,大家各扫门前雪,团队责任感降低。互相配合的时候经常出现南辕北辙。所以提高工作绩效的核心问题是解决沟通障碍。

    1. 任何企业问题的解决,都需要 整合式管理:针对一个问题,一个组织的上上下下都需要动起来,从不同的层次、角度,目标一致、责任清晰、各司其职、各显神通的去解决问题。

    2. 整合式管理 – 高层领导:应该做好的事情
      a. 工作目标清晰、准确
      i. 虚拟团队不能面对面沟通,必须通过工具来完成沟通,所以沟通中经常会发生的失真、变形、歧义、猜想。
      所以领导不能用“改善”、“加强”这种无法度量的描述来下达任务目标,而应采用符合 SMART 原则的描述 (S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound) 的目标(可度量、明确清晰的)。

      b. 充分合理的授权
      i. 责与权的不对等,将直接导致下属的压力和低效
      下级 PM 应该准确明晰的得到授权。
      本地团队工作时可以通过多见面、多沟通来不断渐晰的任务目标。
      而虚拟团队的 PM 一定要得到明确、饱满、广而周知的书面授权,通过更多的授权来推动任务目标的明晰。

      c. 及时掌握项目状况
      i. 高级领导对于本地团队,只需要了解里程碑,而不用掌握细节。但是高级领导对于虚拟团队,一定要关注项目的推进过程,及时掌握项目的当前状况。应该定期(一天至一周)持续的进行沟通和跟踪,向团队施予一定的压力,有助于提高团队工作效率。

      d. 适度参与项目工作
      i. 高级领导参与项目一定要适度,不要过度参与。
      (比如,高级领导强行闯入了具有团队私密性的项目团队的微信群,这导致团队成员不感说话,领导也无法听不到所需的员工心声和状态,这导致团队失声,所以高级领导一定要记得自己的身份)
      虚拟团队使每位成员更加独立、个人工作环境也更加轻松,这是虚拟团队带来的优势,不要让高级领导的过渡监控影响到团队成员发挥个人的主动性。所以,领导最好不进项目群,而是增加点对点的沟通,这样激励的作用会被显著放大。

    3. 整合式管理 – 项目经理(PM):应该做好的事情 —— 项目经理是项目工作的第一责任人
      a. 项目团队的组建要正式
      i. 对虚拟团队成员的工作效率的监督很难,尤其是当一个成员拥有角色、多个任务时,(例如他既隶属于一个本地团队,又同时隶属于一个虚拟团队,线上线下并行工作的时候,成员往往会优先选择面对面的本地工作任务优先完成。
      所以要正式的给予成员任命,基于明确身份,并通知给所有相关方。有仪式感的方式,使得成员重视自身的身份,个人对工作的抵触感会显著降低,逆转看客的心态,增强自身责任感。(书面任命,增强责任感)

      b. 工作任务要明确的分解(WBS)
      i. PM 承诺的目标,不是由 PM 自己完成的,PM 要让团队每个成员各司其职,他要知人善用,要细化、分解工作。(工作细化,责任到人)要使工作目标碎片化、解体、从而分解成易于理解、易于管理,可管可控、责任明确到人(RACI)的任务。
      ii. 现实的项目经理(PM)往往只是:有经验、有能力、受领导信任的老员工,并没有行政职务,所以其硬权力不足(弱矩阵型)。因而 PM 不容易让团队成员产生敬畏感,所以 PM 并不适宜进行直接派工,所以最理想的责任到人的方式是让团队一起讨论、由员工主动认领任务(敏捷),这样每个团队成员所提供的是承诺,任务责任成功落地的可能性更高。
      iii. 而对于枯燥、困难的工作任务,则可以通过 PM 在团队公开的方式,进行任务指派。
      iv. 不要让少数人承担了过多的工作。技术专家、项目经理 往往会 一A到底、一R到底(RACI),过多的吸引任务火力,“能者多劳”的情况会导致过度承诺,应该从团队的角度提高大家整体的工作效率。

      c. 主动营造团队氛围
      i. 虚拟团队缺乏团队氛围,PM 要尽力营造氛围。团队氛围最好的体现方式是在工作之外!所以一定要通过工作以外的活动来提升团队氛围。例如,工作群里不要只发工作内容,要有娱乐,要建立氛围(新闻、红包雨、有趣的小视频等)。把虚拟群体的活跃度、参与度调动起来,让大家慢慢形成一种意识:每天早上起来愿意首先去看看项目群里看看大家有趣的事儿、项目新鲜的事儿,去关注团队群里发生了什么事情,而不是让大家去屏蔽、静音一个只有工作内容的群。

      d. 做好”仆人式”领导(敏捷)
      PM 做一个 Coach、Master,而不是 Manager。PM 为团队做好服务工作,尽力去解决问题,从而让 PM 赢得团队成员的信任。
      不要把自己当作领导,PM 是负责人,应该将权力应用于解决问题上,无论是工作中(回绝变更、屏蔽需求、创造适于工作的环境),还是工作外(解决成员遇到的实际生活问题)。
      仆人式的管理是让 PM 赢得团队成员的信任,从而使得成员能够主动的全力以赴。

    4. 整合式管理 – 团队成员:应该做好的事情
      a. 管理好自己的时间
      i. 远程的工作环境,使得自身难以自我约束,因而使得时间意识淡漠(帕金森定律 – 工作会自动地膨胀,直到占满所有的可用时间 )。所以,一定要切断自己的干扰源。如:微信、QQ、淘宝、社交媒体等。孩子、家人等。
      ii. 合理规划作息,定时、准时、端正的完成工作(管理好时间是管理效率的核心问题)

      b. 工作分级
      i. 我们每一个人,无论是谁,都很难同一段时间只做一个任务,所以一定要区分任务的轻重缓急!(抓大放小、不拖延)例如,使用时间管理—重要紧急四象限法则。

      c. 及时反馈问题
      i. 远程团队无法面对面的快速提问、交流,所以很多问题需要自己解决、调查。这会形成一种无助感、孤独感。
      一定要明确,你不是一个人在战斗,要及时求助,尽早暴露问题,千万不要积压问题。求助不是甩包袱,要坦诚及时,并说明好自己的实际需求,让别人知道怎么能帮你)。果断地依靠团队的力量,解决个人的困难。

      d. 学会体验成就感
      i. 每个人都希望自己的工作能够产生价值、获得成就感。可大部分人每天虽然很忙碌,但是却无法回想自己都干了什么。这会导致个人心情的沮丧、缺乏成就感,热情消失。所以每天工作的最好方式是,首先罗列工作列表,分清轻重缓急,每次只做一件事,减少不同任务的上下文切换。人的精力是有限的,没有规划的同时去做多个事情会影响效率和质量(丰田精益 Kanban 管理)。让自己清楚的知道自己完成了什么、没完成什么,形成良性循环、形成个人的内驱力,不用扬鞭自奋蹄。

而这一切的目的是通过优化管理行为,来提高团队或个人的工作绩效。