Git Product home page Git Product logo

dangough / nevergreen Goto Github PK

View Code? Open in Web Editor NEW
71.0 71.0 15.0 226 KB

This module is an alternative to Evergreen, and allows you to find the latest version and download URL for various Windows apps. Evergreen uses API queries to obtain its data whereas this module is more focussed on web scraping. This is more prone to breaking when websites are changed, hence the name.

License: The Unlicense

PowerShell 100.00%

nevergreen's People

Contributors

ashleyhow avatar codaamok avatar dangough avatar jonathanpitre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

nevergreen's Issues

Request: Microsoft Office Deployment Tool

Could also apply to anything else also on download.microsoft.com

I wish I knew RegEx, hopefully it's not too hard

Version on URL: https://www.microsoft.com/en-us/download/details.aspx?id=49117
i.e.
Version: </div><p>16.0.15629.20208</p>

Download Link on URL: https://www.microsoft.com/en-us/download/confirmation.aspx?id=49117
i.e.
http-equiv="refresh" content="0;url=https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_15629-20208.exe"

Microsoft PowerBI getting 404

Microsoft PowerBI Apps appear to be broken:

Get-NevergreenApp -Name MicrosoftPowerBIDesktop
Get-Version : Unable to query URL 'https://www.microsoft.com/download/details.aspx?id=58494': The remote server returned an error: (404) Not Found.

The URL displays the PowerBI Download webpage fine in a browser but PowerShell Invoke-WebRequest on the same URL returns 404.

Cisco Apps

I would love to see all the Cisco Apps like

Cisco Jabber
Cisco Jabber JVDI
Cisco Webex Meetings
Cisco Webex Virtual Desktop Plug-in
Cisco Teams
Cisco Teams VDI

Could you add this apps?

[Feature request] Android Platform Tools

Request to add Android Platform Tools to Nevergreen.

PowerShell to get latest version:

[System.Net.WebClient]::new().DownloadString('https://developer.android.com/studio/releases/platform-tools').Split(
    [System.Environment]::NewLine,
    [System.StringSplitOptions]::RemoveEmptyEntries
).ForEach{
    $_.Trim() -replace '\s{2,}', ' '
}.Where{
    $_ -like '<h4 id=*'
}[0].Split('>')[1].Split(' ')[0]

URL to always latest version of the tools:

TikTok Effect House [New App Request]

I would like to be able to screen scrape the Tiktok Effects House downloads page to obtain the URL for the latest version download

Download URL : "https://effecthouse.tiktok.com/download"
Release Notes : "https://effecthouse.tiktok.com/latest/release-notes-latest/"

I have managed to read the latest version number (from the Release Notes page), but have so far been unable to find the installer URL from the downloads page - this is what I have acheived so far with the following Powershell:

[cmdletbinding()]
Param()

Clear-Host
Write-Verbose "Setting Arguments" -Verbose

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$DetectionMethod = "Webscrape"
$AppName = "TikTokEffectHouse"
$Application = "TikTok Effect House"
#$Arch = "x64"
$AppType = "EXE"
$AppInstaller = "Effect_House_Setup.exe"
$InstallPath = "$($env:LOCALAPPDATA)\Effect House\Effect House.exe"
$DownloadsURL = "https://effecthouse.tiktok.com/download"
$ReleaseNotes = "https://effecthouse.tiktok.com/latest/release-notes-latest/"

# $PSScriptRoot should always be something like C:\Users\FSmith\gitrepos\Intune\Admin\Scripts.
# Our Base folder should be 'Intune', or 2 levels up.
$BaseFolder = "$PSScriptRoot\..\.."
$AllAppsFolder = ".\Apps"
$PrepToolExe = ".\Microsoft-Win32-Content-Prep-Tool-1.8.4\IntuneWinAppUtil.exe"

$StartTime = Get-Date

Write-Verbose "Finding installed version" -Verbose
# Check if App is installed and if it is get version
if (Test-Path -Path $InstallPath) {
    [version]$InstalledVersion = (Get-ItemProperty $InstallPath).VersionInfo.FileVersion
    Write-Host "Installed version of $($Application) is: $($InstalledVersion)"
} else {
    Write-Host "WARNING :: $($Application) is not installed" -ForegroundColor Red
}

Write-Verbose "Using $($DetectionMethod) to check for latest version from: $($ReleaseNotes)..." -Verbose
try {
    # $Web = Invoke-WebRequest -UseBasicParsing -Uri $DownloadsUrl -ErrorAction SilentlyContinue
    $Web = Invoke-WebRequest -UseBasicParsing -Uri $ReleaseNotes -ErrorAction SilentlyContinue
}
catch {
    Throw "Failed to connect to URL: $ReleaseNotes with error $_."
    Break
}
finally {
# Luckily, although this web page covers a major release it only seems to have active links to the very latest update.
# So we can determine the latest version by searching for specific text in the page...
    $PageContent = ($Web.Content)
    $SearchString = "</style><h2 class=`"css-ov5iey e15xsn0a4`">v"
    $CaptureStart = $PageContent.IndexOf($SearchString) + $SearchString.Length
    $EndIndex = $PageContent.IndexOf(" (", $CaptureStart) - $CaptureStart
    $Version = ($PageContent.Substring($CaptureStart, $EndIndex).Trim()) -replace "\.","-"
    [version]$LatestVersion = ($PageContent.Substring($CaptureStart, $EndIndex).Trim()) -replace "-","."
}

Write-Output "Latest version of $($Application) is:          $($LatestVersion)"

Write-Verbose "Using $($DetectionMethod) to find latest version download from: $($DownloadsURL)..." -Verbose
try {
    # $Web = Invoke-WebRequest -UseBasicParsing -Uri $DownloadsUrl -ErrorAction SilentlyContinue
    $Download = Invoke-WebRequest -UseBasicParsing -Uri $DownloadsURL -ErrorAction SilentlyContinue
}
catch {
    Throw "Failed to connect to URL: $DownloadsURL with error $_."
    Break
}
finally {
# This web page only seems to have an active link to the very latest update - obscured by CSS.
# So we need to determine the latest version download by searching within the links on the page...
    $DownloadContent = (($Download.Links | Where-Object {$_.href -eq "/download"}).outerHTML)
    <#
    $SourceUrl = "" # To be read from page ?
    #>
    # Current Download URL for v3.3.2.87 has been obtained in a browser:
    $SourceUrl = "https://sf16-va.tiktokcdn.com/obj/eden-va2/olaa_ajlmml_zlp/ljhwZthlaukjlkulzlp/V332_External_Release_0927/Effect_House_v3.3.2.87_101_Setup.exe"
}

<#
Other code...
N.B. Includes setting path to $Outfile
#>

# New Version available, so open Release Notes
$ReleaseNotesURL = "https://effecthouse.tiktok.com/effect-platform/latest/release-notes-latest/v$($version)/?enter_method=category_card"
Write-Output ""
Write-Host "New version $($LatestVersion) has been released, Opening release notes in default browser..." -ForegroundColor DarkGreen
Start-Process $ReleaseNotesURL
Write-Output ""

# Download the latest Installer
Write-Output ""
Write-Output "Downloading $($Application) $($LatestVersion) from $($SourceUrl)..."
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $SourceUrl -OutFile $Outfile

[Broken] JabraDirect

Seems the logic for Jabra Direct is borked. Not a issue for me, just a heads up. :)

PS C:\Windows\system32> Nevergreen\Get-NevergreenApp -Name 'JabraDirect'
WARNING: No version found within 
--- a lot of HTML ---
Nevergreen\Get-NevergreenApp : Error retriving results for 'JabraDirect': Get-JabraDirect.ps1: Cannot validate argument on parameter 'Version'. The argument is null or empty. Provide an argument that is not null or 
empty, and then try the command again.
At line:1 char:1
+ Nevergreen\Get-NevergreenApp -Name 'JabraDirect'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-NevergreenApp
 

PS C:\Windows\system32> 

And version of the module

PS C:\Windows\system32> Get-Module -Name 'Nevergreen'

ModuleType Version    Name                                ExportedCommands                                                                                                                                               
---------- -------    ----                                ----------------                                                                                                                                               
Script     2109.1     Nevergreen                          {Find-NevergreenApp, Get-NevergreenApp}                                                                                                                        



PS C:\Windows\system32> 

Adobe Reader - Missing x64 MUI Patch

Can be added, by adding:

@{Architecture = 'x64'; Language = 'Multi'; Pattern = 'AcroRdrDCx64Upd\d{8,12}_MUI\.msp'}

to Get-AdobeAcrobatReader.ps1

Irfanview download URL is not working

Irfanview download URL is not working, it downloads an incomplete file. The same issue occurs with the setup and plugin file.

https://www.fosshub.com/IrfanView.html?dwl=iview460_x64_setup.exe
redirects to
https://download.fosshub.com/Protected/expiretime=1648034402;badurl=aHR0cHM6Ly93d3cuZm9zc2h1Yi5jb20vSXJmYW5WaWV3Lmh0bWw=/7939fbcbd770399eb8f3f3a68222a6deb6255eff5c6ef1435077df24aacc7d3c/5b8d1f5659eee027c3d7883a/623457812413750bd71fef36/iview460_x64_setup.exe
for instance.

I tried the Resolve-Uri function and I still can't get it to work.

Maybe it would be easier to switch the source links to betanews.com, just like Eric did?

https://github.com/haavarstein/Applications/blob/master/Misc/IrfanView/Install.ps1

Add Notepad3

https://www.rizonesoft.com/downloads/notepad3

We can improve the following code with Nevergreen standard.

$webRequest = Invoke-WebRequest -UseBasicParsing -Uri ("https://www.rizonesoft.com/downloads/notepad3") -SessionVariable websession
$regexURL = "https\:\/\/www\.rizonesoft\.com\/download\/\d.+/"
$regexZip = "Notepad3_\d.\d{2}.\d{3}.\d_Setup.zip"
$appURL = $webRequest.RawContent | Select-String -Pattern $regexURL -AllMatches | ForEach-Object { $_.Matches.Value } | Select-Object -First 1
$appZip = $webRequest.RawContent | Select-String -Pattern $regexZip -AllMatches | ForEach-Object { $_.Matches.Value } | Select-Object -First 1
$appVersion = $appZip.Split("_")[1]
$appSetup = "Notepad3_$($appVersion)_Setup.exe"

CCleaner, defragler

To optimize your windows installation, I could recommend Ccleaner and defragler. Please add these to your apps if possible.

LibreOffice returns an error

Get-NevergreenApp -Name LibreOffice
C:\Program Files\WindowsPowerShell\Modules\nevergreen\2208.1\Apps\Get-LibreOffice.ps1 : Get-LibreOffice.ps1: Cannot val
idate argument on parameter 'Uri'. The argument "" does not match the "^(http|https)://" pattern. Supply an argument th
at matches "^(http|https)://" and try the command again.
At C:\Program Files\WindowsPowerShell\Modules\nevergreen\2208.1\Public\Get-NevergreenApp.ps1:61 char:31
+                     $Output = &$Script
+                               ~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-LibreOffice.ps1

C:\Program Files\WindowsPowerShell\Modules\nevergreen\2208.1\Apps\Get-LibreOffice.ps1 : Get-LibreOffice.ps1: Cannot val
idate argument on parameter 'Uri'. The argument "" does not match the "^(http|https)://" pattern. Supply an argument th
at matches "^(http|https)://" and try the command again.
At C:\Program Files\WindowsPowerShell\Modules\nevergreen\2208.1\Public\Get-NevergreenApp.ps1:61 char:31
+                     $Output = &$Script
+                               ~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-LibreOffice.ps1



Name         : LibreOffice
Channel      : Fresh
Language     : Multi
Architecture : x86
Type         : MSI
Version      : 7.4.1
Uri          : https://download.documentfoundation.org/libreoffice/stable/7.4.1/win/x86/LibreOffice_7.4.1_Win_x86.msi

Name         : LibreOffice
Channel      : Still
Language     : Multi
Architecture : x86
Type         : MSI
Version      : 7.3.6
Uri          : https://download.documentfoundation.org/libreoffice/stable/7.3.6/win/x86/LibreOffice_7.3.6_Win_x86.msi

[Bug] Zoom VDI download link is now forbidden

Get-NevergreenApp Zoom now returns the following error

Get-Link : Get-Link: The remote server returned an error: (403) Forbidden.
At C:\Users\jonathan\Documents\WindowsPowerShell\Modules\Nevergreen\2110.1\Apps\Get-zoom.ps1:29 char:23
+ ... wnloadURL = Get-Link -Uri 'https://support.zoom.us/hc/en-us/sections/ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-Link
 
WARNING: Unable to get results for Zoom VDI downloads: Cannot validate argument on parameter 'Uri'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.

The VDI download url is still valid trough a web browser but cannot be reached with Invoke-WebRequest for some reason.

Invoke-WebRequest -Uri "https://support.zoom.us/hc/en-us/sections/360011509631-VDI-Downloads"
Invoke-WebRequest : The remote server returned an error: (403) Forbidden.
At line:1 char:1
+ Invoke-WebRequest -Uri "https://support.zoom.us/hc/en-us/sections/360 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Adobe Creative Cloud returning wrong uri/version for x86 and x64

image

It should return the following...

Version   Uri                                                                              Architecture
-------   ---                                                                              ------------
4.9.0.504 https://ccmdl.adobe.com/AdobeProducts/KCCC/CCD/4_9/win32/ACCCx4_9_0_504.zip      x86
5.4.5.550 https://ccmdl.adobe.com/AdobeProducts/KCCC/CCD/5_4_5/win64/ACCCx5_4_5_550.zip    x64
5.4.5.550 https://ccmdl.adobe.com/AdobeProducts/KCCC/CCD/5_4_5/winarm64/ACCCx5_4_5_550.zip ARM64

Add Druide Antidote patches

It does require an enterprise account to download the main software but at least we could provide the patches for the latest update.

We can improve the following code with the Nevergreen standard.

$appURLVersion = "https://www.antidote.info/en/assistance/mises-a-jour/historique/antidote-10/windows"
$webRequest = Invoke-WebRequest -UseBasicParsing -Uri ($appURLVersion) -SessionVariable websession
$regexAppVersion = "Antidote \d\d v\d.+ Windows"
$webVersion = $webRequest.RawContent | Select-String -Pattern $regexAppVersion -AllMatches | ForEach-Object { $_.Matches.Value } | Select-Object -First 1
$appShortVersion = ($webVersion).Split(" ")[1]
$appPatchVersion = ($webVersion).Trim("Andidote $appShortVersion v").Trim(" Windows").Replace(" ", "")
$appVersion = "$appShortVersion.$appPatchVersion"
$appURLPatch = "https://telechargement12.druide.com/Win/antidote_$appShortVersion/Diff_Antidote_$($appShortVersion)_C_$($appShortVersion).$appPatchVersion.msp"
$appURLPatch2 = "https://telechargement12.druide.com/Win/antidote_$appShortVersion/Diff_Antidote_$($appShortVersion)_Module_F_$($appShortVersion).$appPatchVersion.msp"
$appURLPatch3 = "https://telechargement12.druide.com/Win/antidote_$appShortVersion/Diff_Antidote_$($appShortVersion)_Module_E_$($appShortVersion).$appPatchVersion.msp"
$appURLPatch4 = "https://telechargement12.druide.com/Win/antidote_$appShortVersion/Diff_Connectix_$($appShortVersion)_C_$($appShortVersion).$appPatchVersion.msp"
$appURLMultiMgr = "https://telechargement.druide.com/telecharger/Reseau/antidote_$appShortVersion/GestionnaireMultiposte_Antidote$appShortVersion.exe"
$appPatch = $appURLPatch.Split("/")[5]
$appPatch2 = $appURLPatch2.Split("/")[5]
$appPatch3 = $appURLPatch3.Split("/")[5]
$appPatch4 = $appURLPatch4.Split("/")[5]

Module version not playing nicely with #Requires statement

For some reason, most likely a bug in Powershell, if you add this Requires statement to your code:

#Requires -Modules @{ ModuleName='Nevergreen'; ModuleVersion='2105.2' }

It fails with:

ResourceUnavailable: The script 'AutoPackager.ps1' cannot be run because the following modules that are specified by the "#requires" statements of the script are missing: Nevergreen.

Yet it works if you retry!

I suspect this might be down to the version format used. I have copied the version format used by Evergreen, i.e. YYMM.Build, except my first release was 2105.001. However when I published the module it was coming up as 2105.1. Seeing that it stripped the preceeding zeroes, I just called the next release 2105.2 in the module manifest.

Visiting the Powershell Gallery at https://www.powershellgallery.com/packages/Nevergreen though redirects to 2105.1 instead of the latest version, which is odd, and the reason why I suspect the version being a cause.

Add built-in resolution of URLs

Add a function inside Get-NevergreenApp to automatically resolve the URL provided by each application script, for example to turn:

https://aka.ms/installazurecliwindows

Into:

https://azcliprod.blob.core.windows.net/msi/azure-cli-2.23.0.msi

I could a;so resolve the filename portion of the URL, and the modified date of the file and output that as an extra field.

This is not straightforward:

  • Some URLs do not resolve correctly with some user agents
  • Some URLs like Github releases and Oracle Java downloads end in what looks like a valid filename, until you resolve the redirects you end up with a query string. You then have to parse the Content-Disposition header to retrieve the filename.
  • When querying the header with Invoke-WebRequest -Method HEAD, some URLs refuse to respond, so fallback methods required.

I have old scripts that do this already, they just need polishing and integration.

[New App Request] FileZilla

After a long running conversation with Aaron Parker on the Evergreen Issues page regarding FileZilla making it very difficult to access links on their download page (aaronparker/evergreen#581) and with your input it has lead me to investigate using NeverGreen to solve this problem

I now understand why this is _Exactly what Nevergreen works best for ๐Ÿ˜

Using your Get-AdobeAcrobatReader.ps1 script as a template, I have created a new Get-FileZilla.ps1 script, which works well for my purposes.
N.B. I have removed the Language attribute (as FileZilla is not language specific)
I have added a Headers splat to include the Headers that the FileZilla site requires / expects before it will serve content
I guess the Platforms 'could' be expanded in the future for other OS distributions, but for now I'm assuming this is only likely to be used for Windows.

Here's my script, feel free to check and include in a future release of NeverGreen:

$Platforms = @(
    @{Architecture = 'x86'; Type = 'exe'; Pattern = 'FileZilla_\d+\.\d+\.\d+_win32-setup\.exe'}
    @{Architecture = 'x64'; Type = 'exe'; Pattern = 'FileZilla_\d+\.\d+\.\d+_win64-setup\.exe'}
    @{Architecture = 'x86'; Type = 'zip'; Pattern = 'FileZilla_\d+\.\d+\.\d+_win32\.zip'}
    @{Architecture = 'x64'; Type = 'zip'; Pattern = 'FileZilla_\d+\.\d+\.\d+_win64\.zip'}
)

foreach ($Platform in $Platforms) {

    $ReleaseURL = 'https://filezilla-project.org/download.php?show_all=1'
    $SearchCount = 3

    $Headers = @{
	"Accept"="*/*"
	"Accept-Language"="en-GB,en;q=0.9,en-US;q=0.8"
	"User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
        "Host" = "filezilla-project.org"
    }

    do {
        $URL = Get-Link -Uri $ReleaseURL -Headers $Headers -MatchProperty href -Pattern $Platform.Pattern
        if ($URL) {
            $Version = ($URL | Get-Version -Pattern 'FileZilla_(\d+\.\d+\.\d+)_.+(exe|zip)')
            New-NevergreenApp -Name 'FileZilla' -Version $Version -Uri $URL -Architecture $Platform.Architecture -Type $Platform.Type
            break
        }

        $SearchCount--
    } until ($SearchCount -eq 0)

    if ($SearchCount -eq 0) {
        Write-Warning "Could not find release for FileZilla $($Platform.Architecture) $($Platform.Language)"
    }

}

[BUG] LibreOffice

While running the latest version (2311.2) and get details for LibreOffice

Get-NevergreenApp -Name LibreOffice

I recieve an error:

WARNING: No version found within

... HTML Source ...

C:\Program Files\WindowsPowerShell\Modules\nevergreen\2311.2\Apps\Get-LibreOffice.ps1 : Get-LibreOffice.ps1: Cannot
validate argument on parameter 'Version'. The argument is null or empty. Provide an argument that is not null or
empty, and then try the command again.
At C:\Program Files\WindowsPowerShell\Modules\nevergreen\2311.2\Public\Get-NevergreenApp.ps1:61 char:31
+                     $Output = &$Script
+                               ~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-LibreOffice.ps1

C:\Program Files\WindowsPowerShell\Modules\nevergreen\2311.2\Apps\Get-LibreOffice.ps1 : Get-LibreOffice.ps1: Cannot
validate argument on parameter 'Version'. The argument is null or empty. Provide an argument that is not null or
empty, and then try the command again.
At C:\Program Files\WindowsPowerShell\Modules\nevergreen\2311.2\Public\Get-NevergreenApp.ps1:61 char:31
+                     $Output = &$Script
+                               ~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-LibreOffice.ps1

And no results

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.