how to implement recommender on android studio - recommendation-engine

I want to build a recommendations system for the application of Android Studio
Such as YouTube and Amazon where the user shows things that matter to him
What is the method or tool used?

The recommender is a big-data application running in a cluster, in the case of large e-commerce data. So you would put the recommender in your data center and ask it for recommendations from your android device. It is not likely that you can make is run on the device since the device does not have access to all data from all users, which is needed for collaborative filtering.
Maybe the easiest is to use Apache PredictionIO in your data center with the Universal Recommender ,a PIO Template based on Mahout. But put a proxy between it and the device because you need authentication and TLS. You would send data from all devices to the PIO service and make queries from the device. That way the service has all data from all users and can calculate the recommender model.
There is an AMI for a fully running system here that is ok for experiments but may need to be scaled for largish data.

Related

For what programmatic reason do IoT-programmed devices always require cloud/server access?

I live in an area where net access is mobile or nothing. While I can occasionally get access by tethering a mobile to that network, it isn't often connected, and when it isn't connected, no local device will function on its own, no matter which protocol it uses. Why isn't there any kind of server/cloud resiliency built in where devices can communicate in a peer fashion like Apple's Bonjour (Rendezvous? I can't remember)? If I have an Echo device, I should be able to switch it on through an Alexa interface. I'm OK without speech processing which requires interpretation of commands through an AWS or Google or Apple or whatever cloud, but being able to locally control a switch seems as though the interface could be smart enough to route locally. I guess I may have just answered my question. It seems as though routes could be internally stored so as to not to definitely require a server. Can you imagine shipping a colony to Mars and all the IoT devices stop working? If you ask me, they should not require a branch variation or special programming in order to function.
From the experience of having sat down and built a few, there are a some key reasons why viable IoT gadget products for the general market typically end up having to have a cloud-mediated mode, no matter what was envisioned when the design effort originally commenced:
General consumers (at least think) they want the option to control things when outside the home
Often even at home, a mobile phone may be on the mobile network not wifi, meaning that even if the user is physically inside their home, in network terms, they are not.
Firmware updates, dynamic content, etc are easier when they don't have to be relayed through a mobile phone or PC, especially a mobile that might sometimes have to jump networks partway through the process.
Ironically, having once set out to build an IoT product that could work entirely offline, the further the project progressed, the more and more difficulties that approach presented for general users, and the more the cloud path that was added as an option, started to look preferable in terms of how things should work all the time so that it could become the exclusive focus of development efforts.
My conclusion is that it's very hard to build an offline IoT gadget. Not only the developer, but also the users and marketing people need to understand and accept what sorts of difficulties and limitations that can mean.
So where does it happen? In the situations where the "users" are the "developers" - eg. open source. If you look around a bit, you'll find plenty of gadgets either built form scratch, or more commonly reverse engineered so they can run a custom firmware. Want a local RESTful API? Done! Want could relay via MQTT over SSL to your own broker? Done!
When you control the code, you control the mode.
But with products for the general market, most customers want things to work, not a lengthy technical explanation of why the details of their network setup mean they cannot.

Electron app that opens a server or using sockets over the web

Im making an app that multiple players can connect to, but im brainstorming the best approach.
Im going to be using electron for the interface and then be able to use other computers to log in to website to join the game with multiple players.
I will use sockets to connect to each player, but what i am trying to figure out is whats the best approach for the interface.
Should i use express with electron to somehow connect to the same website the players are on?
Is it possible to make the electron app start up a server and have my website direct to the computer that is running the electron app?
Or my other option was to just continuously upload and download from a database, but I feel like that would not be very efficient.
You're on the right track. I would suggest using a WebSocket based server / client architecture.
The server application is continuously running and handles inter-player communication as well as providing a database. The database could be integrated in the server application as a starting point, and, depending on your needs concerning scalability, be extracted as a standalone service in the long run.
Client applications could then come in many forms (a website, a desktop application, a mobile app). Using electron is a great way to enable cross-platform desktop application development that is adaptable to any of these scenarios, possibly also enabling to extract the contained web application as either a hosted website or even mobile application (using, for example, react-native or nativescript).
Good luck!

Is CocuchDB/TouchDB designed to serve offline/online setup for ios apps?

I am in little bit confusion because of my less understanding about CouchDB. Let me explain in simple words. I am developing an iphone app for which my client may ask for android version. I am using CouchDB as data storage for this application.
We designed a backend from where admin can setup/update information. ALL updated information should be replicated to all iphone device. When I say replicate from server to device I does not mean replication from one iphone device to another. Means source of updated always will be server.
My client also wants that most of the functionality if possible should work offline. To make some of the functionality offline client asked me to use CouchDB and TouchDB(on iphone) which will be synch up automatically.
According to me CouchDB is not designed to serve this purpose but designed for replication which is required for distributed computing where source of data is not one server but multiple.
Using CouchDB/TouchDB I am facing lot of issues. One of the big issue is my logic and UI implementation are together built on my xcode. If tomorrow I want to develop Android application then again I have to implement same logic in android syntax. Change in logic needs update both versions. More frustrating if client wants to develop windows and BB version tomorrow.
To avoid this I can suggest my client we should use 3-tier architecture where we will built one middle ware and we will keep our logic there. Only work we need to develop at app level is fetch data from middle ware via WebService and present UI.
But before suggesting to my client I want to confirm my idea from expertise. I might be wrong as I do not well knowledge about CouchDB and maybe CouchDb is only designed for offline/online setup.
Please waiting to here from expertise.
I'm working on something similar right now, so I can share what I've found.
We're using BigCouch (a fork of CouchDB managed by Cloudant that provides a cluster of Couch machines) to store our data and then using TouchDB for iOS to replicate data down to mobile devices.
We've been able to get TouchDB working with BigCouch, but it hasn't been without a few bumps in the road. TouchDB takes advantage of the existing replication functionality built into CouchDB and handles it well.
From my experience TouchDB also works very well in offline mode. The replication will pick up where it left off when the device went offline. You can also configure Touch to do pushes, pulls - or both, so that's nice.
The real issue is when you want to move to Android. The TouchDB Java port is in a sorry state right now. It exists, but it's not ready for production. In fact I saw on Twitter just this week that they're trying to hire someone to take over the project.
Even if the Java port of TouchDB was ready for production, you're right, you'd have to re-write the code for Android. Then again this would be the case no matter what technology you use.

Ocropus Engine on iPhone and/or Android

What is the best way to get ocropus running on iOS and/or android?
I'm interested in using Ocropus to digitize some content on mobile devices. I'm largely interested in using a trained 'language' model to make predictions on the device. Training will occur offline and off device. I know a few people have got tesserect running on mobile devices, but I'm unable to find much information on doing the same with Ocropus. I'd greatly appreciate a slice of your collective wisdom in an effort to avoid wasting days taking the wrong path.
Would it be easier to just prototype the algorithm using the scripts, then grab the specific c++ code of interest and include it directly in my application. Or best to compile as a static/dynamic library?
It would be better setting up a simple web service that uses Ocropus or any OCR library for that matter. Then have your smartphone application make requests to the web service. OCR is a CPU intensive process, so it's appropriate to move it off of the phone.

Application that receives DVB-H broadcast signal

DVB-H is a fairly new broadcasting medium. One purpose it is used for is to broadcast TV channels to TV phones and mobile decoders.
The software supplied by the service provider for windows does the job, but the display is small. I want to explore the possibilities of creating my own software that receives the signal and displays it to the screen. Also perhaps create an application to do the same on Blackberry and Android phones.
Anyone with any leads as to where I can get more info on coding with for DVB-H Broadcasts?
If you are working with Linux, you can probably best use Linux API (see this) under the LinuxTV project.
Alternatively, in J2ME based platforms you can follow JSR272 to access the DVB-H receiver. See this and this for more reference.
Unfortunately DVB-H based devices are specialized, so you need to specify which devices you want to support.