USB on Mac OS X - objective-c

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

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.

Sync data options between Windows 8 and Phone 8

I would like to create an app where the user can add and view data. Either adding at a desktop/tablet or phone and reading from either source. I would like the data store to be synced between any of the user's devices.
I'm starting to play with the Trial of Azure, and it looks promising. Probably a solid way to sync data through to cloud between users' devices. Other than syncing between a users devices, I have no need for cloud services currently.
I've seen some apps that do a 'Backup/Restore' model with the user's SkyDrive account. But this seems to be a manual process. I'd like to see it done seamlessly.
I've looked into Sync services, but that would be more like a hub/spoke solution. Again, I don't need a central database.
What are some options? At this point, I would be fine using just Windows 8 patterns/practices.
Because they are separate devices, you will need to have some service layer to do the store/forward for you. With that you have two basic choices, use the end user's own storage (aka SkyDrive) or use your own storage (aka Windows Azure).
SkyDrive is fully supported through the Live SDKs and provides a secure way to allow a user to share store their data, and synchronize it across multiple devices. You get security, and there is no cost for the server side storage on your part. The user owns their storage, not you. The limitation is that you may have issues sharing that same data across other devices or users where SkyDrive (or whatever file sync service you use) is not available.
With a service layer, like Azure, you have a lot more flexibility, but you also will be responsible for maintaining (and paying for) that server side storage / services. Have you looked at "Windows Azure Mobile Services". With your Azure account you get 10 free Azure Mobile Services. You will pay for the SQL data storage on the backend, and that cost will depend on the amount of data you store on the server side. You also need to make sure to architect your application in a way to protect an individual users' data, but it is actually pretty easy to do, well documented, and gives you a lot of options.
Lastly, you may consider what type of data you want to share. SkyDrive is great for "Files". Pics, Songs, Videos, etc. Windows Azure Mobile Services (WAMS) is great for "Data".
Neither model is right or wrong. It just depends on your goals.
Hope that helps you go through the thought process

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.

How to identify a USB device given its VID and PID

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.