Giter Club home page Giter Club logo

lintalist's Introduction

Lintalist: Searchable interactive lists to copy & paste text, run scripts, using easily exchangeable bundles - http://lintalist.github.io/ (snippet manager, text expander)

Introduction

Lintalist allows you to store and (incrementally) search and edit texts in bundles and paste a selected text in your active program. The text can be interactive, for example, you can automatically insert the current time and date, ask for (basic) user input or make a selection from a list etc.

AutoHotkey.com forum thread: https://autohotkey.com/boards/viewtopic.php?f=6&t=3378

Other features:

  • Assign keyboard shortcuts to your favourite Snippets
  • Use abbreviations (shorthand) for your favourite Snippets
  • Run scripts which can be included in a Bundle
  • Use the standard Plugins (date, variables, counters, clipboard etc) or develop your own
  • Read more in the documentation...

Lintalist is open source and developed in AutoHotkey, an easy to learn scripting language for Windows (WinXP and above)

Lintalist search window

Lintalist search window

  1. Type query (multiple search modes)
  2. Menu + search options.
  3. Result list with Part 1, Part 2, Key(board shortcut), Short(hand, abbreviation). Columns are dynamic, if part 2, key or short are not present in the loaded bundle(s) they will not be displayed.
  4. Preview of top most or selected snippet text. In statusbar: loaded bundle(s) and hits / number of snippets.

Installation

  1. New users: Download the lastest release - unpack to a new directory and run lintalist.exe (or lintalist.ahk if you are already an AutoHotkey user)
  2. AutoHotkey users (or installing updates): Download the master.zip - unpack to a new (or your current Lintalist) directory and run lintalist.ahk or lintalist.exe

More information

More about Lintalist in "docs\index.html" after you downloaded it, right click on the tray icon (Help) or visit http://lintalist.github.io/

Videos

AutoHotkey

Lintalist is written in AutoHotkey, a free and open-source utility for Windows. You can learn more about AutoHotkey at http://autohotkey.com/. The source code for AutoHotkey is available at https://github.com/Lexikos/AutoHotkey_L

Note: lintalist.exe is simply a renamed autohotkey.exe included for convenience. This script requires a working copy of autohotkey.exe to be present in order to run user scripts defined in bundles. If you have AHK installed you can safely delete lintalist.exe and just start lintalist.ahk directly.

Elsewhere

Credits

Lintalist uses various libraries, icons and more prepared by others - see credits.txt for a complete list (if something is missing do let me know)

Copyright 2009-2023 Lintalist. See license.txt

lintalist's People

Contributors

exetico avatar lintalist avatar tfwol 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

lintalist's Issues

Not saving modified bundle entries

When I change a bundle snippet through the GUI the change isn't saved to the textfile. New snippets are correctly saved.
The workaround is obvious :-) but it would be nice if it's saved.

Can not use control+b as shortcut

I'm using version 1.6

I don't know why, but I am not able to use control+b as a shortcut for any snippet. Any other key works correctly.

v1.7 (January 10th)

New beta available, v1.7

  • New: SearchLetterVariations setting - Allow for variations of letters in search query - 'e' also searches for 'eéèë...' etc #33
  • New: SnippetEditor Setting - Allow user to set editor to use for "Edit in Editor" #46
  • New: PlaySound Setting - Play sounds after paste, open or close of Search Gui (beeps, default Windows media or user files) #45
  • New: added help menu with 'Help' and 'About' options to the GUIs and added 'About' to tray menu #47
  • Minor fixes and code refactoring.
  • Changelog

I'd be interested to hear any feedback on the search results if you use this version, especially if they are unexpected or different from previous versions.
Adding SearchLetterVariations meant I had to change some underlying code for the various search methods which now makes more of use Regular Expressions which could mean results are different or displaying the results of a fuzzy search has become slower.
(For the PlaySound option: there are no sound files included, just look at sound.ini in the lintalist folder for instructions where to place them.)
Other feedback is welcome too.

Download the ZIP and unpack it to a folder of your choice:
https://github.com/lintalist/lintalist/archive/dev.zip

Command line parameters

  • starting Lintalist and open the search window: -Active
  • Load specific bundle: -bundle=file.txt
  • Load alternate settings: -ini=alternate.ini
  • ...

Possible plugin: Find & Replace (incl. regular expression) - syntax?

Giving a possible find/replace plugin some thought my current thinking is

[[fr=what|fr-name]]

where what can be selected, clipboard, local var, another snippet, user input etc and fr-name refers to a named find and replace action similar to how you call a counter or local variable by its name. That way the snippet can remain nice to look at and easy to edit as regular expressions can become very complex and long making it difficult to read and maintain in the snippet editor.

So a new Find/Replace editor would be added, which would look very much like the current counter editor only with four columns instead of two like so:

fr-name regex y/n find replace
name1 n john John
name2 y iU)^(\d+) (\d+)$ Port $1 is mapped to $2 on server`n
name3 y etc ...

Other suggestions welcome ...

Config: set percentage of width for part1 and part2 in results

Currently when there is a part2 of a snippet the columns for part1 and part2 of the snippet in the search results have an even width.

An option could be introduced where the user could set (in percentage) the width of column1 and column2 in the listview.

So currently it is 50% / 50% - this could be changed from 20%-80% - this would be a global setting.

Plugins: Selected / Clipboard - Additional features

The selected and clipboard plugins should be expanded with a number of features:

  • upper case text
  • lower case text
  • wrap text
    • line by line
    • before, after -> convert selected lines to unordered lists (html, markdown, bbcode) for example
  • encode/decode #11

Bundle title not working

I don't know if I misunderstood the titleMatch thing, but as I understand it is not working for it.
Let's say I have a couple of snippets for Oracle, and I want them to be available only when I'm using Oracle SQL developer. Then I will create a bundle called oracle and I will set the titleMathc to Oracle, and I will add the snippets there. I tried in other windows, for example notepad, and the hotstrings are still responsive. How can I change this?

Thanks in advance.

Manage hotstring

Hello!

I was reading the manual and when I read the part that says Lintalist not intended to replicate or replace hotstrings, I thought: Damn, now I'm with Lintalist running all the time, it would be very helpful managing hotstrings.

So I ask you: what do you think of managing hotstrings by Lintalist? It's a nice feature, which does not weigh much and still give more use to the script.

Hugs You!

v1.6 (dev) - nested plugins + split (early beta)

v1.6 - nested plugins + split (beta)

You can download a new early beta release here:
https://github.com/lintalist/lintalist/archive/dev.zip

It would be advisable to install this in a new folder and not overwrite your current install of Lintalist. You can copy your bundles to the new folder as well - existing snippets should still work as in previous versions.

New plugin parser - try to "break" it

The biggest changes is the way how plugins are parsed. Any type of nested plugins should now be parsed properly.

Plugins as processed as follows:

  1. Local variables first
  2. Then it will process each plugins in the order they are presented in the snippet.
  3. If it is a nested plugin, the order is from RIGHT to LEFT and from the INSIDE OUT.

Consider the following example:

This is [[plugin1]]
we continue with a triple nested plugin:
[[plugin2 [[plugin2-1 [[plugin2-1-1]] ]] ]]
and ending with
[[plugin3]]
  • [[plugin1]] is processed first
  • followed by [[plugin2-1-1]] followed by [[plugin2-1]] followed by [[plugin2]]
  • and finally [[plugin3]]

So please test the following:

  • Are there any snippets you currently have that no longer work as expected. If so please post an example with the desired output
  • Can you break the new plugin parser? If you have made a new snippet with a (nested) plugin and nothing is pasted OR Lintalist crashes that is a good indication the parser still has an error, if you can produce such a snippet please post an example.

Split & SplitLine SplitRepeat

A new split plugin has been added as well, it has not yet been integrated in the editor so you will have to type the code yourself for now. The split plugin creates an array (list) of temporary variables you can place anywhere in your snippet.

Format:
[[Split=input|?1|?2]]

input can be another plugin, or the reserved keywords: selected and clipboard
?1 the character to split the input at - there are a number of reserved options \s = space, \t = tab, \n = new line - but you should be able to use any character (apart from a |). Just using ?1 will create a simple array of variables you can use like so [[sp=1]] [[sp=2]] [[sp=3]] etc - if you just use ?1 think of it as the column marker.
?2 you can omit this - if you do use this it will create a two-dimensional array of variables you can use like so [[sp=1,1]] [[sp=1,2]] [[sp=3,2]] etc - if you use both ?1 and ?2 - ?1 is the row marker, and ?2 the column marker.

Examples:

[[Split=selected|\s]]
Hello [[sp=1]]
Hello [[sp=2]]
Hello [[sp=3]]

will turn this selected text word1 word2 word3 into:

Hello word1
Hello word2
Hello word3

Two-dimensional example, use this snippet

[[Split=selected|\n|\s]]
Hello [[sp=1,1]] = wordA1
Hello [[sp=1,2]]
Hello [[sp=1,3]]
Hello [[sp=2,1]] 
Hello [[sp=2,2]] = wordB2
Hello [[sp=2,3]]

and select these two lines:

wordA1 wordA2 wordA3
wordB1 wordB2 wordB3

process all (selected) lines - anything may change

SplitLine use a different method, this will split each line of the input text and process each selected line according to the snippet text. So given this snippet

update see SplitRepeat below, SplitLine has been removed, #37 (comment)

[[SplitLine=selected|\t]]
Hello [[sp=1]] and [[sp=3]]

and this selected text:

wordA1  wordA2  wordA3
wordB1  wordB2  wordB3
wordC1  wordC2  wordC3

the end result will be:

Hello wordA1 and wordA3
Hello wordB1 and wordB3
Hello wordC1 and wordC3

works with two-dimensions as well (not sure if this should be kept in the final plugin)

[[SplitLine=selected|\t|,]]
1-1 Hello [[sp=1,1]]
1-2 Hello [[sp=1,2]]
wordA1,cA1  wordA2,cA2  wordA3,cA3
wordB1,cB1  wordB2,cB2  wordB3,cB3
wordC1,cC1  wordC2,cC2  wordC3,cC3

Feedback welcome... especially 🐛 reports ...

Only "copy" the generated text

It would be nice to have a setting to not send text, just place them on the clipboard to paste when I want.

Is this possible?

No trigger or end-keys (regular expressions)?

Consider a method to allow shorthand to work without a trigger or endkey such as space or tab similar to AutoExecuteOne #10

LLShorthand: abbrev[n]

where [n] stands for [n]o-trigger - this could be extended to specific trigger keys [e]nter [t]ab [s]pace and possibly others should the need arise.

Maybe: [r] for regular expression? e.g. c.de[r] will make code cade c1de etc trigger the snippet? or allow for a list of abbreviations code|edoc

Changes:

  • ObjectBundles.ahk (parsing of bundle & snippets. Introduce new array to be able to check these, set global variable to be able to use in checktyped function)
  • Lintalist.ahk (checktyped function)

dsewq1LYJ @ http://www.autohotkey.com/board/topic/107687-lintalist-searchable-interactive-lists-to-copy-paste-text/?p=688199

Search GUI enhancements

To consider:

  • Config: "bundle belonging" column in the snippets list @danielo515 - reference: forum
  • Config: Colours per bundle in Listview - reference forum - using Class_LV_Colors
  • Config: Font type & font size for Listview & preview area
  • Config: Allow to be resizable manually - using "Anchor", 64bit/unicode version or AutoXYWH() - won't tackle this for a while, too buggy and complicated match (changing Y of smaller Gui for check & radio buttons)

Plugins: OnPaste and PasteMethod

In v1.2 two new configuration settings where introduced OnPaste and PasteMethod - perhaps these could also be added as plugins so one could Exit the program after selecting a snippet (OnPaste) or override the clipboard preference (PasteMethod)

Plugin: Split allow for named Split* [[split_name]] to generate [[sp_name=1]]

Currently this won't work as both instances of [[sp=1]] are being replaced at the same time so the result that is displayed at the third line is not the first part of the SplitRepeat but of the first Split

[[Split=selected|\t]]
[[SplitRepeat=[[sp=1]]|\s]]
result=[[sp=1]]

Allowing for Named Splits might resolve this:

[[Split_MyName=selected|\t]]
[[SplitRepeat_OtherName=[[sp_MyName=1]]|\s]]
result=[[sp_OtherName=1]]

Source: question by afh @ http://www.portablefreeware.com/forums/viewtopic.php?p=76250#p76250

(Possible) Plugin: Form

Not coming soon but just so I won't forget: using a simple template structure to build a Gui to get user feedback - if you want to ask 5 questions using the various other plugins might get tedious, one Gui with all questions might be nice.

Snippet editor would include a helper tool to build a template which would insert the form code into the snippet or perhaps just the form name and store the forms separately in a special form bundle?

[[form]]
Name:
_Question:
Account ID:
Representative:|[[var=myname]]
[[//form]]

Output options:

  • Plain text as is (Question + Answer): Name: Lintalist
  • HTML as table (Q&A): <tr><td>Name:</td><td>Lintalist</td></tr>
  • HTML as (un)ordered lists? <li>Name: Lintalist</li>
  • Answers as sequentially numbered variables similar to Split plugins [[fr=1]], [[fr=2]], etc? so they can be inserted elsewhere in the snippet
  • Write to file....

References:

Explain how to use a counter more than once in a row.

Maybe this is obvious for many people, but can drive crazy some others.

Let's say you want to use a counter for tracking order numbers, but on each "order confirmation" you mention the order number two times. This will make the counter increase as many times as you refer it.

The solution is to use zero as increase number:

Order no: [[counter=cName]] 
Hello your order number [[counter=cName|0]] have been shipped
bla bla bla.
Your order [[counter=cName|0]] should arrive soon.

The order is important since the counter is first increased and then "pasted". If you do the other way roudn, this means, you refer the counter with zero as increase number except the last one you will have a different value pasted at the last "reference".

Easy but can take a while to figure it out, and I think is a very common usage scenario.

Add an about section under help menu

Hello,

About sections are a standard way to point to a program's page and show it's version. Currently in litalist this does not exist and there is no way to see which version are you using other than remembering it. Could be a cool addition.

Regards.

Keyboard shortcut to open lintalist with all bundles loaded

Hello,

There are some bundles that are good as reference, but they pollute the view because they are very big. Additionally they are useful in so many situations that is hard to determine in which windows you will need them. One good example could be the country codes bundle. You may want to check to wich country a country code corresponds, but you don't know beforehand which window will be opened.

For this situations it would be useful to have an special key-binding to open lintalist with all the bundles loaded. This way you can use it not only as the good snipping tool it is, but also for fast reference.

Regards.

Change: Editing bundle properties

The current method of editing Bundle properties is not very intuitive, the second tab in the Bundle editor should be changed to allow editing of all Bundle properties regardless of the snippet on the first tab, a menu option should be added to allow for "Edit bundle properties" to avoid the need to edit a snippet to get to the Bundle properties.

A listbox with all bundles will be displayed on the second tab, selecting a bundle will allow the user to edit its properties.

Provide name or title property and add it as column on snippets list.

Hello,

While using lintalist I spend too much time searching for certain snippet of text when there are many. This is very common on snippets that are similar in appearance like code snippets. Providing a title to snippets (optional) would make this much easier.

I saw in the screenshots that you use the line2 of the snippet for this purpose. Is this intended for this kind of usage? if so, consider adding it on the documentation as a small usage example of that line. I though it was for a different purpose, but I have to admit that I never figured which purpose.

Regards

Provide not Title match for bundles

Because sometimes is easier to specify where do you want something to be deactivated rather than where should be it active. Please consider including something like "not Title match" for bundles configuration.

Fallback to second part for preview

Sometimes you have snippets with just second part. It would be nice to have that second part as fallback of the first one in the preview area. Also it would be ok to allow the preview area to be resizable/scrollable

Improving Markdown support

Replacing the stripped down AHK Markdown 2 html script with marked, a full-featured markdown parser written in Javascript https://github.com/chjj/marked

32-bit ComObjCreate("ScriptControl")

64-bit ActiveScript - Host VBScript and JScript in-process by lexikos
AHK Forum : http://ahkscript.org/boards/viewtopic.php?f=6&t=4555
GH Source: https://github.com/Lexikos/ActiveScript.ahk

Note to self: Example of ScriptControl & ActiveScript.ahk usages here http://ahkscript.org/boards/viewtopic.php?p=43289#p43289

Adding a button bar to the Search GUI

Replace the radio & checkboxes with a button bar which would also allow easier access to:

  • pause scripts
  • pause shortcuts
  • pause shorthand

which are currently only available from the tray menu.

To find: usable icons

mockup

Terminate the script when finished.

If I do not have fooled me, the script remains running in the background all the time.

I use a launcher and would like to run the linalist only when I call and do not keep it running after using it.

This possibility exists?

Allow for variations of letters in search query

Sometimes accented letters are part of the text you are searching for but these can be difficult to type, by adding the variations of these letters to the search string you can search for cafe but still find café

So the e in the query will be translated to searching for eéèêḙěĕẽḛẻėëēȩęᶒɇȅếềễểḝḗḕȇẹệæǽǣœᵫ - reference: http://en.wiktionary.org/wiki/%C3%A9

Probably for for all search modes apart from RegEx as [eéè..] (Classes of characters) might already be part of the Query which might mess things up (nested classes).

Improve selected widget with separator option and use of columns

Hello,

Sometimes, when you want to wrap a selected text you don't just want to wrap the whole thing. Many times is useful to wrap different parts of the selected text at different points of the wrapper.

Let me explain this with an example. Let's say you have to values

John 1234

And after executing the snippet you want to have it like this

Hello John, your order number is 1234. We shipped it with your name, John, as recipient. Please take note of your tracking number wich is 1234.

This sounds a bit stupid, but is just an example. As you can see, you are wrapping different parts of the selected text and many times each one. This can be defined like this:

Hello [[selected=col| |1]], your order number is [[selected=col| |2]]. We shipped it with your name, [[selected=col| |1]], as recipient. Please take note of your tracking number wich is [[selected=col| |2]].

Where the first parameter of the col is the separator, and the second parameter is the column number. Maybe it is better the other way round, and have the separator as second argument, and if it is not defined just use space by default.

Let me know what do you think about this.

Missing subfolder tmpscrpts

Running a snippet (script) after fresh installation the following Dialogbox shows:

---------------------------
tmpScript.ahk
---------------------------
The script file "D:\Dev\GIT\AHK\lintalist\tmpscrpts\tmpScript.ahk" does not exist.  Create it now?
---------------------------
Yes No   
---------------------------

Pressing Yes - an error occurs:

---------------------------
tmpScript.ahk
---------------------------
Could not create file, perhaps because the current directory is read-only or has insufficient permissions.
---------------------------
OK   
---------------------------

Manually creating the subfolder _tmpscrpts_ solves the problem

This snippet starts a code that eats up the text

I don't know why this is happening, but it is at least curious.

Here is the simplified snippet:

[[selected=Wrap|this is some example text=[[counter=test_counter]], more text= [[counter=test_counter|0]] where somevariable=|;]]

The intention is to wrap a list of values with the text I put there using a counter.
This produces an endless loop that eats the text. Just try it out, but you have to kill lintalist after it.

Update check and update script

Write a separate update script to:

  1. check for updates

  2. if found, ask user to:

    a. visit GH repo to check info on update; or
    b. download and install update after creating a backup of current installation

To be started manually via tray menu or simply starting update script.

▶️ "AutoHotkey wrapper for Windows native Zip - https://github.com/cocobelgica/AutoHotkey-ZipFile"

Allow plugins to dynamically modify counters

Counters are powerful and useful but can be a little pain to manage. Allowing plugins (for example the input plugin) to progragmatically modify them will make our life easier. You can use a similar syntax that the one we have discussed at #23 , where you first set the variables and then use them.

Something like

[[counter=name|start-number]]

Where the start number can come from any plugin like an input plugin or select plugin or any one.

Think in this scenario:
I have to "wrap" a large selection of text and assign them a number. I have several "ranges" defined for each time I wrap one of this selections. Ideally I would have a different counter per each set, but this is really time consuming and I would also need a different snippet for each counter, definitively a non go.

Example: I have groups of persons, and I want to create a new unix users for each one, and each one should go into certain range of ids

range of 1k
Alberto
Juan

range of 2k
George
John

range of 3k
Saufan
Mustafá

And I want to use a template like this

[[Input=Insert range to start with]] ;we should be able to name this variable
[[counter=ID|range]]
create user [[counter=ID]] name [[selection]]

Maybe another approach with the advantage of tracking which value is the last used value of the counter is to allow to select a counter with a variable that contains its name. This will require one counter per range, but just one snippet, much more efficient. This requires another thing: allow the plugins to set variables (plugins like the choice or the input plugin)

Plugins: Encrypt/Decrypt (part of) snippet or Local variable contents

In cases where you want to store some sensitive text in a snippet or local variable it might be useful to store this encrypted with a password. (ht: tpr)

  • Should be able to encrypt unicode texts
  • User will have to understand it only offers rudimentary security as decrypted texts are transferred to the clipboard and clipboard managers may keep this in memory - but just in case someone copies your bundle it offers some security. AHK could be used for a bruteforce/dictionary decrypting attempt.
  • Helper Gui would have to be made to allow user to input encrypted text to insert in the Bundle/Snippet editor.

Function(s):

@nnnik's Encrypt/Decrypt v2.1.0 @ http://ahkscript.org/boards/viewtopic.php?f=10&t=1107&hilit=encrypt

Order the settings semantically

Hello.

Every time I have to change a setting in lintalist I have to read the settings list more than once. This is because most of related options are spread all over the list. This makes hard to construct any logic in my brain, because I usually remember one option name per "category" and then I search the rest based on its relationship to the ones I remember. This is absolutely impossible in lintalist, where options does not seem to follow any logic. They can look like alphabetical short, but they are not.

As an example of this you can take the compact width and height: they are at the top and the bottom of the list respectively. This is crazy!

Also please consider to group all the Hotkeys configurations under the same entry.

Regards.

DisplayBundle option small bug

Hello,

Options 2 and 3 of DisplayBundle produces exactly the same result. Color and bundle name are present with both options. Version 1.5

Regards

Better namig of options on edit menu

The new version of lintalist is awesome, but there are some "concepts" that are still confusing.

Under the edit menu there are two things that are not intuitive:

  • Edit local bundle: This is for managing variables, but the word "variable" is not stated on the option at any place. It is very frustrating to try to manage bundles and end in the manage variables menu. It is very frustrating also to search for the variable editor and don't find it. This fact is even more noticeable because the other option on the same section "Manage counters" is crystal clear. This option should be "Manage local variables", much accurate.
  • Bundle properties: When you are looking for manage the bundles you don't expect to find it under a single bundle "properties". Because the option is in singular you don't expect to manage all your bundles from this menu. Manage Bundles would be a better name.

Regards

shortcut not working correctly

I defined a shortcut:
^d with a part1 of exit.

Whenever I tried to use the shortcut the quick search window came on top with a paste in the search field of the current clipboard contents.
It could be that the shortcut is occupied by the program, but then I would except a message like "you can't use this shortcut".

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.