Comments (127)
My solution order is: accession_number, id, isbn-13. Simple and if your library is broken that's your fault. :D
from biblioteq.
BQ wants to remain independent of locale. Right? It welcomes data instead of data welcoming it.
from biblioteq.
BQ is not a spa.
from biblioteq.
Bravo : superb evolution with the addition of a color during the validation
I am well aware that it is one for exceptions
can you add the red color at the step of identifying the copy for the case QSqlQuery::next() was wrong (abstract message for the user)
not the green one but just the red one in case of an error, this allows to alert at this step that the book should be put aside.
from biblioteq.
Hello, textbrowser hotline
yes hello, I have a problem with the Batch Activities feature; the scanner only takes isbn.
The problem is that in my library 1/3 of the books are without isbn.
The return to the book by book functionality is too restrictive and requires too many clicks and then return to Batch Activities.
Can you explain in theory what you can improve
answer: sorry textbrowser is in america and not available at the moment, he will contact you as soon as possible.
from biblioteq.
I hope my request will seem less weird now :-)
from biblioteq.
I'm an optimist.
from biblioteq.
sorry I always go to the cashier or there is someone :-)
thank you for the compliment
from biblioteq.
See the second entry? It's not available.
from biblioteq.
73 revisions for an error.
from biblioteq.
I am perhaps traumatized by the errors of the old base, I will have to stop, it starts to worry me
from biblioteq.
Out! See ya.
from biblioteq.
Committed.
from biblioteq.
from biblioteq.
Hello, textbrowser hotline
yes hello, I have a problem with the Batch Activities feature; the scanner only takes isbn.
The problem is that in my library 1/3 of the books are without isbn.
The return to the book by book functionality is too restrictive and requires too many clicks and then return to Batch Activities.
Can you explain in theory what you can improve
answer: sorry textbrowser is in america and not available at the moment, he will contact you as soon as possible.
For sure it'll be very exciting.
from biblioteq.
Your perspective on convenience complicates identifying items. How is BQ supposed to know how your library identifies an item for reservation? We have unique ISBNs and we have books without ISBNs. Let's say your library prefers titles or access_numbers or callnumbers. How can we guarantee that these are unique? We cannot. If I have two items: 0123456789 (accession_number) and 0123456789 (id), BQ will retrieve the first one in BA. How does a description (title, pub. date, whatever) help you? It doesn't. In BA, you cannot instruct BQ to select the second one because you have to instruct it and by instructing it, the purpose of convenience is dead.
This is a super weird request.
from biblioteq.
If I'm scanning a barcode for my library, that better be the only item having that value. I'm in a busted reality if it isn't. So should BQ retrieve all items that supposedly break the definition of uniqueness in my library? Like, how does this work? 20 items, 50 items. There should be only one but because we're querying by multiple identifiers, we're going to get only one thing although we may have multiple items. So it cannot be convenient even in a proper library.
from biblioteq.
And before you suggest more fields, do realize that that already exists in proper searches. So BA would become a lesser proper search with convenience in mind without being convenient. Like, what?
from biblioteq.
I don't want to disturb you but I answer to your messages. There is no request from me before December 2022.
from biblioteq.
1 - For books with ISBN in barcode form: we agree the functionality is OK
2 - For books without ISBN, we must find another value to access this document or follow your position: this works for the most part so it's OK, the rest is done in the classic way) you can close the ticket
from biblioteq.
2bis : BiblioteQ must allow the user to scan a local barcode (specific to the library - not isbn) and BQ does the same as with the isbn but on the local barcode.
For my library : we put the "local" barcode in the accession_number field.
from biblioteq.
I hear your difficulty, with the argument another library may have chosen another field.
Suggestions :
- allow the user to define the field of his "local barcode".
from biblioteq.
Explanation of the use of a local barcode : We borrow from the central library :
If by chance, we take 1 document and that the document is already in our local fund, there will be the problem because 2 isbn on 2 different documents whereas with the local barcode contained in the field 995$f of the unimarc file provided by the Central library, the copies are well distinct.
The local barcode of the Central Library is not the same as the local barcode of our library.
from biblioteq.
If the SELECT retrieves more than one document for me it is clearly an error.
from biblioteq.
I hear your difficulty, with the argument another library may have chosen another field. Suggestions :
* allow the user to define the field of his "local barcode".
This is accomplished by a detailed book search. That is, it already exists. If I'm going to duplicate this in BA, than the purpose of BA, that of being brief and more convenient, is neither. So what is it then? A duplication.
from biblioteq.
And before you suggest more fields, do realize that that already exists in proper searches. So BA would become a lesser proper search with convenience in mind without being convenient. Like, what?
I don't understand this?
from biblioteq.
you want to exploit the isbn13 present in 70% of the books.
you don't want to use the local barcode with the BA functionality when it is present in 100% of the books.
-> I am puzzled by this.
from biblioteq.
suggestion :
why not make a pop-up with the fields used to put a barcode and let the user choose the field he will scan. (same demo as for the categories)
if the user scans an isbn13 -> popup on isbn13
if the user scans an accession_number -> popup on accession_number
if ...
The query will be on which field to apply the search.
from biblioteq.
For all categories save for books, there is just one field (id) to identify the item. For books, there are unknown number of fields. Ignore ISBNs. What's left? callnumber, accession_number, alternate_id_1, deweynumber. And maybe other fields like title. I don't know because BQ offers uniqueness on ISBNs. Adding more fields to BA is duplicating processes where rich searches solve and I know I'll be reminded that those processes are tedious. Well, BQ cannot predict the uniqueness of your environment so it solves the total problem. If it could, it would need yet more definitions in the database which would be defined by the administrator.
I want my car to turn on conveniently. Put it in key and turn the ignition. I want it from inside my palace. That will cost you. I'm at the point: this is free software.
from biblioteq.
suggestion : why not make a pop-up with the fields used to put a barcode and let the user choose the field he will scan. (same demo as for the categories) if the user scans an isbn13 -> popup on isbn13 if the user scans an accession_number -> popup on accession_number if ... The query will be on which field to apply the search.
ISBN is 10. ISBN-13 is 13. Accession can be 10 or 13 or it can be 11 with a hyphen and the hyphen removed would be 10.
from biblioteq.
ISBN-13 starts with 978 or more now. So? Nothing prevents that from being an accession number.
from biblioteq.
If the user specifies the search field, he knows what he is putting in.
I'm running out of arguments to convince you so I give up : 70% will work, for the others we'll see.
from biblioteq.
If the user specifies the search field, he knows what he is putting in.
I'm running out of arguments to convince you so I give up : 70% will work, for the others we'll see.
So where's the convenience? I mean this entire argument is about convenience. Less-clicks. I want less clicks. My perspective on this less is greater than more is that it creates problems and by introducing more clicks the argument of less become absurd. See?
from biblioteq.
the first objective is always the less clicks.
I position 1 time on "book" and 1 time on accession_number
- book is by default for a category = zero clicks (thanks for the order) (0 clicks)
- if accession_number is first in the popup for search field (0 click)
I scan 100% of the books with a barcode_local with accession_number (0 click)
I click to put on the member field
I click on validate
PERFECT
from biblioteq.
The categories : book, cd , dvd, newspaper, magazine, photography have an accession_number field.
only grey literature doesn't have one.
I think that accession_number is the right field for the general case.
even if i don't use grey literature i make a suggestion for the TODO List : add the accession_number field for grey literature. :-)
thank you and see you soon
from biblioteq.
The categories : book, cd , dvd, newspaper, magazine, photography have an accession_number field. only grey literature doesn't have one.
I think that accession_number is the right field for the general case.
even if i don't use grey literature i make a suggestion for the TODO List : add the accession_number field for grey literature. :-)
thank you and see you soon
The primary key is id for every category. Journals and magazines are specialized with issue number and issue volume. Thus, (id, no, vol).
from biblioteq.
The accession number is a poor choice because it isn't unique. And since you love import and export, it breaks things if it's defined as being unique. Uniqueness is lost because there isn't anything agreed upon from library to library. It's specific to a library.
from biblioteq.
So again, UPCs are unique. ISBNs are unique. Etc.
from biblioteq.
I agree to say: a unique field is perfect. But what about books printed before the generalization of isbn10 and then isbn13 : how do we do in these cases ?
The solution I found in the libraries I've been to: they scan their own local barcode and do not scan the isbn of the books.
Do you have a solution more adapted than accession_number?
from biblioteq.
Uniqueness is lost because there is no agreement between libraries. It is library specific.
In France:
At our level, the exchanges with the central library (Départementale) is organized by the recommendation 995 so no we don't do what we want for our local barcode, if we want to exchange with the central library. (precisely to avoid duplication)
https://www.transition-bibliographique.fr/wp-content/uploads/2020/10/unimarc-bibliographique-995.pdf
At the higher level (exchanges between central libraries) it is also organized by the French UNIMARC Committee (addition of unimarc fields)
https://www.transition-bibliographique.fr/wp-content/uploads/2022/05/Description_FormatUnimarcEchange_Exemplaire_2022.pdf.
(sorry I did not find it when french language)
small extract to explain
What is the RNBCD?
The RNBCD is the national directory of libraries and documentation centers which is a service of the Catalogue collectif de France (CCFr). Each library or documentation organization listed in this directory can have an RBCCN number (Register of libraries of the national union catalogue of serial publications or CCNPS).
Structure
Currently, a code is composed of 9 digits, as follows
- department number (2 digits)
- INSEE code of the commune (3 digits)
- type of library (2 digits)
- sequential number (2 digits)
the local barcode has this prefix (the first 5 digits are sufficient)
from biblioteq.
Uniqueness is lost because there is no agreement between libraries. It is library specific.
In France: At our level, the exchanges with the central library (Départementale) is organized by the recommendation 995 so no we don't do what we want for our local barcode, if we want to exchange with the central library. (precisely to avoid duplication) https://www.transition-bibliographique.fr/wp-content/uploads/2020/10/unimarc-bibliographique-995.pdf
At the higher level (exchanges between central libraries) it is also organized by the French UNIMARC Committee (addition of unimarc fields) https://www.transition-bibliographique.fr/wp-content/uploads/2022/05/Description_FormatUnimarcEchange_Exemplaire_2022.pdf. (sorry I did not find it when french language)
small extract to explain What is the RNBCD? The RNBCD is the national directory of libraries and documentation centers which is a service of the Catalogue collectif de France (CCFr). Each library or documentation organization listed in this directory can have an RBCCN number (Register of libraries of the national union catalogue of serial publications or CCNPS).
Structure Currently, a code is composed of 9 digits, as follows
* department number (2 digits) * INSEE code of the commune (3 digits) * type of library (2 digits) * sequential number (2 digits)
the local barcode has this prefix (the first 5 digits are sufficient)
Did you write in France?
from biblioteq.
I've been trying to convince you that if ISBNs are not the guiding principle of uniqueness, than uniqueness falls on the library. If library A utilizes accession_number field, than it must guarantee that it be unique because BQ does not. It could but it does not. If it does, some things must be changed. And for the non-institution, BQ must generate values (which it does). But then, this becomes part of BQ regardless of rationale. Why is accession_number unique? Because someone asked for convenience in batch activities. A similar argument for callnumber or whatever. In short, the uniqueness is part of BQ and not universal. It can vary. If it can vary, BQ needs new mechanisms at the database level.
from biblioteq.
The approach now is uniqueness is guaranteed by people overseeing ISBNs. BQ does not need to interfere.
from biblioteq.
no problem, regarding the uniqueness of the accession_number field for my database.
bash script
In the script of launching of BQ I will add a small test and warn the user if by accident accession_number contains 2 identical entries.
Requete_accessionnumber_double=`sqlite3 $Fichier_BDD "SELECT a.* FROM book AS a JOIN (SELECT accession_number,
COUNT() FROM book GROUP BY accession_number HAVING COUNT(*) > 1 ) AS b ON a.accession_number = b.accession_number ORDER BY accession_number"
if [[ $Requete_accessionnumber_double > 0 ]] ; then echo "Beware the database contains duplicates in the field accession number!" ; fi
echo "$Requete_accessionnumber_double"
echo "Thank you for correcting this"
start BQ
from biblioteq.
Hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm.
sqlite
UPDATE book SET accession_number = '0';
Everything is broken. :P
from biblioteq.
Have idea!
from biblioteq.
No, it may not work with SQLite.
from biblioteq.
I think it may. Anyway, ALTER TABLE is pretty limited so you may not be able to add a UNIQUE constraint to accession_number.
However! A trigger would work. Several triggers possibly. One for an update and another for an insert. But again! This is specific to you and you'd have to remember this and not ask me in 20 years. :P
from biblioteq.
now you are talking to me in another language :-)
I don't want specific to me you know.
- for me my request works well on duplicates accession_number
In 20 years :-) you see far
from biblioteq.
Some SQL engines have triggers. If an entry or multiple entries are modified, for example, the trigger fires. It can do whatever you want.
from biblioteq.
by default BQ adds a number to accession_number 000000000000000000000001
from biblioteq.
CREATE OR REPLACE FUNCTION delete_book() RETURNS trigger AS '
BEGIN
DELETE FROM item_borrower WHERE item_oid = old.myoid;
DELETE FROM member_history WHERE item_oid = old.myoid AND
type = ''Book'';
RETURN NULL;
END;
' LANGUAGE plpgsql;
from biblioteq.
by default BQ adds a number to accession_number 000000000000000000000001
Yup.
from biblioteq.
CREATE TRIGGER item_request_trigger AFTER INSERT ON item_borrower
FOR EACH row EXECUTE PROCEDURE delete_request();
from biblioteq.
for me the easiest way is if in BA functionality, the request receives 2 documents -> ERROR -> please check your database, this is not normal, BA expects a single record.
from biblioteq.
Hhhhhhhhhhhhhhhhhhhhhhmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm.
from biblioteq.
Almost completed. I will not be including Description column or warnings regarding multiple entries. The insert will produce detailed results. The hidden query will fail or succeed and errors may be logged. Not sure.
from biblioteq.
it's clear, we don't have the same vision of functionality.
I tested this morning and depending on the screen resolution
it is quite comfortable if the user can display
main window + member window + batch activities window
otherwise an improvement on the member field could be positive.
I do not bother you on this request and leave you to your occupations.
Have a good weekend
from biblioteq.
Consider this. You have safety belts in a vehicle. You may choose not to sport them. BQ has safety mechanisms with respect to what is universally accepted as unique. You may choose to ignore them. BQ may produce more and more errors. The errors will prevent you from performing a task in BA. The INSERT will already produce that error. So, in your view: duplicate a possible error during a hidden query and also produce this exact error after an insert statement. The first error requires that one places the item aside and correct it in a separate process. I've already discussed the separation of processes in BQ.
BA is not a corrective process. It is Batch Activities. It isn't correct-my-database. I don't know how much I need to have you understand this.
Perfection destroys progress and is impossible. Neither possible nor practical.
from biblioteq.
from biblioteq.
I'm not talking about technique. You explained me, I understood your position well.
.
I'm talking about the user experience
If a user scans an isbn13 and sees the title of the book displayed (he thinks OK BQ does a good job)
If a user scans an isbn13 and sees
from biblioteq.
imagine that you scan 10 books and only 1 has a problem during validation.
you have to find out why and intervene.
Searching in the pile of books by title is more human than searching by barcode.
Technically it is more efficient to display less fields.
from biblioteq.
thank you BQ for this moment of relaxation :-)
Would you like a book, sir?
from biblioteq.
If a scanned item does not produce a result, where is that information supposed to appear? In a dialog? In the Results column? In the Log. The Log is safe. A dialog is not safe because it can be dismissed, it requires a click, and the information is essentially lost. The Results column is stateless then. "Not found." For example, this error is now confusing if I step away from the computer. Did I scan this item or did I press the go button? How is this for friendliness?
I understand friendliness, but we're not designing an interface to displaying satellite data. We're scanning some barcodes. If the results are recorded in a log, we did well.
from biblioteq.
This ultra focus on a simple process is boring!
from biblioteq.
so let's not talk about it anymore.
from biblioteq.
So where should the error be displayed? A floating tool tip? In the status bar of BA? In yet another column?
from biblioteq.
There's a lot of real work in the entire error mechanism in BQ. Consider any categories. A lot of verification exists in those realms. Why? Because it is important to report errors in those processes. They guard input and output. And this effort is huge. There are database aspects, operator aspects, and BQ aspects. So we can look at those instances and debate them. There are atomic operations and group operations there. Lots of possible discussions there.
Now we remove ourselves from those realms into a simpler realm. We need to leave our elaborate expectations there and sacrifice them for? Convenience. So we're in Batch Activities. We don't need to embellish it with elaborate information because it is a new process.
I believe both processes have their own attributes and neither is superior.
That's the way it rolls.
from biblioteq.
When you're smart, you go to self checkout. It has glitches, but that's fine. When you're a moron, you go to the checkout isle where someone will always serve you. Neither is superior. Both are OK.
from biblioteq.
This is a feeling, so it's necessarily personal.
For me, not seeing the title or the borrower's name displayed at validation is a lack (this is a feedback from a user).
You will see if other people make a ticket in the future.
- For example the barcode reader beeps if it has captured the barcodes.
One could say that if it is displayed on the screen the beep is useless.
from biblioteq.
This is a feeling, so it's necessarily personal. For me, not seeing the title or the borrower's name displayed at validation is a lack (this is a feedback from a user). You will see if other people make a ticket in the future.
* For example the barcode reader beeps if it has captured the barcodes. One could say that if it is displayed on the screen the beep is useless.
Do you have the item in your hands? Yes or no?
from biblioteq.
So are you scanning a book or a paper with a barcode on it?
from biblioteq.
I tested BQ right now with a bunch of scans. One failed intentionally because it doesn't exist. I'm like: oh. Better look at that later so I set it aside. Then I pressed OK and one failure. I was like, OK. I didn't look for friendly beeps and colors of popups or titles. I trusted the interface because I was in convenience mode.
from biblioteq.
Then I performed the more intricate interface and I was like, this is more work but I understand why and I was like OK.
from biblioteq.
fully agree with your case : you were able to identify the problem at the time of the scan and put it aside.
Now do the same thing but with a book already borrowed / returned but not taken into account in the BQ database
from biblioteq.
I see your perspective and the value you perceive in it. Sure I agree with it. I'm measuring the effort I'll put into it and the results which will likely result in you wanting more and/or being unsatisfied.
from biblioteq.
from biblioteq.
let's not talk about it anymore we'll do as indicated
from biblioteq.
your example is made in the same borrowing session
I did not have the same result if different session.
-> Copy Identifier remains empty and I don't have the message "item is not available for reservation".
Conclusion : If BA does not fill the copy identifier field, put the document aside for manual processing.
It's good that I'm making progress in understanding the tool.
from biblioteq.
Say item A has copies B and C. If you scan in A and B is reserved, should copy identifier return B or C? It doesn't know which one is suitable. It can return C because that's the assumption. Now after that's reserved, it should return B.
See, this makes mad queries. How it works now is that it doesn't return anything because there is nothing to return because the copy is not available.
from biblioteq.
If both copies are reserved and B is returned, why does results specify that the item is not available? It says that the copy identifier is B, but I can't reserve it.
from biblioteq.
the message 'empty box' was not clear to me.
Don't forget that I don't see the technical side but the user side who always ask more for his comfort : the spa is still good :-).
Reminder: Of course all my requests are governed by mountain / hill in relation to development time
from biblioteq.
suggestion : if copy identifier not available put in Results : document not available ?
from biblioteq.
Which is yet another duplication. If a copy is not available, the finalization process will report this. This intermediate error reporting is nonsensical because you have the item in your hands. If you have an item which was already reserved, the finalization process would report that and this error is again nonsensical. It's not a step-wise process. Scan A, scan B, etc. Finalize. Review errors.
Not: scan A. Review. And? Well, this item is not available but I have in my hands. Now I can't scan any other item because I'm mentally stuck at this item.
from biblioteq.
When I check out items at a market and if one fails, I set it aside immediately and continue. I don't stop at item 1 when I have 20 more items to scan.
from biblioteq.
One, I'm considering people in the queue and two, I won't be able to immediately solve this problem even if I've tried once or twice. I don't become maniacal with this item. Move on.
from biblioteq.
the old software validated item by item, it's probably my misunderstanding on how to proceed.
thank you and have a good weekend
from biblioteq.
Sure.
from biblioteq.
You can modify the Copy Identifier after the produced error to a valid value yet the background color will reflect the previous error.
from biblioteq.
A person pausing and returning to their view may neglect this and question the sanity of the software. That was why I didn't touch the Copy Identifier column's background.
from biblioteq.
This also alludes to the discussion regarding the Results column and its purpose. It reflects the results. Other columns should not reflect status information, however, you requested that. Now there is a status column and a column which may contain status information which is editable and which is actually an input widget. This creates a disturbance.
from biblioteq.
So as you can see, for the purpose of convenience, the conclusion is that the results are confusing. I can correct the copy identifier while the respect widget remains in a problematic state.
from biblioteq.
It makes BQ appear stupid.
from biblioteq.
I find on the contrary the color answer has really improved the visibility of the operation
if red problem on the document so manual processing
from biblioteq.
why authorized you the edition in the columns : Identifier and Copy Identifier?
from biblioteq.
if the line is not good, the delete line button is not there to correct
from biblioteq.
If I'm providing a value in some input field and the field's background color changes after I've completed editing it, that's acceptable. The color indicates the input is invalid or valid. If invalid and I modify the value, the color should be reverted. That's one solution.
Another solution is a separate indicator.
BQ does not do this. It leaves Column Identifier red even if I've corrected the value.
The Results column is a state of an execution.
Anyway, it's messy and crude. Again, it makes BQ look sloppy and careless.
from biblioteq.
This is why I hesitate listening to perspectives of users. They're often focused on their needs without considering the software. Like lemmings into the fire.
from biblioteq.
Visit a bank site and type in some sum and make it negative or with a comma or some weird text. If the site is smart, it'll either highlight the value or it will prevent you from typing weird characters. After the value is corrected, the input color will reflect a correct value.
from biblioteq.
As software evolves, it needs to be smarter. Convenience with crudeness shows that the developer(s) are stupid and/or careless.
from biblioteq.
Related Issues (20)
- Request: Add an "Express Reserve" dialogue. HOT 15
- Book queries silent ISBN conversions.
- close Report : import csv isbn10 and isbn13 empty : difference between the 1st and the following HOT 14
- Close - Report import function: import balance message. HOT 30
- Close : Translation with linguist tools. HOT 42
- Small problems detected. HOT 159
- Series management and volume number.
- Mass Update HOT 28
- Close : Merge SQL Database improvements. HOT 30
- Creation of statistical features. HOT 9
- French translation for 2022-09-15 version. HOT 7
- No "Alternate Identifier" in "Select Viewable Columns" in coresponding view(s). HOT 2
- The book search function has a problem. HOT 2
- version 2022-08-30 sortie le 2022-09-15 HOT 27
- Strange behavior after a selection via SQL. HOT 6
- Not Urgent : Maximum number of loans per member. HOT 79
- Feature: Batch Activities Browser with barcode scanner. HOT 89
- Crash on Mac OS 10.13.6 due to missing symbol ____chkstk_darwin HOT 4
- Reminders HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from biblioteq.