How to identify a USB device given its VID and PID - usb

In the Windows Device Manager, I can look up the VID and PID of each USB device connected to my system. What is a good way to look up the vendor of the device using this information?
My motivation is that I want to deploy an application to my users that will identify all USB devices connected to their systems.

It's just one of those things you have to keep an updated list on, although having slightly outdated information wouldn't be terrible, since the most popular vendors have been around forever. Here's one source you could use that appears to be regularly updated.

Try this source it is what I use and it seems to be always up to date and very easy to use pcidatabase and it is an online search so you don't have to look through a list of numbers.

Related

WebRTC: Using own server to counteract quality problems?

I'm in the process of creating a WebRTC 1-on-1 video chat.
I was told by one of my users that a competitor of mine (who also offers a WebRTC video chat) that if the connections gets bad (=pixelated video and choppy sound), the competitor asks the user if they allow the connection go through their own server instead of p2p.
What might be the reason why they offer users to do it via their own server? Do they use a different system (=not WebRTC?) then?
I thought that nothing could be better than p2p, so I don't understand what my competitors do in such a case where they offer such a workaround.
Thank you for any insights.
Using a server could give you a better experience for a few reasons.
If you are sending to multiple viewers you have to share your bandwidth between every receiver. When you switch to a server you only have to upload once (and then the server distributes the video to the receivers).
The network route to the server could be better then the P2P call. If you run your server in something like AWS the two users may have a better network path to the server.
The server could be doing signal processing on the backend. You have things like SVC and Simulcast, where the sender uploads multiple 'quality levels' to the server, and the server decides which one to distribute.
Unlikely (but possible) I have seen demos where some companies will use machine learning to improve video. I have never done it myself though!
These are all done via WebRTC and common use cases. My guess would be your competitor is using an Open Source SFU/MCU. Many projects exist that cover these use cases.

Best technology for building race simulation application

I am trying to do something new, something I have never done before. I am looking for advice or point me into right direction how to choose technology. I am trying to build race simulation app that will have thousands of iot devices streaming data into central platform. While I understand that I can use some sort of IOT hub with cloud providers, but what technology do I choose for storing data?
Example is online indoor biking app. There are apps where you can connect your indoor bike online and have simulated race. For my project I am trying to build something similar. Do I use NO SQL db in this scenario? What technology will allow better scale of application like this since it could be millions of devices around the world in "simulated" race. I am not worried about front-end and things like that, but backend, IOT hub, storing data, presenting-real time?
At this point it is important to understand what kind of data your IoT devices will stream, and at what kind of a rate. It will have significant impact on your question.
That it is if it's just location information and some other small data sent lets say once a second, then if you're talking about tens of thousands of devices - this is not a big load of information, and any standard database, like MySQL will be able to deal with it. You will of course need a multi-threaded server(s) capable of handling many requests in parallel.
If your IoT devices will stream HD video, then you're looking at a completely different solution, with a much stronger server, capable of handling allot of streams in parallel, with significant bandwidth requirements from your hosting company, as well as storage space for all the videos. In this case you will store the streams as files (if you'll need them later on), and you won't need any special database either.
In any case, once you'll reach millions of users, you'll be able to scale most modern databases and servers, like MySQL replication capability. For example, take a look how Wikipedia is relying on MySQL: wikipedia - MySQL https://www.mysql.com/why-mysql/case-studies/mysql-cs-wikipedia.html
So I wouldn't be worried regarding the database on this stage, but make sure that the design of my system is in accordance to the the type of data and rate it is streamed.
Hope this gives you a pointer.

RavenDb Embedded with online/offline mode on usb key

I want to build a Windows Application (WPF) that will use RavenDb Embedded and that will support the use of a USB Key for the location of the central database.
When the USB key is not present, the application will use a local store.
When the USB Key is present, the application will use the store on the key as the main store.
Of course, when when the USB key is present, the data between the two stores are merged/synced.
Is there a "known" pattern for doing this? Is there out-of-the-box of "merging" data between two stores? Does RavenDb Embedded support "multiple store databases"?
Per the documentation, Embedded mode does not support multiple databases. However, you can manage multiple databases yourself by creating two separate EmbeddableDocumentStore instances with different DataDirectory paths.
You can enable Embedded+HTTP mode to replicate between the two instances, as long as you put them on different HTTP ports.
That said, I don't think it's a very good idea to have raven using a USB key directly. The concerns are:
What happens if the key is removed in the middle of a write operation? Raven is supposed to handle shutdowns well, but my guess is that you will get some exceptions thrown, and I don't think it was designed with that scenario in mind.
Disk I/O may possibly be not be sufficient for performance, but perhaps that depends on the rated speed of the USB stick. Try it and let us know what your performance is like.

USB on Mac OS X

Is it possible to prorgramatically disable/ write protect the USB on MAC OS X ?. Also after a certain interval can it be enabled/ write be allowed. Any links/pointers would be appreciated.
EDIT -
I have been tasked to write a portion of software which will disable the USB drives on all the machines. This is for some customers who do not want their employees to take a USB and copy company sensitive information. But then for certain admins, the USB drives should get enabled by the admin.
It is my understanding that the write-protect tabs/switches on normally writable media physically disable the machine from being able to write to the media, so this oughtn't to be possible in software.
If you post more details on what you're trying to achieve, we might be able to offer some other suggestions.
For example, you might mount the volume as read-only, and after the time period has elapsed your software could change that to read-write access?
This functionality is already supported by the management frameworks on OS X. The simplest way to enable the restrictions would be with a Configuration Profile.
The drive policies only work with mountable volumes, so if you want more granular USB filtering you can use the iokit integration with launchd to specify things at a USB device level. Check this answer for more details on that approach. launchd LaunchEvents keys

How do large sites(Google, Facebook, etc) propagate information to all servers in realtime?

I'm looking for some technologies to research. I'm amazed that you can go into [insert large site here]'s interface, update a setting and within seconds it's pushed out so it's live across the board. A good example of this is adwords. If you go into adwords and change a campaign those settings are stored on the server with a unique id. The ad code calls the server with that id and the information(size,colors, etc) is pulled up instantly to show the ad. How is that Google can push that out to hundreds of thousands of servers so quickly? What type of db systems are they using?
Google has published research papers for its Google File System (or "BigFiles" as it was once known) and BigTable, both of which are used extensively in their services. Those would probably make good reading, in and of themselves and because they probably cite prior art.
You might want to read how Oracle has built RAC to propagate data across many DBs: http://download.oracle.com/docs/cd/B14117_01/server.101/b10727/ha_strea.htm
I know that Facebook use peer-to-peer to push update on their server.
The first server get the update, then he send it to some others who does the same thing.. and on until the update is on all of their server!
I have been looking into similar pieces of information.
Look for "Structured Data".
Specifics: MojoDB, CouchDB.
Look for comparisions on mojodb website.
Facebook has made Cassandra (distributed database) open source. I think they and many others use it now.
Also look for Hadoop framework and Map/Reduce, as a matter of interest.