Coder Social home page Coder Social logo

pathkit's Introduction

PathKit

Build Status

Effortless path operations in Swift.

Usage

let path = Path("/usr/bin/swift")

Joining paths

let path = Path("/usr/bin") + Path("swift")

Determine if a path is absolute

path.isAbsolute

Determine if a path is relative

path.isRelative

Determine if a file or directory exists at the path

path.exists()

Determine if a path is a directory

path.isDirectory()

Get an absolute path

let absolutePath = path.absolute()

Normalize a path

This cleans up any redundant .. or . and double slashes in paths.

let normalizedPath = path.normalize()

Deleting a path

path.delete()

Moving a path

path.move(newPath)

Current working directory

Path.current
Path.current = "/usr/bin"

Changing the current working directory

path.chdir {
  // Path.current would be set to path during execution of this closure
}

Children paths

path.children()

Reading

path.read()

Writing

path.write("Hello World!")

Glob

let paths = Path.glob("*.swift")

Contact

Kyle Fuller

License

PathKit is licensed under the BSD License.

pathkit's People

Contributors

antondomashnev avatar chrisballinger avatar dduan avatar djbe avatar dominicfreeston avatar felix91gr avatar kareman avatar keith avatar kylef avatar leonbreedt avatar mrackwitz avatar naknut avatar neonichu avatar rbukovansky avatar romanpodymov avatar stupergenius avatar valeriyvan avatar vknabel avatar yonaskolb 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  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  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

pathkit's Issues

SPM error: NoSources

I tried to build your Package with the newest version of the Swift Package Manager. I failed with: NoSources(".../Packages/PathKit-0.6.1/Tests/Fixtures").

Unable to build with Xcode 13 GM

When I build the package for release (using swift build -c release) I get the following errors:

/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:594:12: error: value of optional type 'UnsafeMutablePointer<CChar>?' (aka 'Optional<UnsafeMutablePointer<Int8>>') must be unwrapped to a value of type 'UnsafeMutablePointer<CChar>' (aka 'UnsafeMutablePointer<Int8>')
      free(cPattern)
           ^
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:594:12: note: coalesce using '??' to provide a default when the optional value contains 'nil'
      free(cPattern)
           ^
                    ?? <#default value#>
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:594:12: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
      free(cPattern)
           ^
                   !
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:625:12: error: value of optional type 'UnsafeMutablePointer<CChar>?' (aka 'Optional<UnsafeMutablePointer<Int8>>') must be unwrapped to a value of type 'UnsafeMutablePointer<CChar>' (aka 'UnsafeMutablePointer<Int8>')
      free(cPattern)
           ^
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:625:12: note: coalesce using '??' to provide a default when the optional value contains 'nil'
      free(cPattern)
           ^
                    ?? <#default value#>
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:625:12: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
      free(cPattern)
           ^
                   !
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:626:12: error: value of optional type 'UnsafeMutablePointer<CChar>?' (aka 'Optional<UnsafeMutablePointer<Int8>>') must be unwrapped to a value of type 'UnsafeMutablePointer<CChar>' (aka 'UnsafeMutablePointer<Int8>')
      free(cPath)
           ^
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:626:12: note: coalesce using '??' to provide a default when the optional value contains 'nil'
      free(cPath)
           ^
                 ?? <#default value#>
/Users/ci/Downloads/PathKit-master/Sources/PathKit.swift:626:12: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
      free(cPath)
           ^
                !

Is this a straightforward patch that can be applied?

Swift Package Manager requires Package.swift

Spinning up a new project (using XCode8-Beta4, Apple Swift version 3.0 (swiftlang-800.0.41.2 clang-800.0.36)) requires a non-empty Package.swift file.

⇒  swift build
warning: refname '0.6.1' is ambiguous.
warning: refname '0.6.1' is ambiguous.
HEAD is now at 62dca49 Merge pull request #10 from neonichu/linux-support
Resolved version: 0.6.1
Empty manifest file is not supported anymore. Use `swift package init` to autogenerate.
error: The package at `/Users/internicolae/Code/personal/From JSON/Packages/PathKit.git' has no Package.swift for the specific version: 0.6.1

Status of Linux support

tl;dr

This is the current support status.


There are 4 tests being skipped:

Here, here, here and here.

There are 2 tests not being compiled: here and here.

Why is that? What is missing?
How can I help?

Also, maybe what we should have for the 2 tests that are not being compiled is a skip, like for the other 4. That way at least they are being visibly skipped.

Glob function on windows

using pathkit on windows will result this error, maybe any plan to support windows in the future?

D:\a\wrangler\wrangler\.build\checkouts\PathKit\Sources\PathKit.swift:8:8: error: no such module 'Darwin'

PathKit wont compile with swift 3.0 snapshot DEVELOPMENT-SNAPSHOT-2016-05-03-a

/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:579:21: warning: @NoEscape is now an attribute on a parameter type, instead of on the parameter itself
public func chdir(@NoEscape closure: () throws -> ()) rethrows {
^~~~~~~~~
@NoEscape
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:68:21: error: value of type 'Index' (aka 'String.CharacterView.Index') has no member 'distance'
let index = p.startIndex.distance( to: p.startIndex.successor())
~~^~~~~~~~~~ ~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:196:41: error: value of type 'NSFileManager' has no member 'destinationOfSymbolicLinkAtPath'
let symlinkDestination = try Path.fileManager.destinationOfSymbolicLinkAtPath(path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:277:19: error: value of type 'NSFileManager' has no member 'fileExistsAtPath'
return Path.fileManager.fileExistsAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:298:18: error: value of type 'NSFileManager' has no member 'fileExistsAtPath'
guard Path.fileManager.fileExistsAtPath(normalize().path, isDirectory: &directory) else {
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:325:18: error: value of type 'NSFileManager' has no member 'fileExistsAtPath'
guard Path.fileManager.fileExistsAtPath(normalize().path, isDirectory: &directory) else {
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:348:26: error: value of type 'NSFileManager' has no member 'destinationOfSymbolicLinkAtPath'
let _ = try Path.fileManager.destinationOfSymbolicLinkAtPath(path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:370:19: error: value of type 'NSFileManager' has no member 'isReadableFileAtPath'
return Path.fileManager.isReadableFileAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:388:19: error: value of type 'NSFileManager' has no member 'isWritableFileAtPath'
return Path.fileManager.isWritableFileAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:406:19: error: value of type 'NSFileManager' has no member 'isExecutableFileAtPath'
return Path.fileManager.isExecutableFileAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:424:19: error: value of type 'NSFileManager' has no member 'isDeletableFileAtPath'
return Path.fileManager.isDeletableFileAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:447:16: error: value of type 'NSFileManager' has no member 'createDirectoryAtPath'
try Path.fileManager.createDirectoryAtPath(self.path, withIntermediateDirectories: false, attributes: nil)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:464:16: error: value of type 'NSFileManager' has no member 'createDirectoryAtPath'
try Path.fileManager.createDirectoryAtPath(self.path, withIntermediateDirectories: true, attributes: nil)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:481:16: error: value of type 'NSFileManager' has no member 'removeItemAtPath'
try Path.fileManager.removeItemAtPath(self.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:498:16: error: value of type 'NSFileManager' has no member 'moveItemAtPath'
try Path.fileManager.moveItemAtPath(self.path, toPath: destination.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:515:16: error: value of type 'NSFileManager' has no member 'copyItemAtPath'
try Path.fileManager.copyItemAtPath(self.path, toPath: destination.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:531:16: error: value of type 'NSFileManager' has no member 'linkItemAtPath'
try Path.fileManager.linkItemAtPath(self.path, toPath: destination.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:547:16: error: value of type 'NSFileManager' has no member 'createSymbolicLinkAtPath'
try Path.fileManager.createSymbolicLinkAtPath(self.path, withDestinationPath: destination.path)
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:665:18: error: value of type 'NSString' has no member 'substringFromIndex'
return try NSString(contentsOfFile: path, encoding: encoding).substringFromIndex(0) as String
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:684:11: error: value of type 'NSData' has no member 'writeToFile'
try data.writeToFile(normalize().path, options: .DataWritingAtomic)
^~~~ ~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:708:11: error: value of type 'NSString' has no member 'writeToFile'
try NSString(string: string).writeToFile(normalize().path, atomically: true, encoding: encoding)
^~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:739:23: error: value of type 'NSFileManager' has no member 'contentsOfDirectoryAtPath'
return try Path.fileManager.contentsOfDirectoryAtPath(path).map {
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:763:23: error: value of type 'NSFileManager' has no member 'subpathsOfDirectoryAtPath'
return try Path.fileManager.subpathsOfDirectoryAtPath(path).map {
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:804:59: error: value of optional type 'UnsafeMutablePointer?' not unwrapped; did you mean to use '!' or '?'?
if let path = String(validatingUTF8: gt.gl_pathv[index]) {
^
!
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:818:22: error: missing argument label 'pattern:' in call
return Path.glob((self + pattern).description)
^
pattern:
/vagrant/www/Packages/PathKit-0.6.3/Sources/PathKit.swift:840:41: error: value of type 'NSFileManager' has no member 'enumeratorAtPath'
self.directoryEnumerator = Path.fileManager.enumeratorAtPath(path.path)!
~~~~~^~~~~~~~~~~ ~~~~~~~~~~~~~~~~

Swift 3 support

Swift 3 introduced breaking changes:

 Compiling Swift Module 'PathKit061' (1 sources)
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:38:19: error: 'CollectionType' has been renamed to 'Collection'
  public init<S : CollectionType where S.Generator.Element == String>(components: S) {
                  ^~~~~~~~~~~~~~
                  Collection
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:38:42: error: 'Generator' is not a member type of 'S'
  public init<S : CollectionType where S.Generator.Element == String>(components: S) {
                                       ~ ^
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:577:18: error: 'SequenceType' has been renamed to 'Sequence'
extension Path : SequenceType {
                 ^~~~~~~~~~~~
                 Sequence
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:580:39: error: 'GeneratorType' has been renamed to 'IteratorProtocol'
  public struct DirectoryEnumerator : GeneratorType {
                                      ^~~~~~~~~~~~~
                                      IteratorProtocol
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:39:8: error: value of type 'S' has no member 'isEmpty'
    if components.isEmpty {
       ^~~~~~~~~~ ~~~~~~~
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:41:15: error: value of type 'S' has no member 'first'
    } else if components.first == Path.separator && components.count > 1 {
              ^~~~~~~~~~ ~~~~~
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:42:15: error: value of type 'S' has no member 'joinWithSeparator'
      let p = components.joinWithSeparator(Path.separator)
              ^~~~~~~~~~ ~~~~~~~~~~~~~~~~~
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:51:14: error: value of type 'S' has no member 'joinWithSeparator'
      path = components.joinWithSeparator(Path.separator)
             ^~~~~~~~~~ ~~~~~~~~~~~~~~~~~
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:557:30: error: 'fromCString' is unavailable: Please use String.init?(validatingUTF8:) instead. Note that it no longer accepts NULL as a valid input. Also consider using String(cString:), that will attempt to repair ill-formed code units.
        if let path = String.fromCString(gt.gl_pathv[index]) {
                             ^~~~~~~~~~~
Swift.String:4:24: note: 'fromCString' has been explicitly marked unavailable here
    public static func fromCString(cs: UnsafePointer<CChar>) -> String?
                       ^
/home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/Sources/PathKit.swift:557:30: error: 'fromCString' is unavailable: Please use String.init?(validatingUTF8:) instead. Note that it no longer accepts NULL as a valid input. Also consider using String(cString:), that will attempt to repair ill-formed code units.
        if let path = String.fromCString(gt.gl_pathv[index]) {
                             ^~~~~~~~~~~
Swift.String:4:24: note: 'fromCString' has been explicitly marked unavailable here
    public static func fromCString(cs: UnsafePointer<CChar>) -> String?
                       ^
<unknown>:0: error: build had 1 command failures
error: exit(1): /home/saulius/.swiftenv/versions/DEVELOPMENT-SNAPSHOT-2016-03-24-a/usr/bin/swift-build-tool -f /home/saulius/workspace/Swifton/Packages/PathKit-0.6.1/.build/debug.yaml default

Foundation Dependency & Linux support

I noticed that the README of Conche says

The purpose of Conche is that it is a build system separate from Xcode which can work on various platforms such as Linux.

Yet as one of Conche's dependencies, PathKit currently relies on NSFileManager, so reimplementing those methods that uses Foundation classes will be necessary once Swift is on Linux.

Future of Project

I am not interested in maintaining this project anymore. I think the problems that I was trying to solve in PathKit should just be solved in the standard library for Swift. Often enough, I think you might just be better off when avoiding the complexity of introducing a dependency for such convience when you can use FileManager from Foundation.

If anyone is actively using PathKit, or wants to maintain it then please let me know in these comments.

Support for Carthage dropped?

Has support for Carthage been dropped? I'm trying to build PathKit 0.7.0 using Carthage but no schemes are built. I checked the repo and I see that the .xcworkspace and .xcodeproj directories have gone. Would it be possible to bring these back? Carthage needs a scheme to be able to build the framework.

PathKit method calls

This is more of a question than an issue. In your README documentation, whenever a PathKit method is called such as path.exists() it uses the () at the end as seems normal. But when I do it in the Xcode IDE, it doesn't like the () at the end. I have a check in my code:
if path.exists {
....
}
And that runs fine but with the parens:
if path.exists() {
...
}

it gives me a build error. Any idea why this is the case? It's not a big deal as I've figured how to make it work. Just curious as to whether I'm doing something wrong implementing PathKit.

Glob function issue

Context

I am using macOS High Sierra v10.13.3. Using with framework xcproj.

What

So there is this path to an xcodeproj (valid, I checked) and xcproj uses the glob function to find the project.pbxproj in it.
let pbxprojPaths = path.glob("*.pbxproj")

This only returns one path (good)
with the url being "/" (bad)

PathKit build fails through Carthage

Example:

$ cat Cartfile
github "kylef/PathKit"
$ carthage bootstrap
*** No Cartfile.resolved found, updating dependencies
*** Fetching PathKit
*** Checking out PathKit at "0.5.0"
*** xcodebuild output can be found in /var/folders/76/q9xfxg_s187bkp6gyxqqxw8r0000gn/T/carthage-xcodebuild.f9pQMQ.log
*** Building scheme "PathKit" in PathKit.xcworkspace

So carthage builds PathKit, which is great. However, the framework can't be used for whatever reason.

$ cat main.swift
import PathKit
print(Path.current)
$ ls Carthage/Build/Mac
PathKit.framework
$ swiftc main.swift -F Carthage/Build/Mac/
$ ./main
dyld: Library not loaded: @rpath/PathKit.framework/Versions/A/PathKit
  Referenced from: /Users/dan/Desktop/test/./main
  Reason: image not found
[1]    45284 trace trap  ./main

It works perfectly fine with other frameworks, for example Commander.

Thoughts?

Why use NSString?

Thanks for useful library 😄

While investigating performance problem, I found this library converts Swift.String into NSString and it's very high cost operation.

Why this library uses NSString instead of implementing its own logic?

It has problem when used in App(not SPM or Terminal)

macOS Version: 12.5.1

Xcode: 14.0

Example (execute in macOS App):

        let p = Path("/Users/your-name/Desktops")
        let p2 = Path("~/Desktops")
        print(p ~= p2) // false

Reason:

  • When in macOS App, Apple use symbol link in sandbox to show Desktops / Documents / Downloads. When I print p2, I found it was /Users/your-name/xxx/your-App/Data/Desktops which is symbol link to real Desktops. And the ~= result is false.
  • When is Swift Package CLI, the result is true.

Support recursive glob '**'

It'd be awesome if you could support a recursive glob, e.g /some/path/**/*.swift which would match arbitrary nesting.

Thanks for PathKit, love it 🤘🏼

How to add text to the last line of a text file

Consulting chatgpt gives the following tips, but the append method is not found in pathkit:

import PathKit

let path = Path("/path/to/file.txt")
let text = "Hello, PathKit!"

do {
    try path.append(text) //add text to the last line of a text file
} catch let error {
    print(error)
}

Combining two pathes including step back lead to incorrect path

The core of the question is in Sourcery issue.

Example input:

p1 = Path(".")
p2 = Path("./../Foo")
p3 = p1 + p2

Expected output:

print(p3) -> "./../Foo"

Actual output:

print(p3) -> "./Foo"

I may be wrong in assumption, but I've tested in ruby with pathname and the + works as expected:

2.3.3 :001 > require 'pathname'
 => true 
2.3.3 :002 > p1 = Pathname.new(".")
 => #<Pathname:.> 
2.3.3 :003 > p2 = Pathname.new("./../ios-guest")
 => #<Pathname:./../ios-guest> 
2.3.3 :004 > p1.realpath
 => #<Pathname:/Users/antondomashnev/Work/Sourcery> 
2.3.3 :005 > p2.realpath
 => #<Pathname:/Users/antondomashnev/Work/ios-guest> 
2.3.3 :006 > p3 = p1 + p2
 => #<Pathname:../ios-guest> 
2.3.3 :007 > p3.realpath
 => #<Pathname:/Users/antondomashnev/Work/ios-guest> 
2.3.3 :008 > 

Split Path into DirectoryPath and FilePath

Hi, nice framework, it's the best replacement for NSURL in Swift I've seen.

Have you considered splitting Path into DirectoryPath and FilePath? Path has a lot of methods which are only valid for either directories or files, but not both. By separating the functionality into 2 types we can catch more bugs at compile time. Then we could turn Path into a protocol for the functionality that is common to both directories and files.

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.