Friday, July 19, 2013
Kontextual: Full Stack Ruby on Rails Engineer
URL: ABOUT KONTEXTUALWe're helping organizations build transparent, metric-driven cultures. Our realtime platform combines elements of Business Intelligence, social collaboration and project management to help people evolve their organization.
Kontextual is a funded startup with a runway and a clear path to revenue. We're looking for someone who is comfortable in a high growth startup environment (Fast-paced, High Growth). You would be our second Rails developer and working directly with the co-founder on our existing stack and developing future technologies.
Sunday, July 7, 2013
Ex-Tiffany & Co. Executive In MAJOR Trouble
Ingrid Lederhaas-Okun was arrested Tuesday at his home in Darien, Conn. She was to appear later in the day in Federal Court in Manhattan to face charges of fraud and interstate transportation of stolen property.
As vice president of product development, Lederhaas-Okun had authority to “check out” jewelry from Tiffany to provide to potential manufacturers to determine production costs. The authorities argue that after he left Tiffany in February, the company has discovered that she had checked 164 items that have never been returned.
According to a criminal complaint, the missing jewelry including several diamonds 18 carat gold bracelets, diamond circle drop earrings in gold rings, Platinum or 18 carats of diamonds in Platinum, rings with precious stones in 18-carat gold and Platinum and diamond pendants.
When confronted about the missing jewels, Lederhaas-Okun said she had left some of behind Tiffany and some States have lost or corrupted, the complaint said. But an investigation found that Lederhaas-Okun resold the goods to a unidentified international dealer for more than $1,3 million, he said.
Bank records showed that from January 2011, the retailer wrote 75 controls to her or her husband for amounts of up to $ 47,400, the complaint said. Investigators also recovered the purchase forms signed by Lederhaas-Okun who said that the items were his personal property.
The authorities allege Lederhaas-Okun deliberately checked items valued under $ 10,000 apiece to avoid detection.The company takes a daily inventory of all items checked-out worth more than $ 25,000.
If convicted, Lederhaas-Okun faces up to 20 years in prison. The name of his lawyer was not immediately available.
Representatives of Tiffany, has refused to comment on Tuesday. - Full Post
WiKID Strong Authentication System 3.5.0-b1470 WiKID Strong Authentication Server
Release Notes: Updates to address LDAP and sudo issues, better logic for finding the JDK, improved reporting for launch errors, support for Pg v9, and bugfixes.
Release Tags: two-factor authentication, Server
Tags: Security, Cryptography, Networking, two-factor authentication
Licenses: GPL, Other - Full Post
deltasql 1.6.2
source code, which helps to keep database
evolution under control. While developing
mid-sized or big applications, developers make
changes to the data model that go along with
changes to the source code. From time to time,
branches of source code are done to stabilize the
code that will go to production. A sort of data
model branch is also needed. deltasql provides a
simple way to collect all scripts that change the
data model and means to handle data model
branches. The deltasql server runs on Apache and
is backed by MySQL.Release Notes: This release adds logic to select only the branches valid for a given project.
This is used when submitting or editing scripts.
When synchronizing,
only valid tags/branches are shown in the synchronization form.
The three listboxes of the synchronization form adapt dynamically,
as is done with the Freepascal deltaclient.
The feature is achieved with AJAX technology.
These two features help reduce the number of human errors when using deltasql in a
complicated environment with many branches and tags.
The Python client is extended to support Oracle's mysql.connector.
Release Tags: new features
Tags: Database, Database Engines/Servers, Software Development, Version Control
Licenses: GPL - Full Post
Eero 2013-07-03
Release Tags: Beta
Tags: Software Development, Compilers, programming languages, programming language
Licenses: University of Illinois/NCSA Open Source License - Full Post
Oracle Java Platform, Standard Edition 7u25
Release Tags: Major security fixes, Java 7, Minor bugfixes
Tags: Software Development, Libraries, Java Libraries
Licenses: SUN Binary Code, SUN Community Source - Full Post
Eric 4.5.13
Release Tags: Minor bugfixes, Bugfixes, Stable, 4.x
Tags: Software Development, Debuggers, User Interfaces, Text Editors, Integrated Development Environments (IDE), Python, Ruby
Licenses: GPL, GPLv3 - Full Post
Saturday, July 6, 2013
WhatsApp Is Killing the SMS Messenger
Short Message Service
SMS is a method of sending 160-character text messages via phones. It was developed as a way to send messages over the stripped-down telephone traffic signaling paths when there was no calling going on, rather than take up chunks of bandwidth space like voice does.
Its beauty is that it’s incredibly cheap because it uses hardly any resources, and the resources it does use aren’t required for anything else at the time the message is sent.
SMS is cheap, but you wouldn’t know it based on the per-message fees telcos have been charging for it — particularly when roaming.
How to Shoot Yourself in the Foot
The tide has changed, however, and today apps like WhatsApp are providing text messaging over 3G or WiFi.
Telcos may well tell you they don’t care about the potential SMS revenue loss, because the consumer simply buys an expensive data plan instead of a texting package
source:
- Full Post
Red Hat packages newer versions of Ruby, Python
For certain applications, a more recent version of a language than what’s included in the base Enterprise Linux (RHEL) system is needed, according to Red Hat. Software Collections 1.0 is the first in a series of releases designed to allow developers to take advantage of new capabilities in their web apps faster with the safety net of support from Red Hat, it said.
The beta includes access to the latest stable versions of Ruby 1.9.3 with Rails 3.2.8; Python 2.7 and 3.3; PHP 5.4; and Perl 5.16.3. Developers can also get their hands on a technology preview of node.js version 0.10. It is available now for use with RHEL 6 to customers with the right RHEL, Workstation or developer-related subscriptions. With the exception of Node.js, all components are supported. They are functionally complete and intended for production use.
The included versions of Ruby and the related web application development framework Rails, have substantial performance improvements for faster load times. Python 3.3 offers significant improvements in language consistency and Perl version 5.16.3 has enhanced security, according to Red Hat.
Additionally, Software Collections 1.0 also includes access to MariaDB version 5.5, MySQL version 5.5 and PostgreSQL version 9.2. Software Collections doesn’t replace the default system tools provided with Red Hat Enterprise Linux 6. Instead, a parallel set of tools are installed and can be optionally enabled by the user, Red Hat said.
A major version of Software Collections will be released approximately every 18 months, and each version of a selected component remains backward compatible, according to Red Hat. The life cycle for version 1.0 will be three years.
source:
- Full Post
Pillars of Python: Zope 2 Web framework
One of the longest-established Web server frameworks in any language, the original Zope is arguably the application that put Python on the map. Zope 2′s proud ancestry sits at the heart of numerous successful Web applications, and some of its technology can be found in other Python-based Web frameworks. For example, the BFG Web framework has become the Pyramid Web framework, now part of the Pylons project. (See the Pylons site for more details.)
Zope 2 is compatible with the 2.x version of Python; which precise version depends on the version of Zope 2. The current released version of Zope 2 — version 2.13, the one I tested — is compatible with Python 2.6 or 2.7. Zope 2 will run in just about any Web server that supports the proper version, though the Zope 2 framework’s integrated Web server, ZServer, is recommended by the Zope 2 engineers.
source:
- Full Post
Filming At CMA Headquarters
This is the third District Conference I’ve helped organize and I think for me this one will be the most interesting. One of the challenges with organizing a gather like this is the reality of having to marry business sessions (where we vote on things related to the governance of our district) and the speaking sessions. It’s not a typical conference like Catalyst or Drive which for me, is kind of hard to process. I like well-produced events and one of the things I’ve continued to push within my own district (ECD) is that we take advantage of the times we are together to improve the quality of the experience as much as we can.
There’s a limit of course and a balance but I’m excited that this year, we get to have a little more fun and do some things we haven’t been able to do before. Part of the reason why I push I think is that I think smaller churches and older churches dismiss production as something could never do or would never do in their settings. My hope is that if they see it done responsibly in a ‘family’ setting, they’ll be more interested in learning about it, trying it out in their context and as a result, increasing their team’s capacity for different kinds of Sunday morning experiences.
All that of course, will hopefully lead to better engagement with people who are showing up in their churches on Sundays and encourage other people to get involved or new people to be invited. Well, that’s the dream anyway.
So, all that to say I had a great time filming and I’m looking forward to seeing things go public at Tri-District Conference. AND, if you haven’t yet registered, make sure you do, this is going to be fun. - Full Post
Vancouver, Here We Come
We’re looking forward to doing some fun things. Lindsey wants us to do things that neither of us have done in the Lower Mainland so if anyone knows of some off the beaten path things that Lindsey and I might enjoy, please let us know! - Full Post
Tri-District Conference Is Done
I waited a week before posting on TDC because I wanted to give myself the opportunity to relax a bit and process the whole experience a bit more. Whenever family gets together it’s always interesting. One thing I really appreciate about the Alliance is the way that independent churches can share a common heart and mind. We don’t agree about everything but what family does? But together we’re able to accomplish so much more.
One of the things I noticed about this conference was the way all three districts (ECD, CCD and SLD) were able to connect. For me it was sweet because my first taste of the Alliance was in CCD, I’m now a part of ECD and I grew up in Quebec; what SLD calls home. I felt incredibly connected to the story of what was happening in all three districts and genuinely excited about how God is at work.
TDC was my first real interaction with our new denominational president, David Hearn. He’s a hugger. Wow is he a hugger. Unapologetically a hugger. Like old-school hugger. Lots of hugging. But boy when he spoke, and talked about his vision for the Alliance in Canada and what we as church leaders were called to do, man it sent shivers up my spine.
I am really excited about what is happening and will happen in the Alliance over these next few years. I met a lot of nice people, got to see some old friends and help create some sweet moments for the conference. I’ll post them below so you can check them out.
One thing I wasn’t expecting was how I would react emotionally to seeing my former colleagues from Cedarview there. It’s weird because it’s been a year now since I officially stopped going to work there every day. I’ve seen them all from time-to-time at gatherings and for some reason there’s usually a bit of awkwardness. How can there not be I suppose. It’s weird for me though because I still feel a sort of obligation to them when I see them. I think part of that is the fact that I didn’t leave Cedarview and go into a new ministry, I left and did something totally different. Perhaps part of it is me wrestling with calling. I think most of it is best compared to a breakup with a girlfriend and then not seeing them for a long time and then all of a sudden there they are and all those old feelings and emotions get stirred up again. You don’t necessarily want to get back together, but you miss the good times you did have.
All in all Tri-District Conference was a great time of connecting, sharing, dreaming and learning.
- Full Post
Hack-a-Thon 12 Pull Request Recap
zurb / foundation –
zurb / foundation –
andymccurdy / redis-py –
rubymotion / Joybox –
rubymotion / Joybox –
rubymotion / Joybox –
CurveBeryl / Joybox-Box2D –
CurveBeryl / Joybox-Examples –
- Full Post
Game Face
kairos
provides time series storage using Redis or Mongo backends. As of the 0.3.0 release, we have implemented support for Gregorian data intervals (daily, weekly, monthly, yearly) and there is a new API for Timeseries.series(). Check the README for more details.
Contributor(s): Aaron Westendorf (, )
leaderboard
allows you to build leaderboards using Redis. The leaderboard (Ruby), and libraries all saw updates this week. In leaderboard 3.1.0, we added support for a members_only option when making various leaderboard requests to only return the member data and not rank or score data. This same functionality was ported to leaderboard-coffeescript 1.1.0 and leaderboard-python 2.3.0.
Contributor(s): David Czarnecki (, ) and Simon Zimmerman ().
torus
is a service implementing the Carbon protocol to store time series data using and an HTTP server to query and analyze the data. With the 0.3.0 release, we upgrade to kairos 0.3.0 to add support for Gregorian dates and date ranges to “/series”, added support for UNIX timestamps or parsedatetime-compatible strings for ‘start’ and ‘end’ parameters to “/series” and added support for ‘steps’ parameter to “/series”.
Contributor(s): Aaron Westendorf (, )
- Full Post
Game Face
leaderboard
allows you to build leaderboards using Redis. The leaderboard (Ruby), and libraries all saw updates this week. In leaderboard 3.2.0, we added a method to be able to remove members from the leaderboard outside a given rank . This same functionality was ported to leaderboard-coffeescript 1.2.0 and leaderboard-python 2.4.0.
Contributor(s): David Czarnecki (, ) and Simon Zimmerman ().
- Full Post
Game Face
kairos
provides time series storage using Redis or Mongo backends. This week we started a branch with a work-in-progress implementation for a collapse function on retrieval of a given series.
Contributor(s): Aaron Westendorf (, )
- Full Post
Game Face
chai
provides a very easy to use api for mocking/stubbing your python objects, patterned after the library for Ruby. This past week saw 0.3.5 and subsequently 0.3.6 releases. We fixed only closing a non-matching expectation if its counts have been met as well as fixing the logic of raising UnexpectedCall when calling a stub and an unclosed, non-matching, in-order expectation does not have its counts met (got all that?).
Contributor(s): Aaron Westendorf (, )
factory_worker
is a node.js library that creates the Factory pattern for object stores. We integrated a . We’ll get a formal release out shortly.
Contributor(s): Brandon Mason ()
haigha
is our simple to use client library for interacting with AMQP brokers. In the 0.5.10 release, we fixed an unexpected indent error. Thanks to Chris Erway for .
Contributor(s): David Czarnecki (, )
- Full Post
Game Face
kairos
provides time series storage using Redis or Mongo backends. We released 0.4.0 this week to add some major functionality. collapse is now a keyword argument to series() for collapsing an entire timeseries into a single row. Transforms are performed after the collapse, allowing easy calculation of aggregates across an entire timeseries. We also added support in `get()` and `series()` for joining multiple timeseries into a single result by calling with a list of timeseries names rather than a single string. And finally we fixed an inconsistency in gauge type when collapsing or condensing gauge data. Value for an interval is the last recorded non-null gauge value now.
Contributor(s): Aaron Westendorf (, )
sentry
is a realtime event logging and aggregation platform. It’s pretty awesome and it’s open source. As Rails 4 was released this week, we submitted . It was accepted and integrated, so at some point in the future, if you use Sentry, you should see that functionality.
Contributor(s): David Czarnecki (, )
- Full Post
HUGE Design Event
Huge UX: The Internet of Things
Q. In a typical NYC lease, what will the total monthly cost be?
P & R Dental Strategies: Senior Database Developer
Location: Nashua, NH
URL:
P&R Dental Strategies, Inc. is committed to providing our direct and indirect customers (payers, providers, and patients) informatics and claims review products with the highest standard of professional competence, business ethics, and courtesy. At P&R, we understand the ever changing, growing, and evolving nature of the dental insurance, and healthcare industries and we are committed to growing and evolving with the needs of the industry.Our mission is to provide maximum cost containment and hold the line on fraud and abuse that is undermining healthcare efforts in our country, using state-of-the-art technology, impeccable service and support, and transparent ethical business practices to guarantee that our customers receive the most efficient and compliant products and services available in the dental benefits industry.Finally, P&R is committed to utilizing all products, services, resources, and capabilities to achieve the universal goal of improving the national oral health and hygiene.We are looking for a strong candidate to fill the role for Senior Database Developer. A strong candidate will have a history of being a self-starter and an ability to delight our customers and business users alike.What we are looking for:• At least 5+ years of experience in one of the following: 1) Querying large volume of data (>10M records), or 2) ETL on an enterprise scale• Demonstrate experience on topics like performance tuning and data analysis approaches• Demonstrate experience in working with Microsoft SSAS and SSIS• Collaborate with database administrators and system administrators regarding data warehouse development, migration of data through ETL processes, update data marts and cubes, procedure development, troubleshooting• Extensive knowledge to work with data extractions and delivery• Good knowledge base with statistical method integrationBonus knowledge:• Understanding of dental claim business• Knowledge in web services and middle tier integration experience• Knowledge of SQL server administration skills
To apply: If you think you have what it takes to work in a fast moving business, get in touch with us. We want to talk to you!
Please send your resume and SQL code sample to - Full Post
ThreatSim: Rails Developer
Location: United States
URL:
**No recruiters****No placement agencies****We're looking for individual candidates only**Hi. We're a profitable boot-strapped startup looking to expand our development team. We're looking for folks with the following skills:Ruby on Rails 3.0+Secure CodingRelational and non-relational databasesJavascript frameworks (e.g. jQuery, pure JS)Client-side and server side MVCComfortable with git for version controlContinuous integration MS Office (hah right, could you imagine?)You should be comfortable working remotely and producing great results every day. We’re huge fans of HipChat, Skype, join.me, animated gifs (pronounced G-IF, obviously), and other technologies that maximize your productivity while keeping you in your pajamas (*please wear pants during video calls). If you are in the Washington DC area, great. If not don’t worry, we’re open and flexible.Although this position is remote, you're going to need to fly here to DC for Go Karts, beer, and other team building.
To apply: If you are interested in helping evolve information security, tell us about yourself at - Full Post
Yelp: Software Engineer
Location: San Francisco, CA
URL:
Yelp's Search & Data Mining,
Ads, and Spam Prevention teams run services that respond to hundreds of
requests every second. Each and every query must be lightning fast,
24/7/365. This means our infrastructure needs to be both speedy and reliable.
It also needs to make efficient use of resources and be easy to use for
relevance/machine learning developers to modify and improve.
Your core responsibility will be helping to define and build that
long-term vision of a fast, reliable, efficient, and ductile search infrastructure.
So get your infra mojo on and join us!
Things we likePrior experience with production large-scale
distributed systems.Demonstrated ability to work with a large amount of
independence and responsibility.Ability to work closely with information retrieval/machine
learning experts on big-data problems. Some interest and familiarity with
IR/ML is a plus, but it will not be your primary focus.Prior experience with Lucene, ElasticSearch,
Hadoop/mrjob, or large data stores (MySQL or NoSQL - we just want the
right solution for the situation).A hunger for tracking down root causes -- no matter how
deep it takes you -- and fixing them in systematic ways.We use Java & Python. You don’t need to be an
expert, but experience is a plus and we will expect you to learn them on
the job.Minimum BA/BS degree in Computer Science, Math, or
related degreeA sense of humor and excellent aim with Nerf dartsApply Here: PI63327287
To apply: Apply Here:
- Full Post
What are the possible career paths for an interface developer?
As a UX developer, you get deeply involved in how users will use the application — which lends itself well to a Product Management role. Product Managers set direction for the product and sequence which features will be done when. They need to have a deep feeling for how the user gets value from the application.
Of course, Interface Developer is one of the key roles for a startup as well, if you have interests in that area. It’s very difficult to get investment in a startup without a working ‘beta’ or prototype — and building out prototypes of sites is one of the things a User Interface developer should be good at. You could find yourself in a situation where you could own a good deal of equity on a small startup if that were what you wanted to do.
Longer term, the things that will carry your career forward are your people skills and business skills — even if you choose not to go into management and stay technical. You’ll need to develop relationships and help people solve business problems.
But user interface developer is a great place to start a career. - Full Post
JQuery-UI verus SimpleForm for Rails Forms processing
In general, I’ve found more success using the simple_form library for generating form processing. I’m a huge fan of itself and use it a lot, but I find JQuery UI to be less valuable. It seems over-engineered for what people use it for.
What I’ve found with JQuery UI sometimes is that people use it because it promises a lot of capability with not very much coding effort. But the challenge comes when there is debugging to do or when you want functionality that is not ‘out of the box’.
I had a customer very recently that brought me in to address some issues getting a complicated form to work on a project that used a lot of JQuery UI components. They had used these components and then tried to extend them because the functionality they wanted wasn’t exactly ‘out of the box’. It ended up being very complicated to debug and it took me close to a day to trace one of the defects back into the JQuery UI component itself — it was placing random extra elements in the DOM on the browser and causing some things to not work.
Debugging complicated JavaScript issues in the browser is more complicated than tracing rails exceptions on the server side.
, on the other hand, is a much simpler framework to use. Basically the views are very simple and styling and layout is determined through css. If you need any dynamic features on the form you can implement them using straight JQuery — which gives you a wealth of capability. Trying to add JQuery functions on top of JQuery UI components is much more complicated to debug.
Here’s a on ‘simple_form’ – that’s a good place to start. It’s getting to become the most widely accepted way to do form processing for rails.
All this being said, using JQuery UI for to implement components of a view that aren’t related to forms processing may be the best way to go. - Full Post
Open Source Developers Are Rock Stars!
Well, that never happened. Instead I went to college and spent more time in the computer center than I did at parties. The only thing I cranked out was code. Later, I got a job writing software and I’ve been working with computers ever since.
While I still listen to a lot of music and have Gigs of tunes on my iPod, my dreams of being a rock star have faded. I still think about them once in a while, but more than that, I now think about open source. So do a bunch of my friends – we talk about it all the time.
I met a guy at the Softpro computer book store off Route 128 in Burlington, MA, a while ago. (I hang out there now instead of the record shop.) He writes financial applications for a mutual fund company in Boston. All he wanted to talk about was JBoss. He’d spent some time working on the JMS implementation but had gotten too busy to continue. He wanted to get back involved as soon as he could. All those people who were building the latest JBoss – he wanted to be one of them.
In his eyes I saw the same stars I used to have. I used to think that way about Robert Plant and Jimmy Page. I wanted to be one of them. When I was younger, I ran out to buy the latest Led Zeppelin album – now I run out to get the latest build of Gentoo or Hula.
Open source developers are the rock stars of the software world. The parallels actually go pretty far. You can say they don’t get the money and fame, but I think you’re wrong. The average open source developer probably makes more at his or her job than most local musicians make. I’ve met open source developers who have founded software companies and are doing pretty well financially. As far as fame goes, they may not do quite as well as real rock stars but some do pretty well; Linus Torvalds is fairly famous, but I guess not like Kurt Cobain.
They’re also usually the most talented developers. Rock stars get where they are in the music world by being great musicians; open source rock stars get where they are by writing great code.
Naming their projects is a lot like naming their bands. When you hear people talking about Subversion, Ethereal, or Excalibur (all open source projects), it’s hard to tell if they mean software projects or rock bands.
A good friend of mine called me once and went on for 30 minutes about how he was submitting a patch to the Jakarta Struts project (a JSP framework from the Apache Software Foundation). His patch would allow you to define validations for one input field based on the value of some other field (e.g., if you fill in a last name, make sure you fill out a first name…). He was totally excited about it and went into all the details of how he built it.
After he was done telling me about it, he was almost out of breath. I reached in my pocket, pulled out a lighter, and stood there holding it lit in the air.
Leave it all on the stage. - Full Post
What is a fair salary for a technical co-founder in a startup?
If you’re going to be a co-founder and receive equity on par with the other co-founders, it seems appropriate that you should receive income on par with them as well.
In other words, it depends on how much cash is available. ‘Co-founders’ that get significant ownership should receive similar ‘salaries’ initially.
So rather than think of things in terms of how much of a discount against salary you should ask for, I think it would be more appropriate to think in terms of what you bring to the table — and what the others are bringing. Then, see what cash is available for you all to share.
If you want more cash than others, then you should be prepared to get less equity. Some technical co-founders take no salary at all in return for more equity.
Co-founders that bring money to the table in addition to time would be right to ask for a greater equity stake. - Full Post
Question: Should I plan for the future? Or focus on what I need to do today? Answer: Yes.
The challenge is that thinking 3 steps ahead too often will get you into trouble as you can lose site of the things you need to execute on today.
I’ve always said the hardest thing in business (especially in a startup) is to ‘execute effectively today while also building tomorrow’. Most people have it in their nature to do one or the other.
To be really successful, you need to do both. At the same time. - Full Post
Overriding the OmniAuth callback url for twitter or facebook oath processing.
I’m using it for some work I’m doing with a client of mine ( – a great little eco-startup) and ran into an issue with how it created callback url’s — the url where the user is redirected after the Oauth authentication is completed.
The issue was with the way our web listeners are proxied back to the rails application servers. Behind the scenes, the rails application servers have a host name of something that’s not really a valid domain name (say, something like ‘railsserver’).
Omniauth was grabbing this value from the request object and forwarding our users back to an Oauth callback url like ‘http://railsservers/auth/twitter/…’. Obviously, this isn’t what we wanted — the Oauth callbacks were failing.
After digging through the Omniauth code, I ran across the offending piece of code:
def full_host
case OmniAuth.config.full_host
when String
OmniAuth.config.full_host
when Proc
OmniAuth.config.full_host.call(env)
else
uri = URI.parse(request.url.gsub(/\?.*$/,''))
uri.path = ''
uri.query = nil
uri.to_s
end
end
Basically, if this config paramerter :full_host isn’t set to either a string or a proc, omniauth pulls the uri from the request object — this is where it was messing up.
Since the Omniauth config object is a singleton, I just set that parameter in config/initializers/omniauth.rb like so:
(in config/initializers/omniauth.rb)
# Set the default hostname for omniauth to send callbacks to.
OmniAuth.config.full_host = "http://practicallygreen.com"
With this, the full_host param is a string and now the redirects are always created to come back to where we want. - Full Post
ASP.NET Web Application Development – The Open Source Way
Friday, July 5, 2013
MetaCasts.tv
Weekly screencasts focusing on Ruby, Rails, iOS, JavaScript, CoffeeScript, and other development technologies.- Full Post
The Enterprise System Spectator: SAP's Emerging Cloud Platform ...
Netweaver Cloud does not use a proprietary language, like Salesforce.com's APEX. Use of public development languages, such as Java and Ruby facilitates adoption by developers and also works against lock-in to a single ...- Full Post
Groupon Acquires Ruby on Rails Software Development Firm Obtiva ...
Earlier today Julie Mossler, Groupon's director of communications, announced via the company's blog that Groupon had acquired Chicago-based Obtiva, a Ruby on Rails software development firm. We've been working side-by-side with our ...- Full Post
PaaS and Java EE : An Overview of Different Cloud Solutions
VMware Cloud Foundry. Cloud Foundry supports the following application development framework: Spring, Ruby on Rails, Ruby and Sinatra, Node.js. This application is designed specifically for an application server, but it can be very ...- Full Post
The future of Web development isn’t MVC, it’s MVM
When Ruby on Rails hit the Web development world in 2005, it changed everything practically overnight by bringing a pattern rooted in Smalltalk to the Web. I’ve been playing with the recently...- Full Post
KidsRuby 1.0 Released
Ruby and Python are both excellent choices for a first programming language. Both languages are mature and well-designed, with strong support communities. And best of all, both languages are used by “real” programmers, so any work your kids do with the languages has potential long-term value in school and beyond. In terms of a good starting point for Ruby, it’s worth noting that the Ruby community has recently released KidsRuby, a development environment specifically geared toward kids
- Full PostBuilding an Ember app with RailsAPI
DockYard is consultancy for hire based in Boston, MA. We specialize in Ruby on Rails development, web development, mobile development, software development, and mobile web development for startups and enterprise.- Full Post
Hackers exploit Ruby on Rails vulnerability to compromise servers, create botnet
Hackers are actively exploiting a critical vulnerability in the Ruby on Rails Web application development framework in order to compromise Web servers and create a botnet.- Full Post
Introducing Ember-EasyForm
DockYard is a Ruby on Rails, PostgreSQL, and, Ember.js, web / mobile application development software consultancy based in Boston, MA.- Full Post
RubySource
RubySource | Fresh thinking for Ruby on Rails Development. Learn - Ruby Tutorials, Rails Migration, Ruby Gems, Test Driven Development - TDD and much more- Full Post
Ruby on Rails Tutorial: Learn Rails by Example
Ruby on Rails Tutorial: Learn Rails by Example by Michael Hartl teaches web development with Ruby on Rails. Rails Tutorial is fully up-to-date with Rails 3.0.- Full Post
RubySource
RubySource | Fresh thinking for Ruby on Rails Development. Learn - Ruby Tutorials, Rails Migration, Ruby Gems, Test Driven Development - TDD and much more- Full Post
RubySource
RubySource | Fresh thinking for Ruby on Rails Development. Learn - Ruby Tutorials, Rails Migration, Ruby Gems, Test Driven Development - TDD and much more- Full Post
@okokillgo Teach Like You Don't Know: HELM (Helping Everybody Learn More)
I’m learning again; two years ago I was learning carpentry and two years before that I was learning mechanics. Now I’m learning to code. I’m in a bootcamp program for ruby development, where I’m constantly aware of the fact that all the knowledge I need is surrounding me. The only problem is that it’s stuck in other people’s heads...."...
- Full PostOrganic Development
"name": "OrganicDevelopment",
"version": "0.0.0",
"description": "Organic development",
"dependencies": {
"organic": "0.0.11"
},
"author": "Your Name Here"
}
Run npm install in the same directory and the manager will download the necessary files. The core of Organic is actually pretty small. It contains only the definition of the main elements – Cell, Nucleus, Membrane, Plasma, Organelle, Chemical, and DNA. Of course it comes with a few tests, but it’s a small package overall. This helps in making it easy to learn and start developing with almost immediately.The ExampleFor this article I decided to create a simple web site using only the core of Organic. The source code can be downloaded at the top of this article, if you’d like to follow along. I think that this sample application is the best way to present this new pattern. The site contains two pages – Home and About. Here’s a screenshot of the site: The app contains two buttons linking to the two different pages. The About page has just a little bit more text than the Home page does. Simple enough, but let’s see what’s behind the curtains. Here’s a diagram displaying the basic request flow of our application: The user sends a request to our NodeJs application. The Server accepts the request and sends it to the Router. After that, the Render knows which page should be used and returns an answer to the Server. At the end, the response is then sent to the user.There is one additional element, Data Providers, which prepares the needed CSS or JavaScript for the Render (keep in mind that in our example app I didn’t use JavaScript, there is only a CSS module).Here’s what our app would look like as a Cell, in Organic: In the Cell, we have a membrane which keeps the internal elements away from the outside world. Inside of this membrane is where we’ll put our first organel, our Server, because this is where data can either enter or leave our application. The other organelles (Router, Render, and CSS) are placed in the plasma. All of these modules are communicating with each other via chemicals (request, page and css, marked in red). The Server emits a request chemical. The Router emits a page and the CSS organel sends the css. I should also mention that the plasma acts as an event bus for the chemicals. Organelles listen for a particular chemical and if found, they react on it.Here’s another request flow diagram, but this time with the chemicals that are emitted (marked in red): Now if this concept is still unclear to you, don’t worry, as we proceed through the next few sections and get into the actual code, it should begin to make more sense!DNA Everything starts with the DNA (Deoxyribonucleic acid), which you can think of as a Cells configuration. This DNA is where you will define your organelles and their settings.Let’s create a new index.js file and put in the following code:var DNA = require("organic").DNA;
var Cell = require("organic").Cell;
var dna = new DNA({
membrane: {
Server: {
source: "membrane.Server"
}
},
plasma: {
Router: {
source: "plasma.Router"
},
CSS: {
source: "plasma.CSS",
file: "./css/styles.css"
},
Render: {
source: "plasma.Render",
templates: "./tpl/"
}
}
});
var cell = new Cell(dna);
The above code is just a definition for the DNA and Cell initialization. You can see we’ve placed our Server in the membrane and the Router, CSS, and Render in the plasma, as we discussed in the last section. The source property is actually mandatory and contains the path to your individual organelles.Keep in mind that the file property in the CSS organel and the templates property in the Render organel are actually custom properties, which I set. You can add whatever customization you need in here as well.And just for your reference, the directory structure for your app should look like this:/css
/styles.css
/membrane
/Server.js
/node_modules
/plasma
/CSS.js
/Render.js
/Router.js
/tpl
A Basic Organelvar Chemical = require("organic").Chemical;
var Organel = require("organic").Organel;
var util = require("util");
module.exports = function YourOrganelName(plasma, config) {
Organel.call(this, plasma);
// your custom logic here
}
util.inherits(module.exports, Organel);
The above code shows the basic format for creating an organel. If you want to use this.emit or this.on you’ll need to make sure to inherit Organel as we did above. And actually, the plasma parameter variable has those exact same methods (emit and on), so you could use plasma directly and skip the inheritance if you wanted.Also, notice the config parameter; This is the object that you defined in your DNA, which is a good place for any of your custom configuration.The ServerThe Server is your main organel, which accepts requests and sends responses to the browser. Here’s how your Server organel should look:var port = 3000;
module.exports = function Server(plasma, config) {
Organel.call(this, plasma);
var self = this;
http.createServer(function(req, res) {
console.log("request " + req.url);
self.emit(new Chemical({
type: "request",
req: req
}), function(html) {
res.writeHead(200);
res.end(html);
});
}).listen(port, '127.0.0.1');
console.log('Server running at http://127.0.0.1:' + port + '/');
}
Two things are happening here. The first one is the definition of the NodeJS server, which of course has a handler accepting request (req) and response (res) objects. Once the request is received, the Server organel sends a chemical, with the type request, notifying the rest of the organelles. It also attaches the req object, so whoever needs more information about the incoming request can access data from the chemical directly.The emit method then takes a second argument which is a callback function. You can use this to return the flow back to the organel, which sends the chemical. I.e. once the Render finishes its job, it calls the Server’s callback. It takes the produced HTML and by using the res object sends the page to the user.The RouterFor our next organel, the Router just listens for a request chemical, which is sent by the Server. It gets the URL from the req object and decides which page should be shown. Here’s the code for the Router:module.exports = function Router(plasma, config) {
Organel.call(this, plasma);
var self = this;
this.on("request", function(chemical, sender, callback) {
var page = chemical.req.url.substr(1, chemical.req.url.length);
page = page == "" || page == "/" ? "home" : page;
self.emit(new Chemical({
type: "page",
page: page,
ready: callback
}));
});
}
Now, the router itself just emits a new chemical with a type of page. Keep in mind, there are two other organels listening for this chemical as well, but by default, it’s not transfered to all of the other elements in the plasma. Of course, there may be times when you will need such functionality. To do so, you just need to return false; in the chemical’s listener. We’ll see this in action in the next section.CSS Styles Providermodule.exports = function CSS(plasma, config) {
Organel.call(this, plasma);
var cssStyles = fs.readFileSync(config.file).toString();
var self = this;
this.on("page", function(chemical) {
self.emit(new Chemical({
type: "css",
value: cssStyles
}));
return false;
});
}
This module is just a simple one-task organel which gets the path to the .css file, reads it, and later emits a chemical containing the actual CSS styles. Also, pay attention to the return false; statement at the bottom. As I said from the last section, it’s important to do this, otherwise the Render will not receive the page chemical sent by the Router. This happens because the CSS organel is defined before the Render in the DNA.The RenderAnd lastly, here’s the code for our Render organel:module.exports = function Render(plasma, config) {
Organel.call(this, plasma);
var getTemplate = function(file, callback) {
return fs.readFileSync(config.templates + file);
}
var formatTemplate = function(html, templateVars) {
for(var name in templateVars) {
html = html.replace("{" + name + "}", templateVars[name]);
}
return html;
}
var templates = {
layout: getTemplate("layout.html").toString(),
home: getTemplate("home.html").toString(),
about: getTemplate("about.html").toString(),
notFound: getTemplate("notFound.html").toString()
}
var vars = {};
var self = this;
this.on("css", function(chemical) {
vars.css = chemical.value;
});
this.on("page", function(chemical) {
console.log("Opening " + chemical.page + " page.");
var html = templates[chemical.page] ? templates[chemical.page] : templates.notFound;
html = formatTemplate(templates.layout, {content: html});
html = formatTemplate(html, vars);
chemical.ready(html);
});
}
There are two helper methods here: getTemplate and formatTemplate which implement a simple template engine for loading an external HTML file and replacing mustache-style variables. All of the templates are stored in an object for quick access. Afterwards we have just a few lines for HTML formatting and then everything is ready to go. The Render organel also listens for the css chemical and lastly the application provides a notFound 404 page, if needed.So here’s what the final app’s directory structure looks like:/css
/styles.css
/membrane
/Server.js
/node_modules
/plasma
/CSS.js
/Render.js
/Router.js
/tpl
/about.html
/home.html
/layout.html
/notFound.html
Running the ApplicationSimply run node index.js in the console and you should see something similar to this: With your server running, you should now be able to visit http://127.0.0.1:3000 in your favorite browser. Try clicking on the links to switch between the two pages a few times and then go back to your console to view the output. You should see a nice report about the applications recent activity. Now you may also notice something else in the console:request /favicon.ico
Opening favicon.ico page.
You can see that there is one more request coming from the browser. It wants to load favicon.ico. However our little site doesn’t have such an icon, so it just opens the 404 page. You can try this for yourself by visiting: http://127.0.0.1:3000/favicon.ico.If you’d like to check out the full source code for this tutorial, you can download it using the download link at the top of this page.ConclusionIn my opinion, Organic is a great concept. It’s very flexible and encourages producing better applications. Keep in mind that the example in this article is based on my personal experience with other design patterns. So my use of terms like Router, Data Provider or Render is completely optional and you can change the names as you see fit. Feel free to experiment by creating new modules based on Organic and let me know what you think in the comments!The core of Organic is developed by and and I strongly recommend that you check them out on Github. If you are interested in using Organic, you will find things like and really helpful as well.