Instagram style news feed logic - feed

I am in the process of making a social application that involves users and a news feed. In order to display a user's news feed in chronological order, which of the following would make more sense?
Get all posts from each user the person is following and sort them into chronological order
Each time a user goes to post, save that id and the date into each
of their followers profile data (seems redundant)
A better solution that you may know

Generally social sites are built using Graph Database. I have worked on one of the social sites. Below was the technology stack and logic to display the news feeds.
Java, Spring MVC
OrientDb- A GraphDB containing Vertex connected with Edges
JQuery & Bootstrap for UI
Apache Solr- for text searches on User,Articles
Below was the logic for newsFeeds:
When any user does any activity, we used to create Activity vertex containing
the meta-data of activity like dateTime, type of activity and actor etc.
We had a batch program(running after every 3 mins) which will go thr all unprocessed the activities. The onus of the batch is to generate the newsFeeds from Activity and assign these newFeeds_To_Be_Displayed to relevant users(i.e connections of actor) newsFeeds to be displayed on screen.
When the user logs in, we used to query newFeeds_To_Be_Displayed of the given user and display them on screen.
We chose to calculate the newFeeds_To_Be_Displayed asynchronously, as thats a time consuming process and we dint want to end up in bad user experience.

Related

Open REST API attached to a database- what stops a bad actor spamming my db?

I'm a client side developer with little experience of server side, and I'm struggling to understand how to make a database-backed website without requiring users to login.
The usecase is fairly straightforward. The user lands on a website, uploads an image, and performs some processing to that image. Clicking 'share' POSTs JSON to my endpoint, stores it in a DB, and returns a unique URL in a textbox (eg, https://example.com/art/12345) which allows the user to share their artwork with others, or just to come back and do more editing later on.
What stops somebody from doing, POST <data> https://example.com/art 100 million times and filling my pay-as-you-go database?
I've seen examples of this link based method of sharing between users on plenty of sites but I don't understand how to stop abuse, or whether it is safe to just open up an API which allows writes to a database. I do not want users to have to login.
I believe the simplest method is having a quota, either by username for logged in users or by IP, if you don't require logins or only want to allow free usage to a certain point. Perhaps you could have a smaller quota for non-logged in users than for logged in users and even larger for paying users.
Your server side code that handles the POSTS and storing data into the database would have to take care of that. I'd add it to a user_data table on mine, making an additional column that tracks total space used. makes a todo
Then, when the user adds new data, increase the total space used. When they delete old data (I have versioned web pages so that eventually, the user will be able to rollback to previous versions) then the space used decreases. Having another page to look at to see where they're using space makes deciding what to delete to stay under a quota of X MB's/GB's/TB's/etc easier or maybe just an /api/delete_old_pages or notes or comments or all of the above.

Building something like TweetDeck - is it realistic to store all the tweets?

I'm creating an app for Q&A that unifies twitter mentions/DMs, facebook wall posts/messages, as well as email and sms into one inbox. I know how I'm going to handle the SMS (storing each incoming message and outgoing response), but I'm wondering if it's realistic to apply the same methodology to twitter/facebook messages.
I figure I need to store them so I can at least mark them read/unread. Is this how TweetDeck does it? I can't imagine them polling the API constantly without caching anything.
By the way if you know of an app that does this already that would be fantastic. Hootsuite does everything but SMS and email oddly.
Assuming you're building a mobile app (since you mention SMS), if you're aiming to support arbitrary Facebook & Twitter accounts (ie including very busy ones) & use over a long period of time, then you can't store all the tweets & posts on the mobile device: this storage required would grow over time to exceed the capacity of any device.
You can store a reasonable number of "recent" tweets/posts in full; these form the backing model for your UI's views. When the user navigates past either end you can retrieve more via the APIs, and you'll perform housekeeping on this collection so it doesn't get too big, discarding older ones as necessary.
(This collection may end up being gappy: eg if I haven't run the app for a week, when I start it it would retrieve the most recent day's content, leaving a gap between yesterday's content & that of a week ago. Twitter's apps do this & show the gaps, allowing the user to fill them in via the APIs.)
If you need to keep track of read/unread status, you could store this & the unique id for a larger number of items; but again, you'll eventually need to purge these too.
You might want to look at the Twitter User Streams feature; Facebook's Realtime Updates isn't as well-suited for mobile apps (unless backed by your own server).

Facebook APIs using checkins as an entry to raffle

I've been exploring ways that it might be possible to promote the business of a friend of mine. One of these ways is by encouraging users to check in to his business, the incentive for this being that they go into the draw to win some kind of prize.
I've been trying to find if the code for this already exists but I might be looking in the wrong places. If it doesn't what would be the best way to do it using the graph APIs.
Thanks.
You can use Facebook app to check-in to your page/business.
All page check-ins can be fetched using following request by your code
https://graph.facebook.com/PAGE_ID/checkins?access_token=PAGE_ACCESS_TOKEN
If you want to get only specific time period check-ins use since and until params in query.
You have to parse the json response and store in an array and randomly select the winner.
you can contact the winner using their facebook id and send them a message.
You will have to write the code yourself, but it would essentially work like this:
Get the user to allow access to the "Raffle" application and get their email address and permissions to look at their check-ins. Email is required to contact the winner.
Use a scheduled script (cronjob) to periodically check if the user has checked-in anywhere (in particular, the business you want to promote).
Award a raffle ticket for each unique check-in within a 24 hour period.
Hold a draw between all the users who checked in on that day or week and award the prize to someone randomly.
Pretty simple flow, but complex code.

how do i track a users activity online

We are building a system that seeks to calculate and score the value of information and users of information - based on the interaction between the two.
To do this, we need to track and measure these interactions. We are working on different ways - from connecting your social services and monitoring them (hard to scale and requires very patient users happy to connect services) to explicit tracking having a bookmarklet ala digg that user can trigger whenever she is on a piece of information (basically, content) that she wants included in her score.
What we'd really like is a tool that could do something like;
monitor all activity of a person across all networks (read, watch, comment, post, tweet, author, etc) and actively sit in the users browser and 'listen and report' back to HQ anytime a defined activity takes place.
Suggestions?
If you want to monitor the Social network activities for ex. Facebook, you need to take the authentication from the user like read/friends list etc. and fetch the updates from facebook with in specific interval of time and report same to HQ.
The same thing you need to report for other networking sites.
Each network sites may have different APIs you need collect and take the permission of the users (like signin).
Hope it helps.

Form Journey Tracking using google analytics

Is there anyway, using google analytics, to track a user's journey/selections through a long form so I can see where they drop off?
I've created a 'contact us' form which starts with drop down menu which requires the user to make a choice i.e. apply for job, apply for funding etc. and then each option requires the user to fill out a form, which is completed over serval steps.
Is there a way to track a user's individual form choices from their initial selection on the Contact Us page through to the form being submitted? That way I could see where in the form journey the users are dropping off.
If the form is a multi-page form, then you can use Goal Funnel tracking to obtain reports which will help you understand how users fail to complete the form:
http://www.google.co.uk/support/googleanalytics/bin/answer.py?hl=en-uk&answer=55515
The Regular Expression matching in Goal Funnels is quite useful if you have different paths or different form URLs for the same goal. You could also track multiple page views per actual URL, if you wanted to monitor the users who move onto a different step on a single URL.
If you need to analyze how users complete a particular form, you could use Event Tracking to record when each field is completed. You will need to carefully think about how you wish to use Event Tracking to obtain the information you require.
http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html
But Google Analytics is not good at tracking individual users' behavior. You may wish to take a look at ClickTale if you want to do more advanced form usage analysis.