darvinarroyo / peerblock Goto Github PK
View Code? Open in Web Editor NEWAutomatically exported from code.google.com/p/peerblock
License: Other
Automatically exported from code.google.com/p/peerblock
License: Other
Welcome to PeerBlock! Platform Support ---------------- PeerBlock currently supports Windows XP, 2003, Vista, 2008, 7, 8 and 8.1 in 32-bit and 64-bit. Source Code ----------- PeerBlock is available freely under a zlib License (license.txt). Please make sure you understand it well before messing with the included source. Though not required, we would love to hear from you at the PeerBlock forums if you use it. Links ----- http://www.peerblock.com PeerBlock Website http://forums.peerblock.com PeerBlock Forums http://code.google.com/p/peerblock/ PeerBlock Source Code Open Source ----------- PeerBlock makes use of a number of third-party libraries, see thirdparty\readme.txt for more information. PeerBlock Credits ----------------- Mark Bulas (MarkSide) Lead Developer night_stalker_z Core Team XhmikosR Core Team Jason Casimir Contributor A. Jesse Harper (DarC / DisCoStu) Contributor Test Team: 2Ceedz, brandonjm8, gip, Petri Nurmi (Keefa), KindOne (ineedalifetoday), LANsquared, opus, Praeses (PraesesZA), RavenSoft, Tran Dinh Thien (Tippy/Thikku), Uzerrr, ZeroCoolXP Documentation: Nathan van der Velden (hoodadilly) Documentation Martin Eilbeck (Freelandr) Start with Windows Tutorial Website: Brian Quinn (ss18) Site Admin Rob Robinson (RobrPatty) Forum Moderator Jesse Hall (Jessay) Web Design LANsquared Hosting PeerGuardian 2 Credits ---------------------- PeerBlock is based upon the earlier PeerGuardian 2 work. Many thanks to Cory Nelson and his Phoenix Labs crew (http://www.phoenixlabs.org) for creating PG2, and for making it open-source so that after they abandoned it we could pick it up and resurrect it!
What steps will reproduce the problem?
1. In Settings, set History to "Archive & Remove" Every 1 Days.
2. Wait for 24 hours, until the next "Archive" cycle hits.
What is the expected output? What do you see instead?
- Expected: A copy of history.db should have been made in the ...\archives
directory, and the size of the original history.db should be much smaller.
- Actual: A copy of history.db is made, but the original history.db file
never shrinks.
What version of the product are you using? On what operating system?
- Reported in r70, but sounds like it was an issue in the original PG2 code
as well.
- Reported on XP 32-bit I think, but probably affects all OS versions.
Please provide any additional information below.
- Bug report submitted via email by Tim M.
Original issue reported on code.google.com by [email protected]
on 30 Jul 2009 at 1:04
Error reported in the PG Forums, and followed up via email. Only reported
by one user, though it's happened at least twice to him.
PeerBlock displays a messagebox with the following error:
/---------------------------------------
class win32_error
FwpmCalloutAdd0
2150760457
An object with that GUID or LUID already exists.
\---------------------------------------
From a quick look, it appears as though the Base Filtering Engine service
is complaining that we're trying to register with it, even though we're
already registered with it. This may be because we crashed recently and
didn't clean up after ourselves, or maybe the BFE service is just confused.
If you encounter this error, please try restarting the Base Filtering
Engine service through the Services Control Manager applet (services.msc).
If that works, either update this bug to say to or let us know some other way.
To fix this "the right way", we should look into whether it's possible to
un-register these callouts if a stale one is already registered somewhere.
Maybe check to see if the driver is still running in a half-alive state
somewhere?
Original issue reported on code.google.com by [email protected]
on 31 Jul 2009 at 7:51
Rebooted computer, PeerBlock set to auto-start. While starting, PeerBlock
displayed error window:
/---------------------------------------
PeerBlock is unable to load the packet filtering driver.
This could happen if PeerBlock crashed and didn't have a chance to unload
the driver, or if the file pbfilter.sys can't be found.
class win32_error
CreateService
122
The data area passed to a system call is too small.
\---------------------------------------
Extremely rare error reported via email by Petri. PeerBlock r65, running
on "Windows Server 2003 64-bit - Build:[3790], SP:[2.0]" according to
peerblock.log. Same error used to happen every so often with PG2,
apparently seen by others as well.
From looking through the code, it looks like the returned error (122 =
ERROR_INSUFFICIENT_BUFFER) is stale at this point in the program, leftover
from an earlier call to QueryServiceConfig() (for which it's actually not
an error at all). So what's happening is we're failing to create the
service for some reason, and then returning this stale error as the reason
behind our failure. Need to update the code to refresh err if we fail to
create the service, prior throwing win32_error("CreateService", err), so
that we can get useful information as to the nature of the failure next
time it hits somebody.
Targetting for 0.9.1, but only to put in the correct error-gathering code.
Original issue reported on code.google.com by [email protected]
on 27 Jul 2009 at 6:10
Would be nice to look into providing translated versions of PeerBlock for
non-English speakers. Not promising that any work will be done on this
anytime soon, but I'd like to track the idea so that it doesn't slip
through that cracks.
Original issue reported on code.google.com by [email protected]
on 5 Aug 2009 at 5:52
What steps will reproduce the problem?
1. Start PeerBlock without making use of pg2loader.exe
What is the expected output? What do you see instead?
PeerBlock should start running, instead it hangs with no GUI.
Original issue reported on code.google.com by [email protected]
on 23 Jun 2009 at 2:28
When running on a Windows XP 64-bit system, peerblock.log will report the
OS version as Windows Server 2003 x64.
Reported via email by P. N.
Original issue reported on code.google.com by [email protected]
on 31 Jul 2009 at 2:20
The TraceLog functionality is mostly capable of handling multithreaded
callers. However, we really should spawn a dedicated worker-thread whose
job is to simply read from our tracelog message-queue and write 'em out to
file. This should make the logger much more performant.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:06
Recently saw a thread on the PG2 forums regarding this error from base PG2.
Looks as though we depend upon the "Base Filtering Engine" service, and
possibly some others.
Once we transition over to a Service (instead of just a regular app), we
should make sure to set the proper service dependencies. In the meantime
we can check that these services are running, and start them if not. At
the very least we should trap this error and let the user know what the
problem is in a more user-friendly manner.
More info:
- PG2 Forum Thread discussing "Base Filtering Engine" service (along with
some others):
http://forums.phoenixlabs.org/showthread.php?t=16113&highlight=endpoints
- Another thread discussing this problem:
http://forums.phoenixlabs.org/showthread.php?t=16282
Original issue reported on code.google.com by [email protected]
on 27 Jul 2009 at 3:00
Even though we have tracelogging functionality now, we're not making use of
it to log exception conditions. This means that we can't simply ask for
the peerblock.log file in the case of an error window popping up, we need
to ask for a screenshot of that window.
Update all the exception-window code to include a tracelog statement
logging all that same info that shows up in the exception-window.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 1:45
Currently, whenever the program encounters an unhandled exception it sends
a report to bugs.phoenixlabs.org:50005. We should update this to send the
information to us instead.
Not expecting to get to this for awhile, until we have some kind of a
server setup to receive and process the data. Just adding this to make
sure we don't forget about it as time goes on.
Original issue reported on code.google.com by [email protected]
on 7 Aug 2009 at 2:00
Most users seem to like using the lists from iblocklist.com - we should
switch over to them instead of using the PhoenixLabs ones. They appear to
be more reliably hosted, too.
Might be worth updating the UI to include a "PG2 Name" field or something,
to help users migrate from PG lists to iBlocklist lists.
Many users have sent in emails asking for this.
Original issue reported on code.google.com by [email protected]
on 30 Jul 2009 at 8:48
What steps will reproduce the problem?
1. Attempt to run PeerBlock on a machine (Vista SP1+, Win 7) without having
first hit F8 during boot, or using "test-signing" mode (and disabling UAC)
What is the expected output? What do you see instead?
The program starts but then provides an error-window complaining about
"StartService" and error code 577.
Original issue reported on code.google.com by [email protected]
on 23 Jun 2009 at 2:37
What steps will reproduce the problem?
1. Install in Vista x64 OS
2. complete setup
3. run program
What is the expected output? What do you see instead?
its suppose to run
error message
What version of the product are you using? On what operating system?
PeerBlock v0.9.2 (r86) Installer
Vista Ultimate x64
Please provide any additional information below.
does not work because of driver-signing, it says "Windows cannot verify the
digital signature for this file"
Original issue reported on code.google.com by [email protected]
on 8 Aug 2009 at 3:50
Attachments:
Now that we have update-checking turned on, we need a way to keep our Test
Team up-to-date too with new Interim Releases.
What I'm thinking about doing is creating a "hidden" field in the .conf
file to enable checking for new test-releases. This field will not show up
in the UI, but users can easily tweak this value by-hand if they'd like to.
Original issue reported on code.google.com by [email protected]
on 7 Aug 2009 at 2:20
Currently the update-checking logic still uses the old PG2 defaults. This
needs to be updated to use PeerBlock-specific version details, and a
PeerBlock-specific URL to check for updates. Will need a PHP script (or
whatever) somewhere servicing these update-checking requests.
Original issue reported on code.google.com by [email protected]
on 10 Jul 2009 at 6:58
What steps will reproduce the problem?
1. Disable option "Update at Startup"
2. Start PeerBlock
3. Attempt to ping 3.0.0.0
What is the expected output? What do you see instead?
- Should see ip-address show up as Blocked in the PeerBlock UI, ping
command should display "General Failure"; instead ip-address shows up as
Allowed, and ping command times out.
Reproducible on Vista 32-bit, and Win7 64-bit; probably everyone else, too.
Original issue reported on code.google.com by [email protected]
on 26 Jul 2009 at 5:00
What steps will reproduce the problem?
1. Start PeerBlock with "Update at Startup" enabled
2. *Immediately* after PeerBlock updates lists, click the Disable button
3. PeerBlock UI hangs, "not responding" window, can't click anything
What version of the product are you using? On what operating system?
- Problem reported in PeerBlock r52; probably goes back all the way to PG2,
except that you wouldn't see it if you ran the Loader because it handled
this for you.
Original issue reported on code.google.com by [email protected]
on 26 Jul 2009 at 4:52
1. In Settings, tick "Always hide tray icon"
2. Untick "Always hide tray icon"
3. Close the PeerBlock window.
Now, the tray icon is visible, but doesn't function. Can't right-click to
get menu, can't double-click to open PeerBlock.
Version 0.9.2 (r86)
Original issue reported on code.google.com by [email protected]
on 5 Aug 2009 at 9:12
A crash dump submission form.
After such crashes happen have a post mortem
submission app run to send crash log and dump
files to a remote server.
Original issue reported on code.google.com by mynameherebro
on 15 Jul 2009 at 5:19
What steps will reproduce the problem?
1. Attempt to run the tool
What is the expected output? What do you see instead?
PeerBlock must run under Admin Mode in order to load the pgfilter.sys
driver. If not, it pops up a windows telling you that it needs to run
under Admin Mode and then terminates.
Original issue reported on code.google.com by [email protected]
on 23 Jun 2009 at 2:35
What steps will reproduce the problem?
1. Click the "Check Updates" button on the main UI
2. At any time while this window is open, click the X button in the
top-right corner of the window (i.e. the generic Windows close-button)
What is the expected output? What do you see instead?
- Expected: The window will close
- Actual: The window stays open
This window should act like a normal window, close-button and all. If the
user clicks X while a download is in progress, we should cancel that
download and close the window; if no active downloads are in progress, just
close it.
Bug reported by a dev-blog commenter, "Martin".
Original issue reported on code.google.com by [email protected]
on 4 Aug 2009 at 12:43
When logging blocked IPs, we should display which list contained the rule
causing this IP to be blocked. See these forum-threads for more details:
(http://forums.phoenixlabs.org/showthread.php?t=17730),
(http://forums.phoenixlabs.org/showthread.php?t=15914).
This will likely require changes to the DB, and potentially drastically
increase the memory-requirements of the program. Make sure we test
memory-usage thoroughly, and possibly make this an optional feature. Might
even be worth NOT keeping this in memory at all times, and instead only
read it from a file while we're preparing to log it? Especially if we
cache "recently blocked" entries, we should be able to get away with only a
minimal overhead here. Then again, if we're only storing an index into a
string-table, this might not bloat us up too much...
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:23
What steps will reproduce the problem?
1. Start downloading lists
What is the expected output? What do you see instead?
Every once in awhile, an exception will occur and the program will terminate.
Original issue reported on code.google.com by [email protected]
on 23 Jun 2009 at 2:31
When you start PeerBlock, sometimes the update-window ends up getting stuck
behind a million other ones, and you don't notice that it's done updating
and needs you to close it. If you don't click the "Close" button,
PeerBlock never starts blocking!
We should default this value to some reasonable number of seconds, so that
new users won't have to deal with this annoyance.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 1:38
Users should be able to Ctrl-click multiple entries within the log-window
for adding to a blocklist, or for allowing for 15 minutes.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 5:20
We should be able to identify the PID of the process who generated a
blocked packet, and then display this info in the log. Once we get that,
it should be a simple matter to determine the name of the program too; this
could either be visibly added to the log or else displayed in a popup if
you hover over the PID.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 5:10
What steps will reproduce the problem?
1. Run the tool
What is the expected output? What do you see instead?
"Well behaved" apps should not be writing data to their install-directory;
they should be writing into their own subdirectory within the Application
Data folder instead. History.db, cache.db, saved block/allow lists, these
should all be located either under the system AppData or else the per-user
AppData (probably the former).
Original issue reported on code.google.com by [email protected]
on 23 Jun 2009 at 2:43
What steps will reproduce the problem?
1. Update something in your Settings panel
2. Using task manager, kill peerblock.exe
3. Restart PeerBlock
What is the expected output? What do you see instead?
- Expected: When you restart the program, your new settings from Step 1
should still be in effect.
- Actual: The settings are the same as they were before you made the
changes in Step 1.
Currently, PeerBlock - like PeerGuardian before it - doesn't save your
settings until it successfully exits. This may be a "feature", to protect
you against bad settings torching your install; however, it causes
confusion for users especially since PeerBlock doesn't always exit
successfully when the machine is rebooted.
We should either save settings straightaway, or at a minimum give a "Save
Changes" button. If we're really concerned about bad settings preventing
us from starting up we can save a backup copy of the .conf file when we
first start. Create a "peerblock_started" file at program start, and
delete this file when we successfully exit. If we find this file when we
restart, we can try to reload the old saved config and try using it that way.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 2:09
What steps will reproduce the problem?
1. Uninstall PeerBlock
What is the expected output? What do you see instead?
- The directory in which PeerBlock was installed should be deleted;
instead, that directory is left on the harddrive even though it's empty.
What version of the product are you using? On what operating system?
- Reported in PeerBlock r65.
Original issue reported on code.google.com by [email protected]
on 26 Jul 2009 at 5:17
Would be neat if we could build in an automatic temporary(?)-blocking (or
throttling?) feature for people who're spamming/port-scanning you, kinda
like an additional defense against DOS/DDOS attacks. See this forum-thread
for more details: (http://forums.phoenixlabs.org/showthread.php?t=18690).
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 5:13
What steps will reproduce the problem?
1. start peerblock
2.
3.
What is the expected output? What do you see instead?
program should run, doesn't:
---------------------------
Driver Error
---------------------------
PeerBlock is unable to load the packet filtering driver.
This could happen if PeerBlock crashed and didn't have a chance to unload
the driver, or if the file pbfilter.sys can't be found.
class win32_error
StartService
2
The system cannot find the file specified.
---------------------------
OK
---------------------------
What version of the product are you using? On what operating system?
latest version on windows xpe (embedded)
Please provide any additional information below.
i run it from a mapped network share, writing is enabled on the share
Original issue reported on code.google.com by [email protected]
on 7 Aug 2009 at 7:51
In the main window you cannot move between the controls using Tab /
Shift+Tab keys. The same goes for the settings tab. This behavior was
present in original PG2 too.
Using 0.9.2 (r86) on XPSP3 32 bit.
Original issue reported on code.google.com by [email protected]
on 8 Aug 2009 at 7:40
What steps will reproduce the problem?
1. Permanently Block an IP-address from the main UI
2. Open the List Manager from within the main UI
3. Look at the Type column of the "lists\permblock.p2b" file
What is the expected output? What do you see instead?
- The permblock.p2b file should have a type of "Block", but instead it's
"Allow"
- Also, pinging to that IP-address should result in a block, but it instead
results in an allow
What version of the product are you using? On what operating system?
- This bug goes all the way back to the base PG2 code
- Reproduced it on Win7 x64 with PeerBlock r70, but it likely affects all
OS and program versions.
Original issue reported on code.google.com by [email protected]
on 29 Jul 2009 at 1:59
I always find it annoying when you're browsing the web and don't notice
that little flashing icon telling you that some content has been blocked.
We should add an option to enable playing of a "web content blocked" sound
to make this more obvious.
We may also want to consider adding sounds for other events, such as Update
Available, and maybe even Blocking Started and Blocking Stopped.
Ideally this should hook into the Windows sound-scheme stuff, so that the
sounds can be configured through there as well as within PeerBlock.
Original issue reported on code.google.com by [email protected]
on 7 Aug 2009 at 2:37
Would be nice if we had a routine to let us attempt to Ping a known-blocked
host. CMD-prompt shows this (e.g. ping to 3.0.0.0) returning a "General
Failure" error as that ICMP connection displays as Blocked in the GUI; we
should be able to look for that error and if we get it we can assume that
PeerBlock is functioning correctly.
Making a button to initiate this test-action might also be a good idea, in
addition to running it automatically at startup. Many posts to the PG2
forums are asking how they can tell if PG2 is actually blocking anything or
not, this should help minimize those sorts of posts.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 3:54
We should be logging date/time-stamps into peerblock.log with every
message. This will help track down timing-related issues, help generate
performance metrics, and let us know which log-messages occurred during
related times.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 2:15
Tracelog file (peerblock.log) should have a maximum size; after that size
is reached we should save aside a copy of the old one and rollover to a new
file. When PeerBlock starts, we should also save aside the old file (or
some number thereof) in case it contains debugging-info we'd like to have
sent to us.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 3:59
We should improve PeerBlock's ability to block/unblock ports. Currently
only HTTP/HTTPS ports (80/443) can be specifically blocked/unblocked; we
should permit any port to be blocked/unblocked, and include special-case
handling of known ports such as SMTP, FTP, etc.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:13
What steps will reproduce the problem?
Running Reversion 52 in Vista x64. [when enabled] Right clicking on the
system tray icon and selecting to have the program exit. It will crash with
Windows wanting to send a error report.
This happens @ random.
This is a small bug and might need attention in the future.
Original issue reported on code.google.com by mynameherebro
on 4 Jul 2009 at 12:00
Attachments:
What steps will reproduce the problem?
1. Start PeerBlock
2. Make changes to some of your settings
3. Before manually-exiting the program, reboot your machine
4. After reboot, restart PeerBlock again
What is the expected output? What do you see instead?
- Expected: The settings changes should be saved.
- Actual: The settings changes were NOT saved, because PeerBlock didn't
shut down successfully.
Not sure if this is a problem on all machines, but a few users have
reported this "saving settings" problem, presumably caused by this
theoretical bug. Need to try to repro it, and gather some more data on
what's going on during shutdown.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 2:14
Michal C. requested the ability to right-click on a blocked IP-address in
the main UI screen, and "Copy all info to clipboard" instead of just the
ip-address.
Original issue reported on code.google.com by [email protected]
on 5 Aug 2009 at 5:48
If the program is running on an Arabic-localized install of Windows, the
calendar in the History window is too small to show all the days.
Apparently a size of 170x100 (instead of the 140x100) should fix it.
Not sure I want to widen the calendar for all users, as real-estate on that
window is kind of at a premium. What I think would be best would be to
detect the Windows Locale during startup, and then key off this locale
setting when creating the History window and adjust sizes accordingly.
Maybe also put in a "hidden" option (i.e. in peerblock.conf only) to let
users config this as they'd like; if that value is 0 then use the program
default, otherwise use the value specified. In addition to helping people
fix the problem on their own installs, this way people would be able to
test different sizes and let us know what size works best on their system
so we can add it to our locale-specific defaults.
Original issue reported on code.google.com by [email protected]
on 5 Aug 2009 at 5:41
You cannot currently scroll through the log-window while editing a new
allow-list, because of MDI child-window issues. If we could do this, it
would make it much less annoying to edit lists.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:16
What steps will reproduce the problem?
1. Fresh install of r65
2. During first run, crashed during list-update
Peerblock.log and .dmp files submitted via email, dump needs triage.
Original issue reported on code.google.com by [email protected]
on 26 Jul 2009 at 5:21
When you run PeerBlock, after it updates lists and checks for a new version
it gives you a button to close it. This is well and good, but it's not
actually blocking anything while it waits for you to click this Close button!
The update window shouldn't block PeerBlock startup. More of an annoyance
than anything else, but would add to the program's "polish" I think.
Original issue reported on code.google.com by [email protected]
on 1 Aug 2009 at 1:42
Would be nice if we could schedule time-periods for PeerBlock to
enable/disable blocking.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:17
Currently, it can take a LONG time for the program to "Generate List
Cache", even after doing something minor like adding a single IP to your
permanent block/allow list. And this blocks your use of the program in the
meantime.
A few thoughts to consider:
1. When generating list-cache, do it to a new file as a background task,
then "jumpswitch" over to it once it's ready. This should minimize the
amount of time for which the program is unresponsive.
2. Look into ways we could perform a "light list-cache update", for the
example case of when the user has only added a single IP address to one of
his personal lists.
Might be worth separating this out into two bugs, once we start to look at
it in earnest. Definitely not gonna happen before v1.0.
Original issue reported on code.google.com by [email protected]
on 24 Jul 2009 at 6:05
Given how large the history.db files can grow, we should consider
compressing these files after moving them to the "archive" directory.
Suggestion sent in via email from Tim M.
Original issue reported on code.google.com by [email protected]
on 29 Jul 2009 at 6:52
Would be nice if we had an automatic updater, something which would
download and install a new version for you as soon as it's available
instead of forcing you to manually download it yourself.
Need to be careful about how this is implemented though, as we want to
minimize our downtime. If we just stop PeerBlock, apply the updates, then
restart it, we will be leaving the user's machine unprotected for however
long that takes. Ideally I'd like to be able to leave the old version of
PeerBlock running, then get the new version upgraded alongside it, then
seamlessly "jumpswitch" over to it without interrupting our blocking. This
should be possible so long as our filter-driver is able to be layered on
top of itself in the driver stack.
I'd love to get this in there by v1.0, but not sure if we're able to get it
done in a timely manner.
Original issue reported on code.google.com by [email protected]
on 31 Jul 2009 at 2:30
Currently, reports are that the history.db file can grow without any limit
to its size. You can auto-delete the file every X days, but it can still
grow ridiculously large - especially if you're logging both allowed and
blocked. See forum-thread
(http://forums.phoenixlabs.org/showthread.php?t=12754) for more details.
Original issue reported on code.google.com by [email protected]
on 13 Jul 2009 at 4:02
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.