Giter VIP home page Giter VIP logo

flist-messenger's People

Contributors

aliciasprig avatar dhwty avatar kythyria avatar vionakitten avatar

Stargazers

 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

flist-messenger's Issues

IDN still identifying as 0.8.3

>>IDN {"method":"ticket","account":"REDACTED","character":"Teal Deer","ticket":"fct_8b867bde66e0609c82a36717c3a859693855e3649345541a010f8f48e613ea0d","cname":"F-List Desktop Client","cversion":"0.8.3"}

Not serious, but definitely a thing. I may fix this one, myself.

Error! Soundfile not found: ./sounds/login.wav

That's because 0.9.0 isn't packed with a 'sounds' directory. The sounds are in /flist_messenger/. If you create the directory '/flist_messenger/sounds/', the problem solves itself.

This may also be the problem with highlights, but that wasn't throwing an error, so we'll see...

Kurt's commentary after compiling on Arch

Build information:
$ pacman -Q cmake qt4 qt5-base gcc
cmake 2.8.11.2-1
qt4 4.8.5-1
qt5-base 5.0.2-2
gcc 4.8.1-1

General packaging suggestions:

  • Package a .zip for Windows and a .tar.(b/g)z for linux. A base linux install neither has an unZIPper nor unRARer.
  • Name the package with some combination of the version number and filename (The executable is called flist_messenger, so the archive should not be called fchatX.X.X.zip).
  • Allow the passing of option flags, although the default of relative paths should be kept, to allow for -DLibjsonDir=X, -DLogPath=X, -DSoundPath=X and -DSettingsPath=X. This would allow a full linux installation through a package manager. The current setup gives a catch-22; the executable and settings must be in the same dir, but only binaries can go in /usr/bin and no binaries can go in /etc.

0.8.4 bugs:

  • Double datestamping, the leftmost only occurring after the chat pane is refreshed by changing tabs or clicking the same tab already loaded. ([18:41:44] [6:41 PM] Reggie Cole: Welcome back.) [Bug not present in 0.9.0]

0.9.0 bugs:

  • Clicking console button on left directly after connect causes 'X Connected. Welcome. Running F-Chat... Enjoy your stay...' to disappear.
  • Unable to right click on any of the buttons down the left hand column to close the tabs.
  • Help>Help/Help>About do nothing.
  • Chat window is still called "F-chat messenger - Login"
  • Leave/Join notices are displayed even when the 'Display leave/join notices' box is unchecked.
  • Away indicator doesn't look very good on the white background of the friends list (looks blurry compared to all others).
  • Add user/Remove buttons for ignore list different sizes.
  • Being at the bottom of the chat window (so it scrolls) and then switching tab and switching back causes you to no longer be autoscrolling in that window.
  • Again crashed during use. ([1] 10572 segmentation fault (core dumped) ./flist_messenger) [again, it was on a friend connecting, I think.]
  • PMs are received, but the message window stays blank (tab appears, is turned green). Window button is not flashed at all.

Feature differences:
On Windows, if a message comes through and the application is not focussed, the taskbar icon is highlighted indefinitely. On Linux, it appears to always blink ten times. I notice that "http://doc-snapshot.qt-project.org/qt5-stable/qtgui/qwindow.html" has the following excerpt:

void QWindow::alert(int msec) [slot]
Causes an alert to be shown for msec miliseconds. If msec is 0 (the default), then the alert is shown indefinitely until the window becomes active again. In alert state, the window indicates that it demands attention, for example by flashing or bouncing the taskbar entry. This function was introduced in QtGui 5.1.

Perhaps this can be implemented to provide feature parity, given Qt 5.1 just got released and should be rolling out to all platforms very soon.

Feature Requests:
The ability to save two channels= options, one per character. Perhaps Character_Name-channels=?

ASSERT failure in QList<T>

Three people, three POSIX systems, the same problem. If you don't start from the console and in the directory that contains the executable, this happens:

From Silent-Hunter using Fedora 16 x86_64:

silent@TERMINAL-BMRF-9 build$ ./flist_messenger
ASSERT failure in QList::operator[]: "index out of range", file /usr/include/QtCore/qlist.h, line 477
Aborted (core dumped)

From [Kurt Grey](http://www.f-list.net/c/Kurt Grey) using Mac OS 10.6:

Last login: Thu Apr 11 03:36:24 on ttys003
/Users/XXXXX/Downloads/fchat0.8.4/flist_messenger ; exit;
XXXXX-Macintosh:~ XXXXX$ /Users/XXXXX/Downloads/fchat0.8.4/flist_messenger ; exit;
ASSERT failure in QList::operator[]: "index out of range", file /usr/local/Cellar/qt/4.8.4/include/QtCore/qlist.h, line 477
Abort trap
logout

From my system using Ubuntu 12.04 x86:

[21:23:52][dhwty@muraki ~/Downloads/F-Chat/F-List Messenger 0.9.0]$ ./flist_messenger/flist_messenger
ASSERT failure in QList::operator[]: "index out of range", file /usr/include/qt5/QtCore/qlist.h, line 462
Aborted (core dumped)

It looks like it's finding the executable, but it may not be finding any of the config files, since Silent-Hunter seems to be starting from the build/ directory, which would mean the exe is there, but the configs aren't.

"Dice rolls making the desktop client crash"

Copying the contents of this misplaced bug report, so I can close the original. You and I tested this, the same day the report was filed, apparently, and we couldn't reproduce the problem.


Browser: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
at 13 Mar,2013 9:59:33 PM

Bug report:
Dice rolls in a room showed up in my PM's (Desktop Client), and then all instances of my f-chat crashed.
The same thing happened again when other people rolled die in the same room.

Reproduction steps:
I was using F-list Messenger 0.8.3
Discussing in a PM/Whisper
A dice roll message from another room was displayed in the PM and the characters I was logged in both crashed.


Posted at 13 Mar,2013 10:12:38 PM by Teal Deer
I can't reproduce this problem. In fact, Viona and I just rolled dice in the Desktop Client channel, and I don't think we lost anyone.

Unimplemented Commands

  • /clear - #30
  • /logout
  • /profile [username] PRO | PRD
  • /kinks [username] KIN | KID
  • /who - possibly not strictly necessary, because sidebar list.
  • /users
  • /ignorelist IGN | IGN
  • /close LCH | LCH - #32 (Despite the fact that /leave works, the official command (according to the wiki) is /close, so people are going to be just as confused as me, until this is fixed.)
  • /getdescription
  • /setowner CSO
  • /ctimeout

And since we're talking commands... can I pleeeease have a /search command that more or less takes raw FKS requests for an arguments? Gotta be easier that writing the GUI for FKS, right?

Tab/Enter in applicable places only works in some of them

At least one of these is Mac only. Others seem to apply in Linux, as well. Haven't tested in Windows.

Kurt: I'm trying to make a room. I typed in the room name. [Enter] won't automatically hit the submit button for me. Tab doesn't even go anywhere. So it's not either. Enter doesn't work on the set status page either. Nor can I tab through settings. Or press enter from the 'notify me on these words' textfield.
Dhwty: Tab/enter works on status. Hm, no, your enter problems seem to be a Mac thing. I can hit enter from the status field, and it submits.
Kurt: Oh! Wait a moment. Okay, enter does work from the status message box. But I can't tab into the your status box. It doesn't focus.
Dhwty: Checking this...
Kurt: I can't get the blue outline around it. If you select something from 'Your Status', it doesn't select.
Dhwty: Hmm. I can tab into it from the selection field.
Kurt: The typing bar stays the focus. I can't tab or shift tab into it.
Dhwty: Wow, yeah, can tab out of the select box, but can't tab into it.
Kurt: I can't SELECT the select box. Right, just for entertainment value. Select the away status. Click the status dropdown, and choose 'Away'.
Dhwty: No, apparently, I can tab into the select box, it just doesn't show me I've done it.
Kurt: Then, immediately press the up arrow.
Dhwty: nods Works fine. Selects Looking.
Kurt: Does not work here. No matter what I pick, the blue outline is on 'status message:'

Segfault on /prooms or /channels

So, I'm not sure if this is caused by certain characters in channel names, because I remember that causing some display problems in the 2.0 webclient, and I know there's a bug report for that somewhere... One tab open with a pm, typed /prooms in the console, got this in the terminal. Can reproduce this on command. (Can also reproduce this with /channels.)

>>CHA
>>ORS
<<CHA {"channels":[{"name":"All in the Family","mode":"both","characters":100},{"name":"Dragons","mode":"both","characters":128},{"name":"Aquatics","mode":"chat","characters":17},{"name":"Gamers","mode":"chat","characters":115},{"name":"Watersports","mode":"both","characters":62},{"name":"Love and Affection","mode":"both","characters":67},{"name":"Muscle Bound","mode":"both","characters":91},{"name":"Politics","mode":"chat","characters":4},{"name":"Literate Roleplayers","mode":"both","characters":122},{"name":"Vore","mode":"both","characters":136},{"name":"Artists / Writers","mode":"both","characters":29},{"name":"RP Bar","mode":"both","characters":63},{"name":"German Furry","mode":"both","characters":6},{"name":"Cuntboys","mode":"both","characters":37},{"name":"RP Pokefurs","mode":"chat","characters":18},{"name":"Custom Kinks Sharing","mode":"both","characters":21},{"name":"Xenophiles","mode":"chat","characters":51},{"name":"Monster's Lair","mode":"both","characters":156},{"name":"Fantasy","mode":"both","characters":133},{"name":"Ferals / Bestiality","mode":"both","characters":155},{"name":"Femdom","mode":"both","characters":79},{"name":"Hyper Endowed","mode":"both","characters":140},{"name":"Lesbians","mode":"both","characters":67},{"name":"Straight Roleplay","mode":"both","characters":37},{"name":"Canon Characters","mode":"both","characters":225},{"name":"Ass Play","mode":"both","characters":103},{"name":"German IC","mode":"both","characters":17},{"name":"Avians","mode":"chat","characters":21},{"name":"Femboy","mode":"both","characters":110},{"name":"RP Dark City","mode":"both","characters":67},{"name":"Growth","mode":"both","characters":62},{"name":"Fat and Pudgy","mode":"both","characters":98},{"name":"Newbie Help","mode":"both","characters":3},{"name":"Force/Non-Con","mode":"both","characters":150},{"name":"The Slob Den","mode":"both","characters":41},{"name":"Inflation","mode":"both","characters":49},{"name":"Obscene Boundaries","mode":"both","characters":69},{"name":"Frontpage","mode":"chat","characters":1094},{"name":"Micro/Macro","mode":"both","characters":85},{"name":"Scat Play","mode":"both","characters":53},{"name":"Humans/Humanoids","mode":"chat","characters":52},{"name":"Domination/Submission","mode":"both","characters":140},{"name":"Diapers/Infantilism","mode":"both","characters":42},{"name":"Sadism/Masochism","mode":"both","characters":48},{"name":"Cum Lovers","mode":"both","characters":131},{"name":"Canon Characters OOC","mode":"both","characters":112},{"name":"Ageplay","mode":"both","characters":239},{"name":"Sex Driven LFRP","mode":"ads","characters":1091},{"name":"Cum Inflation","mode":"both","characters":78},{"name":"Mind Control","mode":"both","characters":91},{"name":"Sergals and Sergal lovers","mode":"chat","characters":32},{"name":"Medical Play","mode":"both","characters":15},{"name":"Furries","mode":"chat","characters":59},{"name":"Pregnancy and Impregnation","mode":"both","characters":150},{"name":"Warhammer General","mode":"both","characters":16},{"name":"Latex","mode":"both","characters":32},{"name":"Transformation","mode":"both","characters":99},{"name":"Helpdesk","mode":"chat","characters":6},{"name":"Sci-fi","mode":"both","characters":101},{"name":"Footplay","mode":"both","characters":79},{"name":"Gay Males","mode":"both","characters":118},{"name":"German OOC","mode":"both","characters":31},{"name":"Pokefurs","mode":"both","characters":132},{"name":"RP Nudist Camp","mode":"both","characters":13},{"name":"Non-Sex Driven LFRP","mode":"ads","characters":240},{"name":"F-chat Desktop Client","mode":"chat","characters":31},{"name":"Development","mode":"chat","characters":3},{"name":"Size Difference","mode":"both","characters":93},{"name":"Equestria ","mode":"both","characters":48},{"name":"Hermaphrodites","mode":"both","characters":168},{"name":"Digimon","mode":"both","characters":31},{"name":"Bondage","mode":"both","characters":69},{"name":"World of Warcraft","mode":"both","characters":89}]}

[1]+ Segmentation fault (core dumped) ./flist_messenger

Warning at login: content-type missing in HTTP POST

"content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem."

You can only see this if you launch from the terminal and watch, but it's there. It's between login and character select. Probably a pretty easy fix.

0.9.0 isn't reading settings.ini

So, I kept poking that highlight problem ( #35 ), and it came out that I'm not getting dropped into Frontpage, when the client starts. There doesn't seem to be a problem saving changes from Settings into settings.ini, but it doesn't save channels (thank god, because I can't close channels) and I don't think it's reading it on startup.

[icon] tags are not handled

Just what it says. They render as plain text. Until some other server-side stuff gets straightened out, this may not get fixed.

UI elements with commented code

Yeah, so, I was reading the code, and it suddenly occurred to me that a whole lot of UI bugs I've reported all have the same cause: the contents of the function are commented. So, here's the master list of all the commented shit in the UI, and whether it's been rewritten, yet.

  • Line 156 appears to be something about URL handling.
  • #34 Line 203 is the disabled 'Send as RP Ad' button.
  • Lines 226 & 227 appear to be the help and about menu options.
  • #32 Line 381 is the right-click menu for channel tabs (including close).
  • Line 387 does ... something with avatars and tabs, but I'm not sure what or if line 386 already handles that.
  • Lines 1127 - 1201 are setupChannelSettingsDialog(), which isn't getting called anyway, because line 381.
  • Lines 1886 - 1905 are tb_closeClicked(), which appears to handle closing tabs. Obviously not getting called, because line 381.

I think that's all of it. Merging #32 and #34 into this.

[EDIT] Two more from Kurt. I have to check the code for these:
"QObject::connect: No such slot FGui::inputChanged() in gui/flist_gui.cpp:191"
"QObject::connect: No such slot FGui::btnSendChatClicked() in gui/flist_gui.cpp:202"

Crash at FCharacter::setGender(QString&), offset 54.

Kurt and I have no earthly idea what's going on, here.

Kurt: It looks like what happened didn't get logged. As in, there was an entirely OK <<NLN. And then a failed (something).
Dhwty: Probably someone coming into the room. It's either that or a user link in an advert.
Kurt: I'm wondering. It was a failure in setGender. So... Are all of the genders definitely set and well defined? I'm trying to analyse what +54 is. It just sets charGender to a constant. So I'm assuming either the lgender didn't match (which can't be the case, because then it would have just used GENDER_NONE... Or one of these GENDER_X don't exist. They do exist, though.
Dhwty: Yeah, which makes this particularly weird.
Kurt: I'm wondering if the hyphen gets parsed badly. You know, because it turns the gender lowercase.
Dhwty: So, it'd be either cunt-boy or male-herm

(Except it's not. We checked that.)

Kurt: What would be nice is if the message was printed to console in parseCommand. i.e. BEFORE any possible crash in processing.
Dhwty: I'm really starting to think it's JCH.
Kurt: Sorry to burst your bubble, but it cannot have been. Because I was only in one private room I made and invited nobody to.
Dhwty: Oh, fail. NLN, FLN, and STA are the three most common message types, with JCH out of the way.
Kurt: I mean, there is one thing to try. If I push those messages to std::cerr instead of std::cout. That might let me see it. std::cerr goes to STDERR, which is a character buffered output file descriptor, so every message is written one letter at a time. std::cout goes to STDOUT, which is a line-buffered FD.
Kurt: SEGFAULT! On setGender. With... The exact same message as before. As in, not the right one. Every time, the segfault has happened after an NLN for one of my friends/bookmarks. Maybe that's a pattern.
Dhwty: Ok, so it's happening in the friends online list. That's what we were missing. Because that's the only place an NLN would call setGender.
Dhwty: Except... why is it calling setGender, if it's not displaying the list? Friends online messages, maybe? Connection of somebody else usually goes NLN, STA, JCH.
Kurt: Weird. Because other friends are NLNing me just fine.
Dhwty: Hm. Is it a reconnect after disconnect problem? Like NLN FLN NLN 'Cause that would make it a problem, maybe, with something getting set by FLN and not getting unset/reset by NLN.
Kurt: Nope. I even asked the same person who it crashed on before to disconnect and reconnect. And it didn't crash second time.

Can't close open channels or PMs

This is actually kind of serious. I can get into rooms, just fine, but I can't figure out how to get out of them.

  • There's no close button.
  • There's no right click menu on tabs.
  • /close does nothing.

UI elements not set to be freed when necessary

Straight from Kurt:

"I'm seeing a lot of warnings that the UI elements on first draw aren't set to be 'free'd when necessary. I'm not sure if Qt just doesn't do that. Or if there is an autorelease pool that's missing."

"OS X's user interface is written in Objective-C, and in that the method of telling the compiler a set of UI elements that should be thrown away at once at the end is weird as hell."

Error message:
__NSAutoreleaseNoPool():Object 0x102905130 of class NSCustomReleaseData autoreleased with no pool in place - just leaking

0.8.4 vs. Mac OS 10.6

[Kurt Grey](http://www.f-list.net/c/Kurt Grey) was kind enough to compile 0.8.4, and take a shot at breaking it.

  • Timestamps are duplicated (This may be related to the 0.9.0 timestamp bug.)
  • Listboxes don't quite pick up OS theming nor entirely use their own, so white text on a white background
  • Tooltips for tabs pick up the typing status colour for the tab. (See screenshot below)
  • 'And, whether it's a real bug or not, "qpixmap::scaled: pixmap is a null pixmap" is spewed into the console a lot.'
  • Does not use the application icon.
  • Due to some OSX typography quirks, bold works, italic works, but any combination of bold and italic (like /me commands) renders italics-only text. (See screenshot below)
  • Cannot determine basepath, and can only be started by calling it directly from the console.
    • (Forked this out into issue #42 )
    • "The difference on OS X is that it recognises it as a console app. So it launches terminal to run it. But, when it does so, it runs it from tilde. Using the entire absolute path as what it calls."
    • Results in "ASSERT failure in QList::operator[]: "index out of range", file /usr/include/QtCore/qlist.h, line 477"

screenshot-mac-tooltips

Other people talking in channels does not print messages.

I need to go add a label for 'program is not usable for intended purpose until this bug is fixed'...

Apparently, messages I send will show just fine, but incoming messages just add a blank line. Switching tabs will cause the timestamps for those messages to show, but not the messages.

[EDIT] And here's why:
`<<MSG {"channel":"ADH-2dbb9c57b136ac5ecab5","message":"this is a test","character":"Jinni Wicked"}

[3:06 AM] Jinni Wicked: this is a test
`

Scraped that from the messages in the terminal. Channel messages are getting routed incorrectly.

[EDIT2] Super-interesting: RP ads and PMs are getting routed to both the tab and the debug log, which is probably what's supposed to happen.

[EDIT3] Super-wonky: only LRP works on the Mac. PRI and MSG only print to the terminal.

Window title still reads 0.8.3

Yep. It does. I'm going to fix that in like... the next ten minutes. Unfortunately, anyone who wants that fix is still going to have to build from source, because I have no Windows machine to compile on.

I expect 0.9.0 will be correctly labelled.

Right click on username throws an error

QObject::connect: No such slot FGui::destroyMenu() in /home/thoth/Downloads/F-Chat/F-List Messenger 0.9.0/flist_messenger/gui/flist_gui.cpp:1540
QObject::connect: (receiver name: 'MainWindow')

I'm assuming the second bit is supposed to do that. The first part looks suspiciously like an error message.

  • Opening a PM works fine.
  • Opening an F-List profile works fine.
  • Ignores work fine.
  • Quick profile does nothing and does not produce an error.

Haven't checked kick or ban yet.

'Alert Staff' isn't working properly

This may be me not completely understanding how SFC works, because I don't get staff messages. However, I think this is broken. If it's not, laugh at me and close it.

  • Logs get uploaded -- ish. They're empty, but it does create a log on the server, with no report text, no reported character, and no actual logs.
  • Staff alert ... gets sent? At least it thinks it does.
  • Logs are not automatically recorded on the admin notes page for the reported character.
  • Logs are recorded correctly on the admin notes for the reporting character.

Here's the raw from the debug log:
http://www.f-list.net/json/api/report-submit.php?account=REDACTED&character=Jinni Wicked&ticket=fct_758d96f072a574bfb536fbb0a0b9be3fe94191297aa27298242bfb668458e968
content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem.
6666
>>SFC {"action":"report","character":"Jinni Wicked","report":"Current Tab\/Channel: Sex Driven LFRP | Reporting User: REDACTED | Last ad in Sex Driven LFRP, by this user contains the line 'Overal naughty OOC chat welcome as well.' Relevant logs are at about 2 minutes past the hour.","logid":"6666"}
<<SYS {"message":"The moderators have been alerted."}

Mac UI Highlights

In the 'Settings' window, the tabs change colour, when selected. The background changes to light blue (supposed to happen) and the text to white/grey (not supposed to happen). The text is intended to remain black, so I'm not sure what's getting called here that isn't getting called on buttons, because the 'Save' button doesn't do it.

/clear doesn't

I know /clear is completely clientside code, but it... half-worked in 0.8.4, and it doesn't do anything now.

Highlight words don't work.

  • Type a word in the box.
  • Save it.
  • Restart the client. ('cause I can't tell if that's still a bug)
  • Get someone to say the magic word.
  • Watch nothing happen.

I can't get anything out of the debug log, here, so I'm guessing this is just unimplemented.

[EDIT] This appears to be part of a larger problem at #41 where settings.ini just isn't getting read, or not read all the way through.

'Inspector' windows in Mac OS

Kurt says:

Going back to the Inspector complaint. OS X has two types of windows. Windows that are used to see things always... And tool windows that are useful only within the context of that application. (An idea would be that drawing tools would disappear entirely if you were no longer on Paint.) Notice that F-Chat Channels stays when I stay within the context of the application... But if I focus the terminal? It's gone.

I'm not sure this is advisable behaviour for one reason and one reason alone. I want to make a room, hurrdurr. I want to click away, hurrdurr. I need to focus F-List messenger again. Wait, where's the window? Oh, yeah, this window is now IN FRONT of that other window. There it is!

Inspector windows only should be used to the SIDE of the other window. Generally you have them pop out of the left or the right. Or they're set to be 'always on top'.

So, I'm thinking maybe 'always on top' is the answer, here? He's talking about the main messenger window blocking out the windows it spawns, if you tab away and then back.

"Socket Error: The remote host closed the connection"

"Socket Error: The remote host closed the connection", followed by display of console, but not connected to server.

This is usually a user-side problem, and related to something blocking websockets. However, I think a more descriptive error message is called for, because this one seems to point the finger at the server.

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.