matthewbub / calendar-widgets Goto Github PK
View Code? Open in Web Editor NEWCraft beautifully robust date components in React.
Home Page: http://calendar-widgets.com/
License: MIT License
Craft beautifully robust date components in React.
Home Page: http://calendar-widgets.com/
License: MIT License
that shit is long and it doesnt need to be
I believe there is also a script in the ./package.json
file that refrences that folder name, so we'd want to update that as well
it should not break if I pass a invalid number length
it should tell me that invalid number length was the cause
it should not break if invalid shape was passed
it should return a message if invalid shape was passed
Building on #18 , and accounting for web accessibility - an argument we'll need to account for is localization. In my head that would look something like
calendar(1999, {
locale: 'en-US'
});
This should be an optional value passed in the options object. - The options object does not exist yet.
See more here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_locales
in relation to #6
For the existing helper utilities, it's been decided that we could benefit from a few more Helper utilities -
getDefaultLocale
- Gets the users default locale, so we don't have to hardcode any value. Right now things are inconsistent, some methods are defaulting to en-US
isLocaleSupported
- Checks from the list of locales we have support for at this time. The full list / roadmap is currently available in https://github.com/9mbs/calendar-widgets/blob/main/workspaces/calendar-widgets/src/locale/index.ts
getDefaultLocale
Prettier and ESLint coexisting in harmony is usually more effort than its worth, i'd say lets just remove Prettier and depend on custom ESLint rules
Actual: Link opens in a new tab
Expected: Link opens in the same tab
After a year of operating under the generalized name WhileThisCompiles, i've decided to rebrand to a more professional appearance - Calendar Widgets! The rebrand is more than just a name change, I'm planning on investing a fair amount of my time and resources into the development of this SDK and API. I'm also planning a UI library which is intended to be the core product offering from the calendar-widgets
package.
calendar-widgets
. The scope @whilethiscompiles/calendar
is depreciated but will continue to exist on NPM as is.calendar-widgets
because we care
./lib/calendar/
./lib/calendar-tests/
./lib/developer/
./
The API is dead and will not be used moving forward ☠️
This should be a straightforward and simple task. We can build from what exists in the /lib/calendar-tests
directory.
I would like to ensure that both future and past leap years are accounted for, as this is the most vital part we need to make sure is right.
utilities that are tested and ready for use pending documentation:
formatDate
getCalendarYear
getDaysInMonth
isValidDay
isValidMonth
isValidYear
listDaysInMonths
Some things that would be helpful to include:
side note: nice looking project by the way, I like the idea list , I was also working on a somewhat similar package along these lines because of my frustrations in working with the date and times
This change proposes to add the src directory to the .npmignore
file within the calendar-widgets directory, to exclude it from being published to npm. The src directory contains TypeScript files that are not needed for the end-user and can cause issues if published to npm.
We don't have anything to replace it with for now, just remove it so we do not see the Docusaurus logo 🙂
The following scripts do not function as intended. We should remove them from the primary package.json
dev:cleaninstall:calendar-tests
dev:cleaninstall:developer
dev:cleaninstall
We could use the same example used in the website.
It would be awesome if we could get a link to the Code Sandbox included in the Primary README for the this repository. I was able to confirm the latest version of the SDK is available in the NPM registry from within CodeSandbox so there should be no issues there
We do not need workspaces/calendar-widgets/dist
to be tracked in Git. We only need it in the NPM build
/lib/calendar/
/lib/calendar-tests/
/lib/developer/
It wasn't so bad at first, but it's getting difficult to manage the test suites in https://github.com/9mbs/calendar-widgets/blob/main/workspaces/tests/test/index.test.js. This ticket is to break that file down into as many files as needed. There should be no functional changes, just code refactoring.
This proposal suggests simplifying the output of the getCalendarYear
method by replacing the current output with a more concise one.
Currently, the getCalendarYear
method returns an object representing a calendar year with the number of days and a list of days for each month. The output includes nested objects with the month name as the key and an object containing the count and collection as the value. This output structure can be complex and challenging to work with for users who want to extract the data.
To simplify the output, this proposal suggests changing the output to a flat object that includes the month name as the key and the list of days as the value. This output structure will be more straightforward and easier to work with for users who want to extract the data.
This is confusing and causing unnecessary difficulties for folks getting started locally. The start
script within the /workspaces/calendar-widgets/package.json
file does nothing at all and should be removed from the project. We only need the build and lint commands.
This ticket is available to anyone who wants it 👋 Its not my highest priority but i image it would be fun. We need to produce a minified build output to reduce the bundle size more than it already is. (Its growing)
https://github.com/rollup/plugins lists terser as the package of choice that generates a minified output bundle.
This ticket is a continuation of use pnpm instead of npm #38
package-lock.json
filespnpm-lock.yaml
files to each corresponding directorypackage-lock.json
to the root .gitignore
to avoid future confusionWe were originally using ChatGPT to translate languages, but I'm not 100% confident in it that. PRs are welcome here 👋 This will ultimately be outsourced when we reach a stable release
Supported so far
const roadmap = {
'ar-IQ': 'Arabic (Iraq)',
'ar-JO': 'Arabic (Jordan)',
'ar-KM': 'Arabic (Comoros)',
'ar-KW': 'Arabic (Kuwait)',
'ar-LB': 'Arabic (Lebanon)',
'ar-LY': 'Arabic (Libya)',
'ar-MA': 'Arabic (Morocco)',
'ar-MR': 'Arabic (Mauritania)',
'ar-OM': 'Arabic (Oman)',
'ar-PS': 'Arabic (Palestinian Territories)',
'ar-QA': 'Arabic (Qatar)',
'ar-SD': 'Arabic (Sudan)',
'ar-SO': 'Arabic (Somalia)',
'ar-SS': 'Arabic (South Sudan)',
'ar-SY': 'Arabic (Syria)',
'ar-TD': 'Arabic (Chad)',
'ar-TN': 'Arabic (Tunisia)',
'ar-YE': 'Arabic (Yemen)',
'hy-AM': 'Armenian (Armenia)',
'as-IN': 'Assamese (India)',
'av-RU': 'Avaric (Russia)',
'ae': 'Avestan (world)',
'awa-IN': 'Awadhi (India)',
'ay-BO': 'Aymara (Bolivia)',
'ay-PE': 'Aymara (Peru)',
'az-AZ': 'Azerbaijani (Azerbaijan)',
'az-Cyrl-AZ': 'Azerbaijani (Cyrillic, Azerbaijan)',
'az-Latn-AZ': 'Azerbaijani (Latin, Azerbaijan)',
'ba-RU': 'Bashkir (Russia)',
'bm-ML': 'Bambara (Mali)',
'be-BY': 'Belarusian (Belarus)',
'bn-BD': 'Bengali (Bangladesh)',
'bh-IN': 'Bihari (India)',
'bi-VU': 'Bislama (Vanuatu)',
'bs-BA': 'Bosnian (Bosnia & Herzegovina)',
'bs-Cyrl-BA': 'Bosnian (Cyrillic, Bosnia & Herzegovina)',
'bs-Latn-BA': 'Bosnian (Latin, Bosnia & Herzegovina)',
'br-FR': 'Breton (France)',
'bg-BG': 'Bulgarian (Bulgaria)',
'my-MM': 'Burmese (Myanmar (Burma))',
'ca-AD': 'Catalan (Andorra)',
'ca-ES': 'Catalan (Spain)',
'ca-FR': 'Catalan (France)',
'ca-IT': 'Catalan (Italy)',
'ch-GU': 'Chamorro (Guam)',
'ce-RU': 'Chechen (Russia)',
'chr-US': 'Cherokee (United States)',
'ny-MW': 'Chichewa (Malawi)',
'zh-HK': 'Chinese (Traditional, Hong Kong SAR)',
'zh-MO': 'Chinese (Traditional, Macao SAR)',
'zh-TW': 'Chinese (Traditional, Taiwan)',
'co-FR': 'Corsican (France)',
'cr-CA': 'Cree (Canada)',
'hr-HR': 'Croatian (Croatia)',
'hr-Latn-HR': 'Croatian (Latin, Croatia)',
'cs-CZ': 'Czech (Czech Republic)',
'da-DK': 'Danish (Denmark)',
'da-GL': 'Danish (Greenland)',
'dv-MV': 'Divehi (Maldives)',
'nl-BE': 'Dutch (Belgium)',
'nl-NL': 'Dutch (Netherlands)',
'dz-BT': 'Dzongkha (Bhutan)',
'en-AU': 'English (Australia)',
'en-CA': 'English (Canada)',
'en-IN': 'English (India)',
'en-IE': 'English (Ireland)',
'en-JM': 'English (Jamaica)',
'en-MY': 'English (Malaysia)',
'en-NZ': 'English (New Zealand)',
'en-PH': 'English (Philippines)',
'en-SG': 'English (Singapore)',
'en-ZA': 'English (South Africa)',
'en-TT': 'English (Trinidad & Tobago)',
'eo': 'Esperanto (world)',
'et-EE': 'Estonian (Estonia)',
'ee-GH': 'Ewe (Ghana)',
'ee-TG': 'Ewe (Togo)',
'fo-DK': 'Faroese (Denmark)',
'fo-FO': 'Faroese (Faroe Islands)',
'fj-FJ': 'Fijian (Fiji)',
'fi-FI': 'Finnish (Finland)',
'fr-BE': 'French (Belgium)',
'fr-CA': 'French (Canada)',
'fr-CH': 'French (Switzerland)',
'fr-LU': 'French (Luxembourg)',
'fr-MC': 'French (Monaco)',
'fr-VU': 'French (Vanuatu)',
'ff-CM': 'Fulah (Cameroon)',
'ff-GN': 'Fulah (Guinea)',
'ff-MR': 'Fulah (Mauritania)',
'ff-SN': 'Fulah (Senegal)',
'gl-ES': 'Galician (Spain)',
'ka-GE': 'Georgian (Georgia)',
'de-AT': 'German (Austria)',
'de-BE': 'German (Belgium)',
'de-CH': 'German (Switzerland)',
'de-LU': 'German (Luxembourg)',
'de-LI': 'German (Liechtenstein)',
'el-CY': 'Greek (Cyprus)',
'el-GR': 'Greek (Greece)',
'gn-PY': 'Guarani (Paraguay)',
'ht-HT': 'Haitian Creole (Haiti)',
'ha-GH': 'Hausa (Ghana)',
'ha-NE': 'Hausa (Niger)',
'ha-NG': 'Hausa (Nigeria)',
'haw-US': 'Hawaiian (United States)',
'he-IL': 'Hebrew (Israel)',
'hi-IN': 'Hindi (India)',
'hil-PH': 'Hiligaynon (Philippines)',
'hu-HU': 'Hungarian (Hungary)',
'is-IS': 'Icelandic (Iceland)',
'ig-NG': 'Igbo (Nigeria)',
'id-ID': 'Indonesian (Indonesia)',
'ia': 'Interlingua (world)',
'ie': 'Interlingue (world)',
'iu-CA': 'Inuktitut (Canada)',
'iu-Latn-CA': 'Inuktitut (Latin, Canada)',
'ik-US': 'Inupiaq (United States)',
'ga-IE': 'Irish (Ireland)',
'it-CH': 'Italian (Switzerland)',
'it-IT': 'Italian (Italy)',
'jv-ID': 'Javanese (Indonesia)',
'kea-CV': 'Kabuverdianu (Cape Verde)',
'kl-GL': 'Kalaallisut (Greenland)',
'kn-IN': 'Kannada (India)',
'kr-NG': 'Kanuri (Nigeria)',
'ks-IN': 'Kashmiri (India)',
'kk-KZ': 'Kazakh (Kazakhstan)',
'km-KH': 'Khmer (Cambodia)',
'ki-KE': 'Kikuyu (Kenya)',
'rw-RW': 'Kinyarwanda (Rwanda)',
'kv-RU': 'Komi (Russia)',
'kg-CD': 'Kongo (Democratic Republic of the Congo)',
'kok-IN': 'Konkani (India)',
'ko-KR': 'Korean (South Korea)',
'ku-IQ': 'Kurdish (Iraq)',
'ku-IR': 'Kurdish (Iran)',
'ku-TR': 'Kurdish (Turkey)',
'kj-AO': 'Kwanyama (Angola)',
'ky-KG': 'Kyrgyz (Kyrgyzstan)',
'lo-LA': 'Lao (Laos)',
'la': 'Latin (world)',
'lv-LV': 'Latvian (Latvia)',
'li-NL': 'Limburgish (Netherlands)',
'ln-AO': 'Lingala (Angola)',
'ln-CD': 'Lingala (Democratic Republic of the Congo)',
'ln-CF': 'Lingala (Central African Republic)',
'ln-CG': 'Lingala (Congo - Brazzaville)',
'lt-LT': 'Lithuanian (Lithuania)',
'lu-CD': 'Luba-Katanga (Democratic Republic of the Congo)',
'lb-LU': 'Luxembourgish (Luxembourg)',
'mk-MK': 'Macedonian (North Macedonia)',
'mg-MG': 'Malagasy (Madagascar)',
'ms-BN': 'Malay (Brunei)',
'ms-MY': 'Malay (Malaysia)',
'ml-IN': 'Malayalam (India)',
'mt-MT': 'Maltese (Malta)',
'gv-IM': 'Manx (Isle of Man)',
'mi-NZ': 'Maori (New Zealand)',
'mr-IN': 'Marathi (India)',
"mh-MH": "Marshallese (Marshall Islands)",
"mn-MN": "Mongolian (Mongolia)",
"mn-Mong-CN": "Mongolian (Traditional Mongolian, China)",
"sr-ME": "Montenegrin (Montenegro)",
"sr-Latn-ME": "Montenegrin (Latin, Montenegro)",
"mos-CM": "More (Cameroon)",
"naq-NA": "Nama (Namibia)",
"na-NR": "Nauru (Nauru)",
"nv-US": "Navajo (United States)",
"ng-NZ": "Ndonga (Namibia)",
"ne-IN": "Nepali (India)",
"ne-NP": "Nepali (Nepal)",
"nl-AW": "Dutch (Aruba)",
"nl-BQ": "Dutch (Bonaire, Sint Eustatius and Saba)",
"nl-CW": "Dutch (Curaçao)",
"nl-SX": "Dutch (Sint Maarten)",
"nb-NO": "Norwegian Bokmål (Norway)",
"nn-NO": "Norwegian Nynorsk (Norway)",
"no-SJ": "Norwegian (Svalbard & Jan Mayen)",
"no-NO": "Norwegian (Norway)",
"nqo-GN": "N'ko (Guinea)",
"oc-FR": "Occitan (France)",
"oj-CA": "Ojibwa (Canada)",
"oj-US": "Ojibwa (United States)",
"cu": "Old Church Slavonic (world)",
"or-IN": "Oriya (India)",
"om-ET": "Oromo (Ethiopia)",
"om-KE": "Oromo (Kenya)",
"os-RU": "Ossetic (Russia)",
"os-GE": "Ossetic (Georgia)",
"pi": "Pāli (world)",
"ps-AF": "Pashto (Afghanistan)",
"fa-AF": "Persian (Afghanistan)",
"fa-IR": "Persian (Iran)",
"pl-PL": "Polish (Poland)",
"pt-CV": "Portuguese (Cape Verde)",
"pt-GW": "Portuguese (Guinea-Bissau)",
"pt-LU": "Portuguese (Luxembourg)",
"pt-MO": "Portuguese (Macao SAR)",
"pt-MZ": "Portuguese (Mozambique)",
"pt-PT": "Portuguese (Portugal)",
"pt-ST": "Portuguese (São Tomé & Príncipe)",
"pt-TL": "Portuguese (Timor-Leste)",
"pa-IN": "Punjabi (India)",
"qu-BO": "Quechua (Bolivia)",
"qu-EC": "Quechua (Ecuador)",
"qu-PE": "Quechua (Peru)",
"ro-MD": "Romanian (Moldova)",
"ro-RO": "Romanian (Romania)",
"rm-CH": "Romansh (Switzerland)",
"rn-BI": "Rundi (Burundi)",
"ru-BY": "Russian (Belarus)",
"ru-KG": "Russian (Kyrgyzstan)",
"ru-KZ": "Russian (Kazakhstan)",
"ru-MD": "Russian (Moldova)",
"ru-UA": "Russian (Ukraine)",
"sm-AS": "Samoan (American Samoa)",
"sm-WS": "Samoan (Samoa)",
"sg-CF": "Sango (Central African Republic)",
"sa-IN": "Sanskrit (India)",
"sat-IN": "Santali (India)",
"sc-IT": "Sardinian (Italy)",
"gd": "Scots Gaelic (United Kingdom)",
"sr-BA": "Serbian (Bosnia & Herzegovina)",
"sr-Cyrl-BA": "Serbian (Cyrillic, Bosnia & Herzegovina)",
"sr-Cyrl-ME": "Serbian (Cyrillic, Montenegro)",
"sr-Cyrl-RS": "Serbian (Cyrillic, Serbia)",
"sr-Latn-RS": "Serbian (Latin, Serbia)",
"st-LS": "Sesotho (Lesotho)",
"st-ZA": "Sesotho (South Africa)",
"sn-ZW": "Shona (Zimbabwe)",
"ii-CN": "Sichuan Yi (China)",
"sd-IN": "Sindhi (India)",
"si-LK": "Sinhala (Sri Lanka)",
"sk-SK": "Slovak (Slovakia)",
"sl-SI": "Slovenian (Slovenia)",
"so-DJ": "Somali (Djibouti)",
"so-ET": "Somali (Ethiopia)",
"so-KE": "Somali (Kenya)",
"so-SO": "Somali (Somalia)",
"es-AR": "Spanish (Argentina)",
"es-BO": "Spanish (Bolivia)",
"es-CL": "Spanish (Chile)",
"es-CO": "Spanish (Colombia)",
"es-CR": "Spanish (Costa Rica)",
"es-DO": "Spanish (Dominican Republic)",
"es-EC": "Spanish (Ecuador)",
"es-GQ": "Spanish (Equatorial Guinea)",
"es-GT": "Spanish (Guatemala)",
"es-HN": "Spanish (Honduras)",
"es-MX": "Spanish (Mexico)",
"es-NI": "Spanish (Nicaragua)",
"es-PA": "Spanish (Panama)",
"es-PE": "Spanish (Peru)",
"es-PR": "Spanish (Puerto Rico)",
"es-PY": "Spanish (Paraguay)",
"es-SV": "Spanish (El Salvador)",
"es-US": "Spanish (United States)",
"es-UY": "Spanish (Uruguay)",
"es-VE": "Spanish (Venezuela)",
"su-ID": "Sundanese (Indonesia)",
"sw-KE": "Swahili (Kenya)",
"sw-TZ": "Swahili (Tanzania)",
"ss-SZ": "Swati (Eswatini)",
"sv-AX": "Swedish (Åland Islands)",
"sv-FI": "Swedish (Finland)",
"sv-SE": "Swedish (Sweden)",
"syrc": "Syriac (world)",
"syrc-SY": "Syriac (Syria)",
"tg-TJ": "Tajik (Tajikistan)",
"ta-IN": "Tamil (India)",
"ta-LK": "Tamil (Sri Lanka)",
"tt-RU": "Tatar (Russia)",
"te-IN": "Telugu (India)",
"th-TH": "Thai (Thailand)",
"bo-CN": "Tibetan (China)",
"ti-ER": "Tigrinya (Eritrea)",
"ti-ET": "Tigrinya (Ethiopia)",
"to-TO": "Tongan (Tonga)",
"ts-ZA": "Tsonga (South Africa)",
"tn-BW": "Tswana (Botswana)",
"tn-ZA": "Tswana (South Africa)",
"tr-CY": "Turkish (Cyprus)",
"tr-TR": "Turkish (Turkey)",
"tk-TM": "Turkmen (Turkmenistan)",
"ug-CN": "Uighur (China)",
"uk-UA": "Ukrainian (Ukraine)",
"ur-IN": "Urdu (India)",
"ur-PK": "Urdu (Pakistan)",
"uz-Arab-AF": "Uzbek (Arabic, Afghanistan)",
"uz-Cyrl-UZ": "Uzbek (Cyrillic, Uzbekistan)",
"uz-Latn-UZ": "Uzbek (Latin, Uzbekistan)",
"ve-ZA": "Venda (South Africa)",
"vi-VN": "Vietnamese (Vietnam)",
"vo": "Volapük (world)",
"wa-BE": "Walloon (Belgium)",
"cy-GB": "Welsh (United Kingdom)",
"wo-SN": "Wolof (Senegal)",
"xh-ZA": "Xhosa (South Africa)",
"sah-RU": "Yakut (Russia)",
"yi": "Yiddish (world)",
"yo-NG": "Yoruba (Nigeria)",
"za-CN": "Zhuang (China)",
"zu-ZA": "Zulu (South Africa)"
}
getCalendarYear(year: number, locale?: string, options?: Intl.DateTimeFormatOptions)
these options should dictate the response in the [month].collection
field
we're using Rollup in the calendar-widgets
directory, so https://github.com/yousifalraheem/rollup-plugin-summary would probably make sense but i'm open to alternatives
Right now, the getCalendarYear
method will return an object if there is an error:
return {
error: {
body: 'The argument passed to `calendar(\'YYYY\')` must be a valid year between 1900 and 2100. You passed ' + year + '.'
}
};
This object is inconsistent with the rest of our error handling, This ticket is being created to change the error response. It should probably be something more like:
throw new TypeError('The argument passed to `calendar(\'YYYY\')` must be a valid year between 1900 and 2100.');
This will likely break some tests in the workspaces/tests
directory. Please attempt to fix those errors as they arise, if you encounter troubles, feel free to reach out - I'm happy to help 🙂
its not even being used lol
Not sure why it isn't showing in the package homepage, its there in the source code and the latest release: https://www.npmjs.com/package/calendar-widgets
I had typescript setup poorly at one point, i rewrote the app using JS and am now looking to introduce TS the correct way.
This would be a change to the SDK in lib/calendar
Feeling a bit undecided towards the formatting we'll want to use. I see 2 options to accept the 2nd argument
Just add a second arg. This is probably the most straight forward approach when it comes to how a use might want to implement. We'd need to account for error handling in the first arg though, as we're currently checking for a valid 4 digit year.
calendar('YYYY MM DD', 'YYYY MM DD')
This is my preferred option, but I have a feeling others might have mixed feelings about it. I like this approach because we are free to add an unlimited amount of options without needing to worry about modifying existing args & and their conditions. Test cases are less likely to brake. Would make for a smoother dev experience IMO
calendar(null, {
startRange: 'YYYY-MM-DD',
endRange: 'YYYY-MM-DD'
});
this package should be only javascript
would be wanting to test the /lib/calendar-tests
directory only
yuh
Website: https://calendar.whilethiscompiles.com/
should be accessible in the following README files
/README.md
/lib/calendar/README.md
/lib/developer/README.md
I would prefer to have user-feedback before implementing more that what already exists. Basically - I don't want to edit this without additional input. Open to suggestions for enhancement
We could use the same example used in the website.
It would be awesome if we could get a link to the Code Sandbox included in the Primary README for the this repository.
Here are some suggestions after having gone through both files:
readme.md
is that important to include in the main page. Moving it to an appropriate section in contributing.md
("contributing code" section could be the right place). It also frees up space for other exciting things to be showcasedcontributing.md
sounds code related and should perhaps be under "contributing code" as wellThis I would like to work on, especially the installation and running part of each section once I get everything working. I can start tomorrow
should go through each ESLint rule 1 by 1 and see which ones might be applicable to this code base
Implementing in the Nextjs directory - /lib/developer/**
I know that there are markdown parsers available and that can surely be an option. We should also keep in mind we are only working with JSON content so it's all going to be strings.
Possible solutions:
to 1 component, the <JsonInput />
Docs on this component here: https://mantine.dev/core/json-input/
Right now we are only using the SDK in the demo... even though the API tab is present
Create a GitHub Action that performs the following tasks:
./workspaces/calendar-widgets
directory using the command pnpm run lint
./workspaces/calendar-widgets
directory using the command pnpm run build
./workspaces/tests
directory using the command pnpm run test
This action will ensure that the code in the calendar-widgets workspace is properly linted, built, and tested before being deployed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.