Logo

Who is talking?

Archive

Two states

about 5 years ago | Niranjan Sarade: InLoveWithNature

Should I call this a mere coincidence? A couple of weeks back, my wife and I attended our friend's marriage (Love marriage to be specific). My friend is a Maharashtrian and the bride (who is also my friend) is a Kannadian South Indian. Needless to say the match that the God made is perfect! Both liked each other, fell in love with each other and then finally decided to get married :-) Everyone enjoyed the wedding ceremony. In the evening, we went to our another friend staying nearby where I located a book - 'Two States - the story of my marriage'  by Chetan Bhagat. I got interested into the book by reading this - "Love marriages around the world are simple! Boy loves girl. Girl loves boy. They get married. In India, there are a few more steps:-Boy loves girl. Girl loves boy.Girl's family has to love boy. Boy's family has to love girl.Girl's family has to love boy's family. Boy's family has to love girl's family.Girl and boy still love each other. They get married."Was this a coincidence that my eyes caught only this book among the other books resting on the bookshelf ? I had just attended a love marriage of my friends who belong to two different states in India. I tried to imagine the conversations/discussions that might have happened between the two families - two communities when my friends had told their decision to them. But I know imagining about a battle is always easy than actually fighting it! So kudos to my friends for winning it ! :-) I borrowed the book from my friend and was totally engrossed with reading the book after that! A story about two friends - Punjabi and Tamilian, deeply in love and want to get married, not by hurting their parents' feelings, but with a smile on both parents' faces instead! An excellent book which touches your heart ! What I most liked is the approach the couple took to convince their families instead of fighting and rebelling. Chetan has beautifully narrated the story and you won't feel keeping the book down until it is completely finished. Hats off to you Chetan ! I loved the book ! Would like to end this post by providing a part of the speech(message) from the book that the girl's father gave during the wedding ceremony. We should carve this message on our heart :-"So why do parents object to cross community/culture marriage? It is not only about another community. It is the fact that your daughter has found a boy for herself. We as parents feel disobeyed, left out and disappointed. We bring our children up from babies to adults, how can they ignore us like this? All our frustration comes out in anger. But we forget that this has happened because your child had love to give to someone in this world. Is that such a bad thing? Where did the child learn to love? From us, after all, the person they loved first is you.Actually, the choice is simple. When your child decides to love a new person, you can either see it as a chance to hate some people - the person they choose and their families. Which is what we did for a while. However, you can also see it as a chance to love some more people. And since when did loving more people become a bad thing?Yes, the Tamilian in me is a little disappointed. But the Indian in me is quite happy. And more than anything, the human being in me is happy. After all, we have decided to use this opportunity to create more loved ones for ourselves!"Enjoy reading!  

Positioning and Scaling maps in D3

about 5 years ago | Thomas Newton: newtonlabs.io

When working with interactive maps on the web there are several options and decisions that need to be made before you get started. This article assumes you have decided to focus on SVG directly in the DOM to provide the map and bind interactions. Leveraging D3 D3 is wonderful library by Mike Bostok that allows you to bind data to the DOM to create beautiful data visualizations. It is a low level framework that does not constrain you to the API and really allows your imagination to run rampant. Select the Data for the Map There is a strong temptation to start with a pre-generated SVG file that is easily found around the internet as the base of your map. However, if you go with this technique and use D3 to append path elements to the DOM it will become very difficult in the future to transform, position, and scale the static path strings. Instead bind the map data to GeoJSON And leverage the goodies provided out of box from D3 to work with your map in the DOM. Advantages of GeoJSON D3 will take the GeoJSON data and convert it to a standard SVG Path after applying whatever scaling, transforms, or repositioning you require. This becomes much easier then attempting to calculate changes to the SVG commands on your own. Can apply D3 Geo Projections Can scale the map to different sizes dynamically in the DOM Can move the map to different positions in the SVG container A giant repository of earth data can be found at Natural Earth Data and converted to GeoJSON Simple Examples The following examples illustrate how easy it is to reposition a map once you have the data in GeoJSON format. In these examples it is assumed that the variable geoMapData contains the full GeoJSON object. In this example I used the one from D3 of the United States 1) Define variables, and the height and width of the SVG container var h, mapXY, path, states, w; w = 1000; h = 1000; 2) Build a function that you can apply to the projection to build the new path elements when the SVG paths are inserted into the DOM later on using standard D3 insert. In this example we are using the albersUsa Geo Projection (see below on other examples of projection types), scaling the map by 90%, repositioning the map to the center of the SVG container mapXY = d3.geo.albersUsa().scale(900).translate([h / 2, w / 2]); 3) Create a new path function that will use the new mapXY coordinates and scaling when inserting the path elements in the DOM path = d3.geo.path().projection(mapXY); states = d3.select("#geo-map").append("svg").append("g") 4) Standard D3 Insert (also color the map grey with a white stroke) states.selectAll("#states path").data(geoMapData.features).enter() .insert("path") .attr("d", path) .attr('stroke', 'white') .attr('fill', '#ccc') Now you have complete control of the Geo Projection, the scale, and the positioning of the map in your SVG container. Geo Projection Examples A few examples of what different projections look like all leveraging the exact same GeoJSON file (one line of code change above) albersUsa albers mercator

Continuous Blog Delivery

about 5 years ago | Thomas Newton: newtonlabs.io

In a sea of regular inspiring awesomeness on Hacker News this one really stood out to me today: How I tricked Myself into Being Awesome This totally changed my perspective on how view writing and and learning. I hope I can follow Chris’ example with some of the work I’m doing in D3 and Web Sockets.

Reading RFID Cards With Ruby and the Mac

about 5 years ago | Mark Daggett: Mark Daggett's Blog

This weekend I fooled around with the Sparkfun “RFID Starter Kit”. I purchased it from my local technology barn for around $50.00. I am teaching myself physical computing, and projects like that can be completed in an afternoon, are a great way to learn “just enough” to keep a junior hardware hacker like myself from getting frustrated. I was thrilled to find out that getting this board to talk to Ruby took virtually no effort. In fact, it was so simple it almost felt like I was cheating some how. Here are the steps that I followed to get the ID-12 RFID Scanner and Reader talking to Ruby. Download the most recent drivers from Future Technology Devices International: http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_14.dmg The package contains two sets of drivers. Make sure that you install the version that is right for your operating system. Install the serialport gem for Ruby gem install serialport (I used version 1.0.4) Mount the scanner on top of the reader by lining up the prongs in the appropriate slot. Then plug the reader into the Mini-USB port of the mac. From the console, locate the virtual com port the drivers created when you plugged in your Mini-USB cable. :~ ls -la /dev Scanning the output from this command you should see the device listed similar to this: cu.usbserial-XXXXXX (where X’s represent a driver id). Mine showed up as “cu.usbserial-A900ftPb” but yours may be different. Use this sample code to print the unique RFID id stored inside the card, when someone swipes the card over the scanner. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 # Simple example of reading from serial port to interface with the RFID reader. require "serialport" class RfidReader attr_accessor :key def initialize(port) port_str = port baud_rate = 9600 data_bits = 8 stop_bits = 1 parity = SerialPort::NONE @sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity) @key_parts = [] @key_limit = 16 # number of slots in the RFID card. while true do main end @sp.close end def key_detected? @key_parts << @sp.getc if @key_parts.size >= @key_limit self.key = @key_parts.join() @key_parts = [] true else false end end def main if key_detected? puts self.key end end end RfidReader.new("/dev/cu.usbserial-A900ftPb") #may be different for you Once you have the unique ID the possibilities become nearly limitless, you can use the card to update twitter, or turn on your lights, turn on the coffee pot, fire the nerf guns, release the hounds etc. Have fun, I know I will!

IE

about 5 years ago | Ben Gilles: Ben Gillies

cdent writes:So you got some action over on side A and a sizable set of web browsers that run across all these different operating systems. And then you’ve got this other browser that only runs on side B. If Microsoft wants to show a real commitment to an open web, they need to start releasing versions of IE for other operating systems. It used to be possible to get IE for Mac and Unix. There was even a time when IE was the clear best choice of browser on a Mac. The thought occurs to me that the exact same argument can be made for Microsoft’s mobile app development process. That being:If people want to develop a mobile app, they need a Mac running OS X, unless they don’t want to support iOS (unlikely). On a Mac, they can develop apps for iOS, Android, and responsively on the web itself.If they want to also support Windows Phone, they need to shell out for a copy Windows, which they must then either run inside a VM (which sucks), using BootCamp (which is a lot of hassle), or on a separate Laptop (which is expensive).After they have Windows running, they need a copy of Visual Studio (I’m unsure of the license terms of the Express editions, but they may or may not suffice).So the workflow for someone wanting to support Windows Phone boils down to one of the following 2 options:Develop all your apps for everything but Windows Phone. Then switch to a whole new Operating System and make the Windows Phone version. Develop all your apps for everything but Windows Phone and point people at the web site. The solution seems fairly obvious (hint: it’s (2)).tl;dr: Microsoft needs to release Visual Studio for OS X as well as IE. via TiddlySpace [source]

imageScience on Ubuntu

about 5 years ago | Gourav Tiwari: easy_software = Agile.find(ruby_on_rails)

imageScience on Ubuntu and ruby 1.8.7, should be very simple. What the hack! I spent 1 hour figuring out, simply you need this:sudo apt-get install libfreeimage-devsudo apt-get install libfreeimage3gem install RubyInlineSharing == saving some extra human hours!

imageScience on Ubuntu

about 5 years ago | Gourav Tiwari: easy_software = Agile.find(ruby_on_rails)

imageScience on Ubuntu and ruby 1.8.7, should be very simple. What the hack! I spent 1 hour figuring out, simply you need this:sudo apt-get install libfreeimage-devsudo apt-get install libfreeimage3gem install RubyInlineSharing == saving some extra human hours!

Migrate from Blogger to Octopress: Step-by-Step Guide

about 5 years ago | Amit Kumar: toamitkumar's Code Blog

After procastinating for quite sometime, I finally decided to migrate from blogger to Octopress using Jeklly and likes. In this post, I have tried to compile the steps in detail. Export xml from blogger Go to settings page of your blogger and click the “Export blog”, link as shown in the image below. This will open a modal pop-up window. Click on the “Download blog” button to download an xml output of all your posts. Store the downloaded xml somewhere on your machine. In the next section, we will see how to convert the xml into htmls by a running a ruby script. (Note: You should have ruby installed on your machine to run this script). Run gem install nokogiri to install ruby xml parser. Run the script to create markdown files Run the script below: ruby blogger_import.rb downloaded_blogger.xml require 'rubygems' require 'nokogiri' require 'fileutils' require 'date' require 'uri' # usage: ruby import.rb my-blog.xml data = File.read ARGV[0] doc = Nokogiri::XML(data) @posts = {} @drafts = {} def add(node) id = node.search('id').first.content type = node.search('category').first.attr('term').split('#').last case type when 'post' if published?(node) @posts[id] = Post.new(node) else @drafts[id] = Post.new(node) end when 'comment' reply_to = node.children.find {|c| c.name == 'in-reply-to' } post_id = reply_to.attr('ref') #post_id = node.search('thr').first.attr('ref') @posts[post_id].add_comment(Comment.new(node)) when 'template', 'settings', 'page' else raise 'dunno '+type end end def published?(node) node.at_css('app|control app|draft', 'app' => 'http://purl.org/atom/app#').nil? end def write(post, path='_posts') puts "Post [#{post.title}] has #{post.comments.count} comments" puts "writing #{post.file_name}" File.open(File.join(path, post.file_name), 'w') do |file| file.write post.header file.write "\n\n" #file.write "<h1>{{ page.title }}</h1>\n" file.write "<div class='post'>\n" file.write post.content file.write "</div>\n" unless post.comments.empty? file.write "<h2>Comments</h2>\n" file.write "<div class='comments'>\n" post.comments.each do |comment| file.write "<div class='comment'>\n" file.write "<div class='author'>" file.write comment.author file.write "</div>\n" file.write "<div class='content'>\n" file.write comment.content file.write "</div>\n" file.write "</div>\n" end file.write "</div>\n" end end end class Post attr_reader :comments def initialize(node) @node = node @comments = [] end def add_comment(comment) @comments.unshift comment end def title @title ||= @node.at_css('title').content end def content @content ||= @node.at_css('content').content end def creation_date @creation_date ||= creation_datetime.strftime("%Y-%m-%d") end def creation_datetime @creation_datetime ||= Date.parse(@node.search('published').first.content) end def permalink return @permalink unless @permalink.nil? link_node = @node.at_css('link[rel=alternate]') @permalink = link_node && link_node.attr('href') end def param_name if permalink.nil? title.split(/[^a-zA-Z0-9]+/).join('-').downcase else File.basename(URI(permalink).path, '.*') end end def file_name %{#{creation_date}-#{param_name}.html} end def header [ '---', %{layout: post}, %{title: "#{title}"}, %{date: #{creation_datetime}}, %{comments: false}, categories, '---' ].compact.join("\n") end def categories terms = @node.search('category[scheme="http://www.blogger.com/atom/ns#"]') unless Array(terms).empty? [ 'categories:', terms.map{ |t| t.attr('term') && " - #{t.attr('term')}" }.compact.join("\n"), ].join("\n") end end end class Comment def initialize(node) @node = node end def author @node.search('author name').first.content end def content @node.search('content').first.content end end entries = {} doc.search('entry').each do |entry| add entry end puts "** Writing PUBLISHED posts" FileUtils.rm_rf('_posts') Dir.mkdir("_posts") unless File.directory?("_posts") @posts.each do |id, post| write post end puts "\n" puts "** Writing DRAFT posts" FileUtils.rm_rf('_drafts') Dir.mkdir("_drafts") unless File.directory?("_drafts") @drafts.each do |id, post| write post, '_drafts' end This will generate _posts and _drafts directories with all relevant posts in html format. Install & Configure Octopress Follow the step by step guide here to setup octopress on your local. I have used github pages to deploy the Octopress blog but there are other options as well. Alsobe sure to check the blog confirguration section. Integrate plugins Octopress has options to integrate with 3rd party plugins like: Disqus Github Twitter Sample _config.yml file which I used in this blog setup. # ----------------------- # # Main Configs # # ----------------------- # url: http://toamitkumar.github.com title: RubyizednRailified Blog subtitle: Ruby, Rails and others. author: Amit Kumar simple_search: http://google.com/search description: toamitkumar # Default date format is "ordinal" (resulting in "July 22nd 2007") # You can customize the format as defined in # http://www.ruby-doc.org/core-1.9.2/Time.html#method-i-strftime # Additionally, %o will give you the ordinal representation of the day date_format: "ordinal" # RSS / Email (optional) subscription links (change if using something like Feedburner) subscribe_rss: /atom.xml subscribe_email: # RSS feeds can list your email address if you like email: # ----------------------- # # Jekyll & Plugins # # ----------------------- # # If publishing to a subdirectory as in http://site.com/project set 'root: /project' root: / permalink: /blog/:year/:month/:day/:title/ source: source destination: public plugins: plugins code_dir: downloads/code category_dir: blog/categories markdown: rdiscount pygments: false # default python pygments have been replaced by pygments.rb paginate: 5 # Posts per page on the blog index pagination_dir: blog # Directory base for pagination URLs eg. /blog/page/2/ recent_posts: 5 # Posts in the sidebar Recent Posts section excerpt_link: "Read on &rarr;" # "Continue reading" link text at the bottom of excerpted articles titlecase: true # Converts page and post titles to titlecase # list each of the sidebar modules you want to include, in the order you want them to appear. # To add custom asides, create files in /source/_includes/custom/asides/ and add them to the list like 'custom/asides/custom_aside_name.html' default_asides: [asides/about.html, asides/coderwall.html, asides/recent_posts.html, asides/twitter.html, asides/delicious.html, asides/pinboard.html, asides/googleplus.html] # Each layout uses the default asides, but they can have their own asides instead. Simply uncomment the lines below # and add an array with the asides you want to use. # blog_index_asides: # post_asides: # page_asides: # ----------------------- # # 3rd Party Settings # # ----------------------- # # Github repositories github_user: github_repo_count: 0 github_show_profile_link: true github_skip_forks: true # Twitter twitter_user: toamit twitter_tweet_count: 4 twitter_show_replies: false twitter_follow_button: true twitter_show_follower_count: true twitter_tweet_button: true # Google +1 google_plus_one: false google_plus_one_size: medium # Google Plus Profile # Hidden: No visible button, just add author information to search results googleplus_user: googleplus_hidden: false # Pinboard pinboard_user: pinboard_count: 3 # Delicious delicious_user: delicious_count: 3 # Disqus Comments disqus_short_name: toamitkumar disqus_show_comment_count: true # Google Analytics google_analytics_tracking_id: # Facebook Like facebook_like: true # Coderwall achievements coderwall_user: toamitkumar coderwall_endorse_me: true Customizing and Theming The link gives details of customizing the navigation bar, color schemes etc. There are few themes which can be used to change the aesthetics of the page and layout. Flaunt your achievement badges from coderwall Coderwall is the online reputation system for developers. It exposes a simple JSON representation of every profile. The api can used to show off ‘achievemnt badges’. Add the below script to source/_includes/asides/coderwall.html and add asides/coderwall.html to your default_asides array in _config.yml file. {% if site.coderwall_user %} <section> <h1>Coderwall Badges</h1> <ul id="cw_badges"> <li class="loading">Status updating...</li> </ul> <p id="badges"></p> <script type="text/javascript"> function show_achievements(args) { var badges = args["data"]["badges"]; var achievements = ""; for (var i = 0; i < badges.length; i++) { var alt_text = badges[i]["name"]; var title_text = badges[i]["name"] + ' - ' + badges[i]["description"]; achievements += '<a href="http://coderwall.com/{{site.coderwall_user}}/"><img src="' + badges[i]["badge"] + '" width="48" height="48" alt="' + alt_text + '" title="' + title_text + '" style="margin-top: 7px;margin-right: 4px;"' + '"/></a>'; }; document.getElementById("cw_badges").style.display = "none"; document.getElementById("badges").innerHTML = achievements; } </script> <script src="http://coderwall.com/{{site.coderwall_user}}.json?callback=show_achievements"></script> {% if site.coderwall_endorse_me %} <p><a href="http://coderwall.com/{{site.coderwall_user}}"><img src="http://api.coderwall.com/{{site.coderwall_user}}/endorsecount.png" /></a></p> {% endif %} </section> {% endif %} Make sure you also add: coderwall_user: coderwall_endorse_me: true This will also add endorse me link to your blog as shown below: Set re-direction from blogger to new Octopress blog Follow the steps below to setup re-direct from blogger to this new site. Design -> Layout -> Edit HTML Find <head> tag Add the following line below the <head> tag as below: <meta http-equiv="refresh" content="0;url=http://url_of_your_new_site.com"/> Save the file You are done, blogger will redirect to your new site. Thats it !! Hope this helps in setting your blog site using Octopress.

9 Secrets To Running A Successful Crowdfunding Campaign.

about 5 years ago | Mark Daggett: Mark Daggett's Blog

As many of your know, I am one of the co-founders of Pledgie. Occasionally, I get asked for advice on how to make an effective campaign on Pledgie and so I began to seriously research this topic about three months ago. Using research, expert advice and by analyzing the thousands of existing Pledgie campaigns I attempted to distill the qualities of a successful campaign into a series of tips (actually nine of them). Whether you are an individual or an organization using Pledgie to raise money, these points may help you to craft a winning message. 1. Empathy Over Sympathy The job of your campaign message is to focus on the empathetic link between your cause and your donors. Instead of trying to elicit feelings of guilt or pity, focus on positive connections your donors share with your campaign. Humans, like many other animals, feel empathy and sympathy for one another. Both are incredibly powerful emotions but when it comes to triggering a donor to make a commitment empathy rules the day, and here’s why. Empathy is both the ability to logically understand the experience of others, and simultaneously share a visceral emotional link. Sympathy, however is our ability to feel sorry for someone else’s misfortune, but at a more abstract emotional level. For example, a parent might feel empathy looking at a sick child, because they can imagine their own child in a similar state. In contrast someone without kids might just feel sympathy for child without feeling the greater shared circumstance. 2. Tell A Story When crafting your campaign, tell the story of your cause. People are more likely to connect with a narrative than with facts and figures. When crafting your campaign story, ask yourself if it answers these questions: Who are you? Why is this campaign important to you? What problem does this campaign seek to solve? Why is this campaign important to the donor? 3. Be Yourself Donors do not contribute to an idea; they contribute to a person. When describing yourself or your organization, use simple and direct language that gives a brief and complete picture of who you are, and why your campaign is a passion worth funding. The goal is to get potential donors to start seeing you as a real person and not just words and images on a webpage. 4. Don’t Forget to Ask This seems obvious, but you’d be surprised how many campaigns never ask for funds! People often think that the goal of a Pledgie campaign is to describe the need. While that is an essential component of a good campaign, the actual goal of a Pledgie campaign is to get others to do something about your need. When crafting your campaign message you should concentrate on adding language that: Encourages potential donors to act immediately. Gives them explicit actions they can take to help your campaign. 5. Get Your Friends & Supporters Involved Your friends and supporters are your base, they provide a stable foundation to build your outreach upon. When spreading your message through social networks like Twitter or Facebook, it is essential that your friends help make a personal appeal. As a message spreads across your social graph it can suffer an entropy in trust. This may happen, because as your message spreads the recipients are less likely to know you personally. Asking for personal appeals from others help, because people are more likely to give if someone they know is personally invested. 6. Look for collaborators not benefactors Donors who are funding a cause want to feel like they are part of a solution, and not just performing an act of charity. Craft your message in a way that demonstrates to the donor that they are investing in the outcome, and that you will keep them up-to-date as you progress towards your goal. 7. Photo Finish We cannot stress enough how important having a video or photo is when crafting your campaign. Even if the photo is just a portrait of yourself, simply having a photo or video associated with your campaign description can make a huge difference in perceived credibility. 8. Follow Up With Progress Reports Donors who have donated once are likely to donate again if you ask them. Sometimes the easiest way to ask is to share your progress towards your goals. Giving periodic updates to your donor base shows them that they made a wise investment in you, and that you can be trusted with additional funds. 9. Be Grateful When someone makes an effort to support your cause, be sure to say thank you. It gives them a sense of connection and fulfillment that can lead to future support. It is also the right thing to do!

Manifesto for Agile Software Development

about 5 years ago | Eduard Moldovan: eduardmoldovan.com - tech

I hear and read a lot that companies and people use it, so I am thinking that I show them the agile manifesto, so that they can decide if they are really agile.

On Jumping

about 5 years ago | Mark Daggett: Mark Daggett's Blog

Jump and the net will appear.John Burroughsen.wikipedia.org/wiki/… Seven years ago there was much handwringing around leaving my job to start my own consultancy. That is until my friend told me this quote from John Burroughs. It is a compelling illustration about faith in yourself and that the world values you. It often resurfaces for me when I am mulling over a risky proposition. The best thing about this quote is when properly applied, if the net doesn’t appear… well it won’t hurt long!

Thoughts on Requirement Gathering

about 5 years ago | Mark Daggett: Mark Daggett's Blog

Requirement documents should be a recipe not a shopping list. This metaphor is my attempt to encapsulate what a good requirements document is. Both a shopping list and a recipe are essentially lists of ingredients in various quantities. However, the recipe also includes a desired outcome and precise descriptions of how the ingredients are meant to be used. When evaluating a requirement document ask yourself if it gives you a clear understanding of what it is you are being asked to build, and how the independent parts work together. If it doesn’t do that then, my friend, you are reading a shopping list.

Productized Services [Capturing the next BIG market place]

about 5 years ago | Amit Anand: UXcorner

  On a photography expedition (of amateurs of course!) recently I visited the old Delhi by-lanes. Slim gullys (lanes in Hindi as we call it) with fat loads of money exchanging hands. You get almost everything from good food to wholesalers of clothing accessories and specialty packaging industry giants. A good mix of traders and […]

Productized Services [Capturing the next BIG market place]

about 5 years ago | Amit Anand: UXcorner

  On a photography expedition (of amateurs of course!) recently I visited the old Delhi by-lanes. Slim gullys (lanes in Hindi as we call it) with fat loads of money exchanging hands. You get almost everything from good food to wholesalers of clothing accessories and specialty packaging industry giants. A good mix of traders and […]

This Week's Reading Roundup - No. 1

about 5 years ago | Eduard Moldovan: eduardmoldovan.com - tech

I decided to write up the things I read, that I come up on in a week. This is my first one!