Giter Site home page Giter Site logo

mmick66 / calendarview Goto Github PK

View Code? Open in Web Editor NEW
586.0 19.0 115.0 2.25 MB

An Easy to Use Calendar for iOS (Swift 5.0)

License: MIT License

Swift 97.59% Ruby 1.61% Objective-C 0.79%
calendar calendar-component calendar-view calendarview swift utc date datepicker date-picker datetime

calendarview's Introduction

Karmadust

Language License: MIT CocoaPods Awesome Carthage compatible

This is an easy to use, "just drag and drop it in your code" type of calendar for iOS. It supports both vertical and horizontal scrolling, as well as native calendar events.

Calendar Screenshot

Requirements

  • iOS 8.0+
  • XCode 9.0+
  • Swift 4.2

Installation

CocoaPods

pod 'KDCalendar', '~> 1.8.9'

Carthage

Add this to your Cartfile, and then run carthage update:

github "mmick66/CalendarView" "master"

Swift Package Manager

Go to Project -> Swift Packages and add the repository:

https://github.com/mmick66/CalendarView.git

Add this to your Package.swift:

dependencies: [
    .Package(url: "https://github.com/mmick66/CalendarView")
]

Manual

Just the files from the CalendarView/ subfolder to your project.

Setup

The calendar is a UIView and can be added either programmatically or via a XIB/Storyboard. If doing the latter, make sure that the Module is selected to be 'KDCalendar'.

IB Screenshot

It needs a delegate and data source that comply with:

protocol CalendarViewDataSource {
    func startDate() -> NSDate // UTC Date
    func endDate() -> NSDate   // UTC Date
}
protocol CalendarViewDelegate {
    func calendar(_ calendar : CalendarView, canSelectDate date : Date) -> Bool /* optional */
    func calendar(_ calendar : CalendarView, didScrollToMonth date : Date) -> Void
    func calendar(_ calendar : CalendarView, didSelectDate date : Date, withEvents events: [CalendarEvent]) -> Void
    func calendar(_ calendar : CalendarView, didDeselectDate date : Date) -> Void /* optional */
    func calendar(_ calendar : CalendarView, didLongPressDate date : Date, withEvents events: [CalendarEvent]?) -> Void /* optional */
}

The data source will provide the start date and the end date of the calendar. The methods have a default implementation that will return Date() resulting in a single-page calendar displaying the current month.

The delegate responds to events such as scrolling and the selection of specific dates.

Note: The dates should be in UTC (same as GMT)

How to Use

You would want to implement the delegate functions inside your view controller as they appear in the example project.

Say you want to be able to scroll 3 months into the past, then:

func startDate() -> Date {
    var dateComponents = DateComponents()
    dateComponents.month = -3
    let today = Date()
    let threeMonthsAgo = self.calendarView.calendar.date(byAdding: dateComponents, to: today)
    return threeMonthsAgo
}

You probably still want the calendar to open in today's date, so in this case do:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let today = Date()
    self.calendarView.setDisplayDate(today, animated: false)        
}

Say you want tomorrow to be selected for some reason:

// can be in the viewDidAppear
let today = Date()
if let tomorrow = self.calendarView.calendar.date(byAdding: tomorrowComponents, to: today) {
  self.calendarView.selectDate(tomorrow)
}

Selecting and Deselecting Dates

The calendar supports the selection of multiple dates. You can select a date either by clicking on a cell or by selecting it programmatically as:

self.calendarView.selectDate(date)

Similarly you can deselect:

self.calendarView.deselectDate(date)

You can get all the dates that were selected, either manually or programatically using:

self.calendarView.selectedDates

Layout

The calendar supports two basic layouts. Set the direction property to .horizontal or .vertical:

calendarView.direction = .horizontal

Styling

The look of this calendar can be set using the CalendarView.Style structure. There is an "out of the box" style that can be accessed statically through CalendarView.Style.Default. To change it, instantiatia a new Style object and set the variables in their desired value anywhere in your code.

override func viewDidLoad() {

    super.viewDidLoad()

    let myStyle = CalendarView.Style()
    // set your values
    calendarView.style = myStyle
}

For more information have a look at our wiki.

Marking Weekends

Some calendars will want to display weekends as special and mark them with a different text color. To do that, first set the marksWeekends variable on the calendarView itself and (optionally) define the color to use.

CalendarView.Style.cellTextColorWeekend = UIColor.red
calendarView.marksWeekends = true

IB Screenshot

The CellShape will define whether the dates are displayed in a circle or square with bevel or not.

Graying out days

If you want the days that lie outside of the rage set by startDate and endDate, you can set the color in:

CalendarView.Style.cellColorOutOfRange = UIColor(white: 0.0, alpha: 0.5)

IB Screenshot

First Day of the Week

Depending on the culture weeks are considered to start either on a Monday or on a Sunday. To change the way the days are displayed use:

CalendarView.Style.firstWeekday = .sunday

IB Screenshot

The calendar defaults to Monday which is standard in Europe.

Set locale of calendar

Set the locale for header labels of Weekdays and Month. Use:

CalendarView.Style.locale = Locale(identifier: "en_US")

IB Screenshot

The locale default is Locale.current of your device.

Custom Headers

Depending on the language, you might experience problems displaying the month strings in the header. There is however a method you can implement that will return any string you wish according to the date passed.

public protocol CalendarViewDataSource {
    /* other methods */
    func headerString(_ date: Date) -> String?
}

Events

This component has the ability to sync events from the system's EKEventStore, which is shared with the native calendar provided in iOS. This ability is optional and (in order to keep the calendar's footprint low) needs to be activated seperatly via a custom flag in the build settings as shown below:

Events Screenshot

In the "Build Settings," under the "Swift Compiler - Custom Flags" and "Active Compilation Conditions," simply add the KDCALENDAR_EVENT_MANAGER_ENABLED flag for both debug and release. The events will be enabled.

Loading Events

To load events from the system's calendar call the followint method:

self.calendarView.loadEvents()

Optionally, a complete handler can be added in case an error is returned

self.calendarView.loadEvents() { error in
    if error != nil {
        // handle error
    }
}

The code will pop up an alert view to ask the user if he will allow this app to access the calendar. If access is granted we can pass the events to the CalendarView, otherwise we get a nil and notify the app about the denial.

Creating (Adding) New Events

There is a function that allows you to add a new event in the calendar. It is currently restrictred to a single day (like the rest of the calendar)

func addEvent(_ title: String, date: Date, duration hours: NSInteger = 1) -> Bool

To detect when the user wants to add a new date, the delegate can implement the didLongPressDate method will notify the controller for a long press and the addEvent function is usually used in conjuction with this delegate method.

Currently, the example implementation of this repo will open an alert view that will prompt the user for a title to the event and set it for the duration of an hour. Custom controls could be added to further refine the selection.

As with the loading of the events we need to give persmissions to the app.

About Dates

Calculating dates can be somewhat complicated because while time is an absolute value, dates are a construct of culture: timezones are geopolitical areas and daylight savings times change according to government decision. The best way out of this is to calculate everything in UTC (same as GTM for what we are concerned) and so the startDate and endDate returned from the delegate should all be in UTC (+0000) time.

Help Needed

If you want to contribute there are always some open issues marked as enhancements in the issues tab. Any help is welcome.

calendarview's People

Contributors

aadjemonkeyrock avatar apaganuchi avatar arbitur avatar chrisballinger avatar danielgindi avatar david2coders avatar fanquake avatar felipedemetrius avatar francofantillo avatar galbernator avatar jaapp- avatar jeet-chanchawat avatar levous avatar mmick66 avatar simone-gasparini avatar suvov avatar tinder-sgong avatar tjnet avatar tobaloidee avatar vitormesquita avatar wacumov 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

calendarview's Issues

Previous date change issue

Hello,

today i have implemented CalendarView in Swift 4 & . it is working smoothly.here i have one issue that previous month is going for only 2 month from today as i am working on logs app. so i need to pick more than 2 month old date so can you can you tell me how to resolve this issue, will be good if it solved quickly or can you just give me hint how can i change startDateCache ?
Thank you..

Adding an event causes internal mix-up with date

I'm not sure how exactly because I've debugged it all the way down to Eventsmanager.add function and the date stays correct all the way through. However, if you stop the program and go look at your iOS calendar the date is always a day before. Aka - I'll make an event for September 25th, but in the iOS calendar it shows September 24th at 6 - 7 PM.

So when I restart the application and calendarView.loadEvents() is called it now shows the 24th, not the 25th. Maybe someone else could shed some light on the issue as I've traced it back but maybe not as far as I need to? Btw I'm on iphone X simulator if that matters.

Update:

So I ended up adding 9 hours to the didLongPressDate function and it 'fixed' it. Not really a fix though. Essentially what is happening is that it's not taking into account the timezone change. When you add a date using the didLongPressDate it automatically sets the date for example, startDate: 2018-09-27 00:00:00, endDate 2018-09-27 01:00:00. Which is fine but when it adds it to my Mountain Time/USA timezone it adds to to 2018-09-26 18:00:00 to 2018-09-26 19:00:00. Hence why adding 9 hours 'fixed it' but not really.

It seems that this is explained on the Readme. missed that woops. However, Is there a way to fix this problem so that it pertains to each individuals users time zone? Or whats the best way to go about this?

Incorrect Date selected?

I have implemented the code provided and there seems to be a mismatch between the dates on the calendar and the dates selected?

The following code:

    func calendar(_ calendar: CalendarView, didSelectDate date : Date, withEvents events: [EKEvent]) {

        if events.count > 0 {
            let event : EKEvent = events[0]
            print("We have an event starting at \(event.startDate) : \(event.title)")
        }
        print("Did Select: \(date) with Events: \(events.count)")

    }

returns the following to the console when 4th July is selected?

We have an event starting at 2016-10-09 20:25:00 +0000 : Raiders vs Chargers (Week 5)
Did Select: 2016-07-04 00:00:00 +0000 with Events: 1

I guess that the events array is not being fully populated so the indexes are misaligned. Any idea what may cause this?

Dates are incorrect

I'm not sure if this is actively maintained, but running the project cloned out of github shows the wrong dates ..

For example, running it today (April 23rd) highlights March 24th as "today". The days are all lined up incorrectly as well. It says that January 1st is a Sunday.

Ability to select dates in range format

Is there a way to select dates by range instead of either daily or multiple days? So if a user selected Monday to Friday all days in between would be selected too.

Starting month display

Not really an issue but a request for having an option to select the calendar display start month. So currently I have it in my app with 6 months history but at the moment the calendar starts by displaying the very first month when I would rather have it always start with the current month and then I can choose to page back 6 months.

Is this something you could easily add to your code or have a suggestion as how best to achieve? I have played around trying to use 'scrollToItemAtIndexPath' but with no success so any help would be gratefully appreciated.

Many thanks,

Carl

Week view with events

Hi Michael...first of all great tutorial. I have modified your code as per my requirement and works like a charm. Can you please help me to create week view control with the same. I want to list events as in default calendar app.

Logo Proposal

Good day @mmick66 I am a graphic designer and an open source enthusiast and i would like to contribute a logo design for your good project for free. If you will permit me, I will begin my design asap. Thanks and best regards! - Tobaloidee

Support for Sunday started weeks

Hello! Some users mentioned that they are used to use calendars starting on Sunday - could we add an option to support that? Thanks!

month-1 does nothing sometimes

There is an issue when you call previous month method, sometimes it does not go to the desired month-1.

Here is an ugly fix based on previous code..

func setDisplayDate(_ date : Date, animated: Bool) {
	
	if let dispDate = self.displayDate {
		
		// skip is we are trying to set the same date
		if  date.compare(dispDate) == ComparisonResult.orderedSame {
			return
		}
		
		// check if the date is within range
		
		if startDateCache == date {
			return
		}
		if let startDateCache2 = self.calendar.date(byAdding: .month, value: -1, to: startDateCache) {
			if  date.compare(startDateCache2) == ComparisonResult.orderedAscending {
				return
			}
		}
		else
		{
			if  date.compare(startDateCache) == ComparisonResult.orderedAscending {
				return
			}
		}
		
		if  date.compare(endDateCache) == ComparisonResult.orderedDescending   {
			return
		}
		
		
		self.collectionView.setContentOffset(
			self.scrollViewOffset(in: self.collectionView, for: date),
			animated: animated
		)
		
	}
	
}

/*
func setDisplayDate(_ date : Date, animated: Bool) {
	
	// Julien
	if date == startDateCache {
		return
	}
	let newStartDateCache = self.calendar.date(byAdding: .month, value: -1, to: startDateCache)

		
	guard (date > newStartDateCache!) && (date < endDateCache) else { return }
	
	self.collectionView.setContentOffset(
		self.scrollViewOffset(in: self.collectionView, for: date),
		animated: animated
	)
	
	self.displayDateOnHeader(date)
	
}
*/

Selected Date dissapear after page scrolling

FYI -- Just fixed this issue by swapping lines here

func selectDate(_ date : Date) {
    
    guard let indexPath = self.indexPathForDate(date) else {
        return
    }

// Put this one BEFORE
self.calendarView.selectItem(at: indexPath, animated: false, scrollPosition: UICollectionViewScrollPosition())

    guard self.calendarView.indexPathsForSelectedItems?.contains(indexPath) == false else {
        return
	}

Select date cell in calendar return the wrong date

Hi mmick66,
I just download your project 'Calendar View' and try to run your demo code. Your project is running well but when I try to click on any date cell in calendar, it return the wrong date.

Thank you.

Calendar View not loading the endDate() month

Let me just say I freaking love this library, thanks for it man!

Now, to the issue:
My App is loading an array of events from the Graph API, and I just want to show the calendar up to the month of the last event. So if the last event is on the 7th of March and we're in January, I want to have January, February and March showing up.

I come across this issue where the last month of calendar is not being shown, and in order for it show I have to add enough days to the endDate().

Eg.:
` func endDate() -> Date {
var calendarEndDate = Date()
print("Current Date: (calendarEndDate)")

    for event in events.list {
        print("Evaluating: \(event.startTime!)")
        if event.startTime > calendarEndDate {
            calendarEndDate = event.startTime
        }
    }
    print("Calendar End Date: \(calendarEndDate)")
    
    var dateComponents = DateComponents()
    dateComponents.day = +6
    
    calendarEndDate = self.calendarView.calendar.date(byAdding: dateComponents, to: calendarEndDate)!
    print("Fixed endDate: \(calendarEndDate)")
    return calendarEndDate
}`

if the last event is on the 7th of March, without adding 6 more day to the end date, I could not see March in the Calendar.

Not sure if this is a bug, or working as intended, but the workaround I found was jut to add 13 days to the end date, in order to pass the threshold of the day 12 which is when it starts showing the calendar.

Once again, thanks for the awesome library!

There is a small problem with the deselect delegate

The bold text need to be included in the line to make sure that the de-selecting of the days return the right de-selected days. Otherwise, it always returns the last selected days.

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    guard let dateBeingSelectedByUser = dateBeingSelectedByUser else {
        return
    }
    
    guard let index = selectedIndexPaths.index(of: indexPath) else {
        return
    }

    delegate?.calendar?(self, didDeselectDate: dateBeingSelectedByUser)

    selectedIndexPaths.remove(at: index)
    selectedDates.remove(at: index)
    
    **self.dateBeingSelectedByUser = selectedDates.last**
    
}

Adding Next and Previous Month functionality results in garbled dates

I tried to implement next and previous month functionality in my custom class EventViewController by adding the following function in CalendarView class

    func moveCalendarToDate(date: Date) {
        if let indexPathForDate = indexPathForDate(date) {
            calendarView.scrollToItem(at: indexPathForDate, at: .centeredHorizontally, animated: true)
        }
    }

where I manually calculate the next and previous month dates in code using
Inside EventViewController, I have following method to call method on calendarView

   func moveCalendar(byAdvance advance: CalendarMonthAdvanceType, fromDate date: Date) -> 
    Date? {
    var nextDate: Date?
    
    // This is the current date in view and user wants to move to next month
    let calendar = Calendar.current
    
    nextDate = calendar.date(byAdding: .month, value: 1, to: date)
    
    let unitFlags = Set<Calendar.Component>([.year, .month])
    calendar.timeZone = TimeZone(identifier: "UTC")!
    
    let components = calendar.dateComponents(unitFlags, from: nextDate!)
    nextDate = calendar.date(from: components)!
    
    calendarView.moveCalendarToDate(date: nextDate!)

    return nextDate
}

enum CalendarMonthAdvanceType: Int {
    case previous = -1
    case next = 1
}

However calling this method has weird implications where all dates are shifted by one column. I have tried going over the code over and over again but most probably I am missing something pretty small. Could you please take a look and add some pointers to help me fix this.

Screenshot attached for view hierarchy.

Normal calendar view For July 2017
july-2017-calendar

Distorted calendar view for August 2017
august-2017-calendar

View hierarchy as captured via XCode

view-hierarchy

option to disable deselection of dates

please add this enhancement.

 extension CalendarView: UICollectionViewDelegateFlowLayout {
    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    
    guard let date = self.dateFromIndexPath(indexPath) else { return }
    
    if let index = selectedIndexPaths.index(of: indexPath) {
        
        delegate?.calendar(self, didDeselectDate: date) // this method is still called to be used for hiding the calander view
        if enableDeslection {  // true by default
            selectedIndexPaths.remove(at: index)
            selectedDates.remove(at: index)
        }
        
    }

Grey out non-selectable dates

greydates

Please add this feature based on the method "func calendar(_ calendar: CalendarView, canSelectDate date: Date) -> Bool "

show full calendar

its only showing calendar for 6 months . how can I change it to show all the months for all the years??

Events from a web api?

Is it possible to use a web api for a list of events rather than the device calendar?

Month label goes under the navigation bar

Steps to reproduce:
1-In the current example of the project if you go to the storyboard and select the View Controller and put it under a navigation controller from Editor/Embed In/Navigation Controller. It adds navigation controller to the view but you will get a warning from CalendarView constraints. It wants to move down the view (Like bellow Screenshot).
s1
If you fix the warning based on the suggestion, it moves down the view and warning goes away (Like bellow screenshot).

s2

But at runtime, month label goes completely under the navigation bar like bellow screenshot.
screen shot 2016-05-01 at 5 39 03 pm

Localization issue

Everything is perfect.
The name of the month is not correct in Russian. I can not change the title, this is a private method.
To display the title correctly, I recommend using something like this:

func displayDateOnHeader(_ date: Date) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "LLLL yyyy"
        self.headerView.monthLabel.text = dateFormatter.string(from: date)
        
        self.displayDate = date
}

Calendar is Crashing in IOS10

Calender is working fine in ios9 it's showing the events also,
when I can run this code in Ios10 application is crashing
After this calling it's crashing

        newCalendar.source = sourcesInEventStore.filter{
            (source: EKSource) -> Bool in
            source.sourceType.rawValue == EKSourceType.local.rawValue
         }.first!

'setDisplayDate' is inaccessible due to 'internal' protection level

Hi there,
I want to start using your calendar and i followed the instructions, but something seems to be wrong.
Not sure if it's me or not, but here's what i've done:

  1. Added your library via Pod.
  2. Added UIView to my storyboard as follows:
    screen shot 2018-06-03 at 18
  3. Entered the following codes and got 'setDisplayDate' is inaccessible due to 'internal' protection level:
import KDCalendar

@IBOutlet weak var calendarView: CalendarView!

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let today = Date()
    self.calendarView.setDisplayDate(today, animated: false)
}

Edit:
I'm using Xcode 9.4 (latest) and latest swift.

Any idea what's wrong?
Thanks :)

Increase Height and Width of Cell

Hello Sir,

Hope you are doing well!

  1. Please help how I can increase the Height and Width of Cell.

  2. I want to show the event of the current month below of date. Event means I want to show the description level.

Thanks

Wrong date for "Today cell"

The default calendar highlights the current date in a red shade. However, the current date is not always correct, I believe because of time zone. In order to display the proper current date on the calendar itself, is there a method I am missing to provide this or should the library in this case get the current time zone in order to color the appropriate current date?

Cell Selected Colors not Hooked Up

Neither cellSelectedTextColor or cellSelectedColor work. Searching the code and, outside of the definition for these variables, they are never used.

calculateDateBasedOnScrollViewPosition

In your function calculateDateBasedOnScrollViewPosition once you set it up as Vertical it won´t update the headerView.monthLabel.text because you have it set up like
var page : Int = Int(floor(self.calendarView.contentOffset.x / cvbounds.size.width))

so in order for it to work once it's set up vertically it should be

    var page : Int = direction == .Horizontal ? Int(floor(self.calendarView.contentOffset.x / cvbounds.size.width)) : Int(floor(self.calendarView.contentOffset.y / cvbounds.size.height))

Instance of new calendar and date selection

Hi.

I have problem with multiselection..
I have button that navigates me to the next screen, the first instance of class works perfectly fine, but when dismiss View Controller and press button one more time, I can't deselect cell, when multi selection is enabled.

issues with pod

I'm using pod 'KDCalendar', '~> 1.3.0'. But I can't call function anymore in my project.
Can you help me fix this?.

chagne month name

hello...ex
how to change "month name" to chinese or persian ?
and
how to change "day name" to chinese or persian ?

Event View

can you modify with by removing that date selection part and add a event view for particular selected date on there. ?

Selection

Is there a way to select the selection type ex. to be a single date selection or just as it is multiple.

Retrieving Cell date within UICollectionView - Cell for item at index

I would like to get the cell date from within the UICollectionView - cell for item at index path, as dependant on certain dates I want to do something. These are not events so this is why I am not flagging them that way. I simply have a list of dates which for those dates I wish to change the cell colour.

Changing the cell colour I can do but I am having trouble retrieving the date accurately.

Within this function (UICollectionView CellForItemAtIndex - I did add this code, which seems ok apart from if you change your timezone. So within GMT/UTC it works fine but as soon as I move out to say EST then the cell date being returned is incorrect.

let firstDayInMonth = currentMonthInfo[0]
var offsetComponents = DateComponents()
offsetComponents.month = indexPath.section
offsetComponents.day = indexPath.item - firstDayInMonth
var cellDate = (Calendar.current as NSCalendar).date(byAdding: offsetComponents, to: self.startOfMonthCache, options: NSCalendar.Options())

Any thoughts what I am doing wrong?

Initial date issue

when i change the start date, the initial view change also, like it shows 2015 instead of the current year

Orientation Issue

Why the position of the view is not changing?

I do everything with the view to change the position but it remains on the same stage.
Nothing is affecting on them

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.