I have a friend/client that is using a customized version of Diaspora to host a community and allow them to engage with each other. We have made some changes, in order to better serve our community. I'm not a Ruby developer, myself. Some of this stuff may be obvious to those of us who are. However, for the rest of us, I put together this little guide to demonstrate how to do these things on your own.
Adding/subtracting fields from profiles.
We wanted to add the fields: "company," "twitter ID," and "company URL." I found you can do so by following these steps
STEP 1: Add columns to profiles table in MySQL.
I'm going to assume that whomever's reading this doesn't know crap about mysql either (well, you have to be able to login, and get to a mysql prompt). Give your new field an alias. I went with company_name, twitter_url, and company_url. Once you're logged in to mysql, you're going to want to point to the DB (either diaspora_development, or diaspora_production). The command is "use diaspora_development".
Then get information about the profiles table, using the command "DESCRIBE profiles" (this is so you can see what's going on with the table in general, not a necessary step).
You can then add your columns, by using the command
"ALTER TABLE `profiles` ADD `new_column` VARCHAR( 255 ) NOT NULL;"
PLEASE NOTE: I am 100% sure there is a way to do this by altering the schema.rb file, however, I wasn't able to make that happen by just editing and re-migrating so this was easier for me. If you could instruct me on how to do that I will replace this section.
STEP 2: Open up apps/models/profile.rb starting on line 17 you will see some XML Attributes being declared with like so "xml_attr :property" add yours to the bottom like so:
Add them yet again on line 42:
STEP 3:
///NOTE REVIEWER: DON'T KNOW IF THIS IS NECC. OR WHAT IT DOES, THOUGHTS?
On line 82 of the same file, you will see a function called from_omniauth_hash, add your new fields to the columns like so:
STEP 4:
Now you need to go into the language files and add your fields. Open config/locales/diaspora/en.yml (or, whatever language version you are using) and starting at line 616 you will see the aliases for the different profile fields, add yours like so:
STEP 5: Finally, you need to update your view. Go to app/views/profiles/_edit.haml add the new h4 with your fields in it. Now you are done!
UPDATE: Please notice, the author of the story shared is actually Matthew Heusser, this is what I get for not confirming before posting. Thank you, Matthew, for sharing your story!!
I'm a developer, and inasmuch I am proud of the fact that I rarely wear pants. As I write this now, I am wearing pants, but only because I went into the office today. I have orange hair, and a large assortment of lip gloss. I sleep to 11 most days, and I defy anyone that says I shouldn't. All in all I've embraced the developer's frat guy lifestyle.
I've started a book called the Clean Coder by Uncle Bob Martin. The thing that has made the biggest impression for me was in the forward (written by Matthew Heusser). He tells a story about a development team he was once a part of, I'm paraphrasing quite a bit (the book is still at the office), but he talks about a team in an enterprise company that had been working on a project for quite a few months with a set-in-stone release date on the horizon. As the date approached they worked day/night/weekends to get things done. He had a team of talented coders and under much pressure from management they strapped themselves to their keyboards in order to get the job done on time, and they did.
The Friday before the Monday release date they were stoked. It's so rare that a project gets completed exactly on schedule, but they had done it. They were celebrating and relaxing when they got a call from management. Seems that legal hadn't finished the paperwork needed for the launch, and they needed an extra day to get things done, the meeting was going to be pushed to Tuesday.
"No way" was Matt's response, "we have been killing ourselves over this. They have Saturday and Sunday to get this work done, plenty of time." "Sorry," was the word from above, "these people are professionals, we're not going to ask them to work the weekend. Meeting is pushed to Tuesday." Matt was irate, "Are you serious? My developers have been working around the clock, nights, weekends, you name it. We can ask the guys in legal to put in a little extra time." Management responded, "You don't understand, these guys are PROFESSIONALS."
That's when it sunk in for him, people don't think developers are professionals. They look at us like a bunch of sloppy kids that happen to know how to do something that they need. After reading that story, it sunk in for me too.
Clients trust me to take care of things they don't know how to do. In order to do that, they need to feel I am competent and capable. Disappearing in the zone for a few days, while it may be best for the project, isn't comforting for the client. Up until then I had a dim view of client hand holding, and thought "they just need to trust that I am working on it." However, I have realized that a good working relationship, constant updates, and accountability are just as important as clean code and passing tests.
I still rarely wear pants, and have orange hair, but my client's comfort is much more important to me now. I want them to know I'm here whenever they call, and they can trust that I'm working hard to solve their problems and build their software. The response I have gotten has been great, and I've noticed how much they appreciate being kept in the loop no matter what. That makes my job easier, and that's a reward I didn't expect.
This blog post has been a long time coming. I initially started doing web development using ASP.NET and C#. I was honored to be given MVP distinction by Microsoft for the years of 2010 and 2011. I wanted to wait until that had expired before commenting on my departure from the world of .NET development.
I started my career within the .NET community, and my posts of late have been devoid of Microsoft references. I can only imagine that folks that enjoyed my "Web Forms to MVC" other C# posts are wondering where the love was lost. There is no love lost, I will be forever grateful to the .NET community for how they helped me get where I am today. There are several reasons that I no longer do .NET development professionally. I will try to explain them in this blog post.
First things first.
I have to get out the wonderful things about .NET development that I experienced on the way. The .NET community is extremely warm, and welcoming. .NET development has the highest female : male ratio in development I have seen. The reason for this is obvious: the people. They welcomed me when I was new, they helped me learn many things. I can't thank them enough.
The barrier for entry was low, there were few "well actually..." and more "welcome!" I was actively encouraged by my peers to contribute. I still call many people "friends" that I met back there. I hope to emulate some of the mentorship that I found back there with others in the future.
The Angry Rant
I have seen many people "quit" the world of Microsoft development. It usually draws out into a long thing with a Twitter battle, and angry comments, and a throw down to the teams that don't care enough about supporting their developers within Microsoft. The tools are bad, the direction of the languages are crazy, their support isn't fast, someone is a jerk, etc. It always calls me back to a time of message boards and people quitting the internet.
There is a primary disconnect with people that blame individuals, or direction, or other such surface issues, there is a failure to understand the business of Microsoft as a company. Microsoft makes money working with Enterprises. Microsoft answers to shareholders. Therefore, C#, F#, ASP.NET, and all other Microsoft frameworks/languages are a for profit operation. Yes, I am aware that the majority of their income does not come from these tools, and not even from $10,000 MS SQL Server licenses. However, the responsibility for all their employees, all the departments, and ultimately all the initiatives is to answer to their board.
Developers can not rationally expect this to lead to more perfect tools and a better community. Money buys you a lot of resources as a company, but, ultimately, your driving force is apparent on what you create.
What this has to do with me
Ok, well, Microsoft supports me as a developer. Pays for me to come visit them, eat on their dime, and I even get these really sweet jackets. Why disrupt something so choice? For me, it comes down to my fundamentals as a person.
I believe in the internet. I believe in people. I believe that people have created something beautiful, and it's up to us as developers to build and grow it.
Being a software developer in this age is a privilege, something the world has given me, and a responsibility.
I believe in open, I believe in being motivated by what is best for the web, and not what is best for my company. Making that decision over and over again has cost me a lot of money, and many perceived "opportunities" but my soul remains intact and I believe I am contributing to an amazing time in history with my fellow (wo)man in mind.
JavaScript is free. JavaScript is open. JavaScript is built by people that love the same things I do, and only answer to this community, their consciences, and what drives them.
For me it was undebatable that this is where I wanted to be.
The People
I know many people that are not only .NET developers, but work to build the related languages and frameworks from within Microsoft. I don't consider them sellouts. I think they are making their difference where they can, and want to. I am doing the same. I respect them not only as developers, but as people, and friends. I am eternally grateful to them for giving me the introduction to community and web development they did. I look forward to continue down the same path, building web one link at a time.
There's this guy, his name was Terry Fox. When he was 18 he learned he had bone cancer, so he proceeded to run a marathon a day for 143 days depite losing his right leg. I find stories like that incredible, and every year people run in his memory (a measly 5k, I might add). Anyway, I'm running with a team and we have a paltry fundraising goal. If you are interested in donating, you can do so here. Our team name is kind of corny, but you can see what we did there.
I'm teaching a Chrome Extensions class at New Work City in conjuction with their sponsor, Google. Super excited to get more people cranking out extensions, if I can quote one reacting from my jQuery talk, "I had no idea it was that easy." Students will be building multiple extensions in the class, and will walk out with knowledge on how to build all the diverse types that the Google platform allows you. Link to the class is here, let me know if you're interested and I can hook you up with a discount code. Also, check out this HTML5 & Modern Web Apps class, being taught by one of their developer evangelists.
Right now I'm enjoying beautiful Norway for the Frontend 2011 conference. Designers sure talk about their feelings a lot, no?
I like Google Plus. I think that if it gets more acceptance it will be the perfect solution for all of us nerds to play around in (until our moms find it). I really get irritated, however, in the current notification system. For some reason we all seem to be complaining about a lot of notifications that boil down to "someone you don't know is following you on Google+" Don't get me wrong, I love the fact that people are interested in what I have to say in general. However, I don't need a telegram every time I get a follower. I do however, need a telegram when someone shares something with me, or comments on a post.
I built Addblocker to do just that. No longer will you be plagued by "Some guy just followed you on Google +".
So far it only works in GMail, but I'm working on every other Google property. Without further ado:
Here is the GitHub in case you'd like to make any changes. It's using jQuery right now as it was a demo for jQuery conf, however, I will likely remove it as it's not necessary for this particular extension, so keep that in mind.
Please let me know if you run into any bugs, or issues.
I am, and always have been, a fuck up. Ask anyone that has known me for more than five years and they will vouch for this. There are kids that learn how to swim by taking lessons, practicing in the shallow end, and then, when they are ready, make their way out to deeper waters confident they can stay afloat. There are also kids that see someone make a high dive one time on tv, run onto the diving board and face plant their first time in the water. I'm one of the latter, and though it's taken me nearly thirty years to get here, I'm okay with admitting it in mixed company.
The media makes this disposition seem quite glamorous, and people think it's exciting. The STNG Qs(my favorite), Dr Gregory Houses, Shawn Spencers and Junos. History has many we look up to, Oscar Wilde, Douglas Adams, George Carlin, Voltaire, Feynmen, Adams. In reality, for as many make it into the public eye, there are 50 more in desperate circumstance. We are the drug addicts, the desk throwers, the dysfunctional, unemployable, and homeless.
There is one trait, and besides the many good people that surround me it is the only thing that has kept me away from succumbing to the dangers of my temperament. That trait is the ability to forgive myself, even when it seems unbearable.
Very often, I do things that are extremely stupid. I think no matter what our personality type that happens to us every so often. I make a bad call when designing a product that hindsight shows me from a mile away, I put off a client with a sloppy email or a poor follow up, I miscalculate my monthly income in an astronomical way, or I drop my iPhone 4 on cement while running down the street in heels (for absolutely no good reason besides being dared or trying to catch an ice cream truck). Things like this used to cause me much pain, and stop me in my tracks unable to go forward from the shame I felt and the voice in my head telling me I should have known so much better. There would be absolutely no forward progress while I berated myself, sometimes looking in the mirror and asking repeatedly how it was possible for one person to be so stupid.
Time and experience taught me that if I kept up that type of behavior it not only would retard my progress it would endanger my ability to run my business and follow my career goals. I've learned to forgive myself no matter how spectacularly I fail, and that has enabled me to accomplish things and get to places that only existed in my wildest dreams of the future.
Many tout the benefits of "getting over it" and "moving on", however, I think the only way to describe this process is forgiveness. You are angry at yourself, for hurting yourself; just as you would be angry at someone else for hurting you. You let yourself down, you should have known better, and you were inconsiderate of your own needs, yet again. If we can't get past these emotions of guilt, anxiety, and discomfort we can't look back and gain what we can use from the experience.
The ability to fail intelligently is something I constantly strive for. In order to get to that point, you must be able to quickly regroup and do a post-mortem of your behavior, actions, and decisions. You need to be able to look yourself straight in the eye and say, "how is this going to go better next time?" You can't be afraid of a next time, you need to plan on it. To look intimidation in the face, and not be afraid to be an embarrassment to yourself all over again.
I found this excellent post by Rand Fishkin this week that illustrated how valuable this is, not only to yourself, in this case also to many others. The CEO of Seomoz, a Seattle based startup, shared his experience with going after funding and subsequently failing. His detailed analysis of his experience tells me that this isn't the first time he's tried something and not attained his goals (imagine?). Sharing his decisions, the actions at his company, the outcome and perceived consequences not only benefits him should he revisit this world again, it helps all of us who go down that road to understand more about what it means to succeed, and possible roads to failure.
It is very easy to talk about forgiveness, but many people are locked in a world where they cannot accept anything but perfection. Being a good software developer, product manager, computer engineer, or ice cream truck operator (for that matter) means being able to reflect on what you have done poorly and live your life in iterations. Because being good at something means never being perfect, it means seeing where you've done poorly and never doing it again because you care about, not only your work-product, but also yourself.
I hear a lot of talk about this "Work Life Balance" thing. It sounds interesting, and at some point in my life I think I will probably enjoy having one. Should I have a family, for instance. One thing I appreciate about this field is how mom friendly it is. As a developer, it's super easy to work from home, and keep some pretty weird hours. I hope one day I can sit next to my child while I hack away at work, maybe they will read Nancy Drew books.
As far as my swinging bachelorette lifestyle in the big city goes: there is no balance. My work is my life, and I love it that way. My process is thus: I wake up in the morning. Usually around 10am(ish). I roll over and check my iPhone. I have a horrible habit of getting important emails when I am half asleep and not starring them, this itself isn't awful but when I wake up sometimes I don't remember them. I have been getting better at this. I <3 priority inbox.
When I get up I decide where I want to work that day. The unofficial slogan of New Work City is "People that can work anywhere work here." Independance means I can work anywhere. Most of the time it is there, or outside somewhere, or at a restaurant, or at a salon getting a pedicure (I have wifi to go).
My first priority is always client work. This can take anywhere from 1-10 hours, depending on my workload. It varies depending on number of clients and where I am in a project. Lately I have found happiness in being short term JavaScript support for existing teams, or working on small projects or plugins. Depending on who I am working with we often have chat open, or a constant email dialog. Sometimes I take a few calls. I spend equal time in Komodo, my editor of choice, as Vi or just in the CLI git-ing it up. I like solving unique problems, and I like to think of myself as a bit of a browser sleuth.
After I am done with client work I move on to Girl Develop It. This can be anything from coding to answering emails to working on curriculum to interviewing potential teachers. Vanessa and I share a Remember the Milk todo list, and every day I try to knock a little bit off the top. Some days I'm in the zone and I'm knocking things off our list, other days that's Vanessa. We balance each other out pretty well, a great pair.
Throughout the day I am talking to other developers about life and their craft.
If I'm at New Work City or a community space I've usually had conversations with at least a few keyboard slingers around me. Today no one would shut up about Google+, tomorrow it will be something else. Sometimes a debate about frameworks. Sometimes Kevin Galligan waxes crazy about hating dynamic languages. Sometimes Alex Godin impresses me with the latest thing he's working on. My darling Tony Bacigalupo sometimes wants to chat with a question or some commentary.
If I'm alone somewhere hacking away it's likely an IM from Jackson Harper inquiring about a Girl Develop It swimsuit calendar, or asking if my quiet protest of Go Daddy is because I don't support their female models contributing to technology, or introducing me to a new technology I hadn't heard of/vice versa (or asking what to get his fiancee for her birthday). It may also be Scott Reynolds who I bug for Ruby help and always get it (riddled with snark). I can be insufferably inattentive to IM windows however, and consider forgetting a conversation existed the reason to end it. Sorry about that.
After I am at a point where I feel it's ok to walk away from Girl Develop It related work, I can focus on my personal projects. The shoemaker's shoes, if you will. New design on the blog, new project with a friend, returning some emails, learning a new language... I must admit I rarely get this far.
Evenings start around 9pm. There is an equal chance I will be out on the town, teaching JavaScript to Girl Develop It students, going to a developer event, or sitting in a cafe working all night.
Like tonight:
There are times I get tired of teaching classes, or working on a certain project, or solving the same problem. However, I'm never sick of being a developer or being surrounded by them. This is a great thing because I am got-dang 24 hours a day, and that's how I like it.
For now.
The other day on Twitter I was wondering if anyone had compared the performance on jQuery's Tree Traversal functions as often you are able to locate an element more than one way and are faced with a choice. I put this together on jsPerf, the tests are all similar, if you could run it on your browser that would be wonderful, so we can compare.
If you have any suggestions on how to make these tests more accurate that would be better, I tried to make them all similar, this is my first experience with jsPerf.
EDIT: changed some of the tests to make sure they are doing the same thing, thanks Rick!
http://jsperf.com/jquery-tree-traversing/4
If you haven't already, listen to "This Developer's Life." When it came out last year it quickly jumped to the top of my favorite podcasts list along with "Herding Code" and "Science Friday." Rob Conery started it, and now he and Scott Hanselman sit and weave stories shared by other developers in a riveting way accompanied by music and brief glimpses into their own lives. The real value of the series is the production and the way it captures your imagination and emotion as you journey into the lives of other developers.
Rob and I are Skype pals, and a little while after the show started he came to me with a proposition. He had been having trouble finding ladies to be on the show. Being that I am a woman (I don't know if you knew that, I try not to advertise it), he thought I would have better luck finding some who would share their stories. He and Scott both feel powerfully that bringing out female rolemodels in this industry is one of the first steps toward closing the gender gap in software development.
I jumped at the chance to work with these awesome guys and be part of something that I admire. Rob and Scott bought me a whole setup (seen above) to interview folks with and mailed it to New York. It took me forever to figure out how to set it up, but as you can tell we now have a great podcasting room at New Work City (where I work), someone even soundproofed the walls.
I know a lot of kickass women programmers here in New York, so I sent out some emails right away. I sent out 13 emails. I emailed women I have great respect for, most of them have been in this field much longer than I (or are way more qualified), and work in positions that come with much respect. They have built amazing things, and work with incredible people. These, every one of them, are stories that need to be heard. If you lined them up next to the men that have been on "This Developer's Life" thus far they would be exactly on par.
From all but one of the emails I got the exact same reply: "I'm sorry, I just don't feel like I'm at the point in my career that I'm ready to talk about it publicly yet."
The one person that I got a "yes" from is Danielle Banks, she is a great student that is teaching herself how to be a developer. She's in the process of learning, and she was brave enough to come forward and share her experience with others. She was also the only one on the list that didn't have an established career in development (but will someday, believe me. You can hear her story here.)
I don't really understand what is happening here. Possibly, it's something that someone can explain. This is an extremely popular podcast and people all over the world are listening to it. Girls all over the world are listening to it. They are learning that there truely are no women in software, the statistics are right, they will have to break this ground alone if it is something they want to pursue.
It may be that these particular ladies don't like me that much, or they don't want to be around me for more than an hour, or there is some other reason they don't want to do this. It can be really scary sharing a story that you know people are judging you on, especially in this field where we're all competing to inject the most "Well actually...."s. However, I know there is a woman (are women) in the tri-state NYC metro area that want to sit and talk to me about this great industry and their experiences. I will buy you dinner, I will make you coffee, and I promise I will make you laugh at least once.
If this is you, or you know this woman please email me (contact link above). I would really appreciate you joining me in bringing some XX chromosomes to the airwaves.
Also, suggestions on how to go abou this in a better way would be welcomed. It's possible I'm using the wrong approach by cold emailing, and I would like to be better at this.
I, if you don't already know, am a huge fan of alternative ways of getting women into this amazingly exciting field. I had a great lunch the other day with a woman named Elena Silonok, she's pretty much what I want to be when I grow out of my eight colored hair and little kid hands. Not only is she beautiful, but she's brilliant and making the world a better place. Meeting women like her gets me all inspired again and reminds me why I do this in the first place (besides, you know, loving it).
I got this article sent to me in a DM from my friend Amrit Richmond (dropping names like it's my job). I appreciate the attempt by Fast Company to get ladies interested in hackathons, lord knows that we can use it. In the past, even I have expressed the overwhelming abundance of hot guys in software development. However, I need to clear up, that a hackathon is the last place you want to go if you are looking for developers that share your love of ST:TNG (don't judge me, I didn't grow up on the original).
This is a picture of me from the last hackathon I did. Breadpig had an awesome event where we all got to play with legos overnight, and our legos battled each other in the morning. Wait, what, you can't see me you say? Oh, well that's because at this point my eyes are pretty red, my hair looked like something the cat threw up, and to be honest I probably wasn't smelling all that great either. See, I had just been working on this dang little feisty robot for 12 hours in a row. From 7pm to pretty much 7 in the morning. I showed up dead serious, and ready to work.
If you try to show up at one of these things all "heeeeeey, I'm here for the drinks and the small talk" no one will want to work with you. No one else is there to meet people (especially the guys, if they are there to meet anyone it's other guys, or they are extremely illogical in nature). They will smell it on you if you are, and no one wants dead weight on their team.
Why go to a hackathon if you are just going to get smelly and gross and you aren't able to make guys take your Myers-Briggs to see if you're compatible? I can only tell my story. About 3am at the Breadpig Hackathon I took a look up from my laptop to see a bunch of girls that weren't competing talking and giggling with some guys in the corner (this is not a knock on giggling girls, I have been one a few times in my life). I then looked around to see my friend Alexis (and my new friend Danielle) working on their bots, and a whole bunch of guys around them cranking away at theirs. I was super proud and in my mind I said "We're fucking awesome."
That's why you go to a hackathon, for the pride that you can hang, and to be happy in what you built. Now, go forth! Build cool shit! Tell people about it!
Chrome really fights cross site scripting like the plague, whether you are building a plugin or not. Some of us love the simplicity of the JQuery AJAX functions and want to use them in our content scripts instead of the ugly XMLHttpRequests. If you throw one in, you will get a "Origin https://mail.google.com is not allowed by Access-Control-Allow-Origin" error.Use the code below to enable $.post, $.get, $.ajax, and $.post.
In your background page, include the following JS. What this is doing is adding a listener for the partiular functions (you specify which in your request), and funneling the request through your jquery libarary (notice, we add it in the beginning).
Then to the top of your content scripts, add these functions that work as proxies:
_getJSON = function(url, callback) {
console.log("calling JSON");
chrome.extension.sendRequest({action:'getJSON',url:url}, callback);
}
_ajax = function(url, callback, type, async) {
console.log("calling ajax");
chrome.extension.sendRequest({action:'ajax',url:url, type:type, async:async}, callback);
}
_get = function(url, callback) {
console.log("sending get");
chrome.extension.sendRequest({action:'get',url:url}, callback);
}
_post = function(url, data, callback) {
console.log("sending post");
chrome.extension.sendRequest({action:'post', data: data, url:url}, callback);
}
If you would like more of the functionality from the functions, you need to pass them from your content script. Add them as parameters in the proxy functions.
That's it, enjoy plugin development!