• Home

  • Custom Ecommerce
  • Application Development
  • Database Consulting
  • Cloud Hosting
  • Systems Integration
  • Legacy Business Systems
  • Security & Compliance
  • GIS

  • Expertise

  • About Us
  • Our Team
  • Clients
  • Blog
  • Careers

  • VisionPort

  • Contact
  • SeniorNet

    Jeff Boes

    By Jeff Boes
    June 7, 2011

    SeniorNet is an organization dedicated to bringing education and technology access to older adults (50+). I began volunteering with them recently, coaching an intermediate Windows class. My role is to shadow half the class, watching for anyone who gets “stuck” or goes astray, as the instructor leads them through basic operations such as formatting text, creating spreadsheets, and so on.

    I started this as a way to give back to the community, and to explore things I might want to do later in my career (namely, teach), but I’m finding that this is giving me some unexpected insights in design (visual and functional) for less-experienced computer users. I’m sure there are lots and lots of formal studies on how over-50ers learn to use computers vs. under-20ers, but there’s nothing like seeing it first-hand. I’ve already started mulling over how this new insight might affect the way I structured an on-line application (e.g., an e-commerce checkout) that would cater to an older audience. And while I don’t have any answers there, I feel better (and humble) for having begun the process, even at this late date.*

    *I’m among the very oldest, if not the actual oldest of the End Point crew, …


    community

    Using Set Operators with Ruby Arrays

    Mike Farmer

    By Mike Farmer
    June 7, 2011

    The Array class in Ruby has many methods that are extremely useful. I frequently find myself going to the RDoc just to review the different methods and keeping myself up-to-speed on what options are available for manipulating my data using the native methods. Often, I find that there is already a method that exists that can simplify a big chunk of code that I wrote that was confusing and complex.

    In a recent project, I needed a way to handle a complex user interface problem that was caused by a many-to-many (has-and-belongs-to-many) database model. The solution that I came up with was an amazingly simple implementation for a problem that could have involved writing some very convoluted and complex algorithms that would have muddied my code and required me to write extensive tests. As it turns out, I had just read up on Array set operators (Ruby methods) and the solution became easier and monumentally more eloquent.

    Introducing the Union, Difference, and Intersection

    Since Arrays essentially act as a set[1], they can be manipulated using the set operations union, difference, and intersection. If you go do the Array rdoc, however, you’ll notice no methods with these names. So here is …


    ruby rails

    Bucardo multi-master for PostgreSQL

    Greg Sabino Mullane

    By Greg Sabino Mullane
    June 6, 2011

    The original Bucardo

    The next version of Bucardo, a replication system for Postgres, is almost complete. The scope of the changes required a major version bump, so this Bucardo will start at version 5.0.0. Much of the innards was rewritten, with the following goals:

    Multi-master support

    Where “multi” means “as many as you want”! There are no more pushdelta (master to slaves) or swap (master to master) syncs: there is simply one sync where you tell it which databases to use, and what role they play. See examples below.

    Ease of use

    The bucardo program (previously known as ‘bucardo_ctl’) has been greatly improved, making all the administrative tasks such as adding tables, creating syncs, etc. much easier.

    Performance

    Much of the underlying architecture was improved, and sometimes rewritten, to make things go much faster. Most striking is the difference between the old multi-master “swap syncs” and the new method, which has been described as “orders of magnitudes” faster by early testers. We use async database calls whenever possible, and no longer have the bottleneck of a single large bucardo_delta table.

    Improved logging

    Not only are more details provided, there is now the ability …


    bucardo database open-source perl postgres sql

    Paperclip in Spree: Extending Product Image Sizes

    Steph Skardal

    By Steph Skardal
    June 6, 2011

    Spree uses the popular gem Paperclip for assigning images as attachments to products. The basic installation requires you to install the gem, create a migration to store the paperclip-specific fields in your model, add the has_attached_file information to the model with the attachment, add the ability to upload the file, and display the file in a view. In Spree, the Image model has an attached file with the following properties:

    class Image < Asset
      ...
      has_attached_file :attachment,
                        :styles => { :mini => '48x48>',
                          :small => '100x100>',
                          :product => '240x240>',
                          :large => '600x600>'
                        },
                        :default_style => :product,
                        :url => "/assets/products/:id/:style/:basename.:extension",
                        :path => ":rails_root/public/assets/products/:id/:style/:basename.:extension"
      ...
    end

    As you can see, when an admin uploads an image, four image sizes are created: large, product, small, and mini.


    Four images are created per product image uploaded in Spree …


    ecommerce graphics spree

    Saving time with generate_series()

    Josh Tolley

    By Josh Tolley
    May 31, 2011

    I was giving a presentation once on various SQL constructs, and, borrowing an analogy I’d seen elsewhere, described PostgreSQL’s generate_series() function as something you might use in places where, in some other language, you’d use a FOR loop. One attendee asked, “So, why would you ever want a FOR loop in a SQL query?” A fair question, and one that I answered using examples later in the presentation. Another such example showed up recently on a client’s system where the ORM was trying to be helpful, and chose a really bad query to do it.

    The application in question was trying to display a list of records, and allow the user to search through them, modify them, filter them, etc. Since the ORM knew users might filter on a date-based field, it wanted to present a list of years containing valid records. So it did this:

    SELECT DISTINCT DATE_TRUNC('year', some_date_field) FROM some_table;

    In fairness to the ORM, this query wouldn’t be so bad if some_table only had a few hundred or thousand rows. But in our case it has several tens of millions. This query results in a sequential scan of each of those records, in order to build a list of, as it turns out, about fifty total …


    postgres sql

    Postgres Bug Tracking - Help Wanted!

    Greg Sabino Mullane

    By Greg Sabino Mullane
    May 29, 2011

    Once again there is talk in the Postgres community about adopting the use of a bug tracker. The latest thread, on pgsql-hackers, was started by someone asking about the status of their patch. Or rather, asking an even better meta-question about how one finds out the status of a PostgreSQL bug report or patch. Sadly, the answer is that there is no standard way, other than sending emails until someone replies one way or another. The current process works something like this:

    1. Someone finds a bug1. They send an email to pgsql-bugs@postgresql.org OR they use the web form, which grabs a sequential number and mails the report to pgsql-bugs@postgresql.org. Nothing else is done/stored, it just sends the email.1. Someone replies about the bug OR nobody replies about the bug.1. After a fix is found, which may involve some emails on other mailing lists, someone replies that the bug is fixed on the original thread. Maybe.

    As you can see, there is some room for improvement there. Some of the most major and glaring holes in the current system:

    • No way to search previous / existing bugs
    • No way to tell the status of a bug
    • No way to categorize and group bugs (per version, per platform, per …

    community database open-source postgres

    End Point to be at Internet Retailer 2011

    Steph Skardal

    By Steph Skardal
    May 27, 2011

    We’re excited to announce that End Point will be in full force at Internet Retailer 2011. A team of six (Rick, Ben, Jon, Ron, Carl, and myself) will be managing a booth during the 3 day Conference and Exhibition in San Diego from June 14th-17th.

    End Point services banner

    We’re hoping to reach out to future clients to discuss our services including ecommerce develpoment and support, database development and support, systems architecture, hosting, and Liquid Galaxy build, maintenance and support. We’ll also have a Liquid Galaxy display to show off as part of our exhibit. We have a couple of conference passes so hopefully we’ll attend a few sessions and share some details about those sessions here on our blog!

    Liquid Galaxy

    Please come by our booth at the conference to meet us or to say hi! We’re excited to talk to you about what we can do to help your business succeed.


    company conference ecommerce visionport

    Spree Performance Benchmarking

    Steph Skardal

    By Steph Skardal
    May 25, 2011

    I see a lot of questions regarding Spree performance in the spree-user group, but they are rarely answered with metrics. I put together a quick script using the generic benchmark tool ab to review some data. Obviously, the answer to how well a site performs and scales is highly dependent on the host and the consumption of the web application, so the data here needs to be taken with a grain of salt. Another thing to note is that only two of the following use cases are running on Rails 3.0 — many of our current Spree clients are on Spree 0.11.2 or older. I also included one non-Spree Rails ecommerce application, in addition to a few non-Rails applications for comparison. All of the tests were run from my home network, so in theory there shouldn’t be bias on performance tests for sites running on End Point servers.

    ab -n 100
    -c 2 homepage -c 20 homepage -c 2
    product page
    -c 20
    product page
    Client #1
    Spree: 0.11.2
    Hosting: 4 cores, 512 GB RAM
    DB: MySQL
    # Products: <100
    7.49 24.75 6.49 19.87 Requests per second
    266.889808.041307.9971006.552 Time per request (ms)
    Client #2
    Spree 0.11.2
    Hosting: Engineyard, medium instance
    DB: MySQL …

    interchange performance rails scalability spree magento
    Previous page • Page 165 of 223 • Next page