<?xml version="1.0" encoding="utf-8" standalone="yes"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title></title>
  <subtitle></subtitle>
  <id>https://www.endpointdev.com/blog/tags/community/</id>
  <link href="https://www.endpointdev.com/blog/tags/community/"/>
  <link href="https://www.endpointdev.com/blog/tags/community/" rel="self"/>
  <updated>2024-12-23T00:00:00+00:00</updated>
  <author>
    <name>End Point Dev</name>
  </author>
  
    <entry>
      <title>Studying “The Mythical Man-Month” in Collaboration with a Client</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2024/12/studying-the-mythical-man-month/"/>
      <id>https://www.endpointdev.com/blog/2024/12/studying-the-mythical-man-month/</id>
      <published>2024-12-23T00:00:00+00:00</published>
      <author>
        <name>TJ Christofferson</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2024/12/studying-the-mythical-man-month/study-group-video-call.webp&#34; alt=&#34;Fourteen End Pointers and Cybergenetics team members in a videoconference meeting&#34;&gt;&lt;/p&gt;
&lt;!-- Image used with permission from Cybergenetics --&gt;
&lt;p&gt;Here at End Point we did an enlightening and fun eleven-week study group in collaboration with one of our clients. We worked through Frederick Brooks Jr.’s book The Mythical Man-Month: Essays on Software Engineering, which was originally published in 1975, with an expanded edition published in 1995. In certain ways this book is still applicable to our time, and it was a delight to discuss it in a structured study group with coworkers and peers. This particular study group even piqued the curiosity of the owners of both our companies who participated throughout the course!&lt;/p&gt;
&lt;p&gt;As part of our effort to continually improve our abilities and awareness, and thus build a strong technical company culture, End Point has done many study groups over the years, such as the &lt;a href=&#34;/blog/2016/08/ruby-fight-club/&#34;&gt;Ruby Fight Club&lt;/a&gt; and the &lt;a href=&#34;/blog/2019/07/tribute-to-kyle-simpsons-book-series/&#34;&gt;You Don&amp;rsquo;t Know JS study group&lt;/a&gt;. Participation in these groups is voluntary, and they have covered a range of other topics including PostgreSQL, terminal fluency skills, and regular expressions. The opportunity to step away from regular work duties for an hour during the week, and to have meaningful discourse between coworkers has been invaluable for building relationships across teams.&lt;/p&gt;
&lt;p&gt;For this group, we collaborated with our client &lt;a href=&#34;https://www.cybgen.com/&#34;&gt;Cybergenetics&lt;/a&gt;, who works in forensic DNA analysis. We have been working with Cybergenetics since 2003 on PostgreSQL, websites, system deployment automation, and security. A few Cybergenetics staff members joined our PostgreSQL study group some years ago.&lt;/p&gt;
&lt;p&gt;Dr. Mark Perlin, the Chief Scientific and Executive Officer of Cybergenetics, approached us a few months earlier with the desire for his team to better understand the history and controversies of software engineering, and to relate relevant topics to software user or developer experiences. He thought working together through this book would be a good way to achieve both those goals, and we agreed.&lt;/p&gt;
&lt;p&gt;Fred Brooks’s book on software engineering and project management has a central theme that adding more people to a software project that is behind schedule usually delays it even longer, a concept known as “Brooks’s Law.” Each chapter covers various reasons why this is the case, such as increased communication complexity and overhead, conceptual integrity, and design cohesion degradation. He posits that properly planning projects, including using realistic estimations and considering communication needs, is essential to avoid delays.&lt;/p&gt;
&lt;p&gt;Though not all of us found significant modern application for Brooks’s book, it was an interesting historical read, with some relevant points. One such point is his idea that looking forward to some “silver bullet” solution wastes effort and inhibits forward progress. Today, when some are counting on AI technology to magically fix their code, remove the need to properly document that code, or erase the discipline of software development altogether, it seems wise to apply Brooks’s advice and avoid treating AI and similar advances as a “silver bullet.”&lt;/p&gt;
&lt;p&gt;At End Point we love encouraging thought and discussion on relevant topics, and we appreciate having a historical awareness of what we&amp;rsquo;re doing in the context of decades. We also love an opportunity to collaborate with a client on something that is mutually beneficial.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>A Career Talk for 1st Graders</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2019/12/1st-grade-career-talk/"/>
      <id>https://www.endpointdev.com/blog/2019/12/1st-grade-career-talk/</id>
      <published>2019-12-06T00:00:00+00:00</published>
      <author>
        <name>Steph Skardal</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2019/12/1st-grade-career-talk/steph.jpg&#34; alt=&#34;Steph giving a career talk&#34;&gt;
Giving a Career Talk to 1st Graders&lt;/p&gt;
&lt;p&gt;This week, I gave a career talk to my daughter’s 1st grade class and I talked about my job as a software engineer. I started with &lt;a href=&#34;https://www.youtube.com/watch?v=Ct-lOOUqmyY&#34;&gt;this video&lt;/a&gt;, which depicts two kids explaining to their dad how to make a peanut butter sandwich (called the “Exact Instructions Challenge”), but he takes them very literally and acts as though he has no context on how to work with peanut butter, jelly, and bread. The video got some giggles!&lt;/p&gt;
&lt;p&gt;After the video, I talked about how the video was similar to what I do: I give computers instructions, and like that silly dad, computers don’t know anything about what they are being told to do. I hope they understood the analogy!&lt;/p&gt;
&lt;h3 id=&#34;i-have-5-alexas&#34;&gt;I have 5 Alexas!&lt;/h3&gt;
&lt;p&gt;We talked about what a computer is and how we all have a lot of computers at our house (“I have 5 Alexas at my house!”, “I have a PS4!”, “I have a PS2!”), even some that can turn the lights on and off now. I didn’t show them code because I didn’t think it would mean much to them, but a couple of the kids in the class had worked on kid-friendly coding projects.&lt;/p&gt;
&lt;p&gt;I talked a little bit about my education (1st graders aren’t quite sure what this “college” thing is), and how I work from home. We talked about how I problem-solve, just like they do — right before the talk started, their teacher asked them to problem-solve so that everyone could have a chair! I explained that sometimes I problem-solve and figure out what the fastest way to do something is, or what another solution might be, but it might last longer. We also talked about how communication (reading and writing) are important in my job, so they should keep working on that!&lt;/p&gt;
&lt;h3 id=&#34;qa&#34;&gt;Q&amp;amp;A&lt;/h3&gt;
&lt;p&gt;The best part of the talk was Q&amp;amp;A, because I was able to understand what was in their big kid brains! Here are some of the questions I fielded:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do you give computers instructions in 1s and 0s? How do you do that? How do computers understand 1s and 0s? &lt;em&gt;I tried to explain this a little bit by talking about different languages (a couple of the kids speak additional languages), but I think I failed on that front. :shrug:&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Do you spend “like all the time on computers”? Or “all the time staring at a computer ALL DAY”?!!&lt;/li&gt;
&lt;li&gt;Do you stop hackers trying to get into computers? How do you stop hackers? &lt;em&gt;I explained that I had to think about how hackers might try to work and ways to stop them, and made an analogy that it’s like locking the door to keep your little sister out of your room.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;How many hours a day do you work? &lt;em&gt;I explained that right now I work half-time, but that before Astrid (my 1st grader in the class) was born, I worked 8 hours per day, like many of their parents might do now.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Do you find bugs in code? &lt;em&gt;I answered that we call it “debugging”, and they knew what that meant because they use that terminology in library! I also said I squashed bugs, and they thought that was hilarious.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall, it was a fun experience! A couple of the kids at the end said that, “they still didn’t understand what [I do]”. I hope I added to their huge kid imaginations in answering questions about hackers and binary code and encouraged them to problem solve in the future!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Volunteer While You Work From Home</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2019/02/volunteer-while-you-work-from-home/"/>
      <id>https://www.endpointdev.com/blog/2019/02/volunteer-while-you-work-from-home/</id>
      <published>2019-02-15T00:00:00+00:00</published>
      <author>
        <name>Elizabeth Garrett Christensen</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2019/02/volunteer-while-you-work-from-home/image-1.jpg&#34; alt=&#34;two puppies sitting on a couch&#34;&gt;&lt;/p&gt;
&lt;p&gt;I’ve always been an animal lover. I’ve currently got a dog, two cats, bees, and a flock of chickens in my tiny suburban home and I would get more if I could. Over the past few years I’ve taken up an interest in fostering animals through our local animal shelter. Above are our current fosters, two St. Bernard mix parvo pups.&lt;/p&gt;
&lt;p&gt;I’m always looking for opportunities to do something in the community but as a busy mom with a full-​time job, it can be difficult to fit volunteering into your schedule. What I’ve discovered is that animal fostering is a great volunteer job for someone that works from home.&lt;/p&gt;
&lt;h3 id=&#34;how-does-it-work&#34;&gt;How Does It Work?&lt;/h3&gt;
&lt;p&gt;Our local shelter has a list of foster volunteers who’ve completed their application process and requisite trainings. When they have an animal or group of animals that needs to be out of the shelter for a certain amount of time, they email everyone with a description of the foster. You review the information and decide if you’re a good fit.&lt;/p&gt;
&lt;p&gt;We’re very lucky in that our local humane society provides all the food, bedding, medicine, and instruction you need. Your job is to take care of the animal or litter, report back to the shelter as needed, and return the animal when it is ready to be adopted by the community at large.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/blog/2019/02/volunteer-while-you-work-from-home/image-2.jpg&#34; /&gt;&lt;br&gt;&lt;small&gt;These two parvo puppies came to stay with us. Parvo is very contagious and affected animals have to be cared for outside the shelter for the other animals’ safety.&lt;/small&gt;&lt;/p&gt;
&lt;h3 id=&#34;snuggle-breaks&#34;&gt;Snuggle Breaks&lt;/h3&gt;
&lt;p&gt;Animal fostering is a really nice way to give yourself breaks during the day. When I worked in the office, I always liked to make the rounds to the water cooler and chat with coworkers. Having animals around can help you combat some of the isolation and loneliness that comes from a solo remote office.&lt;/p&gt;
&lt;p&gt;Just a few minutes of petting a kitten or playing fetch in your backyard with a bored pup is a nice break from work and can help you recharge your brain juices to tackle the next item on your to-do list.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/blog/2019/02/volunteer-while-you-work-from-home/image-0.jpg&#34; /&gt;&lt;br&gt;&lt;small&gt;This older bonded pair of dogs came to stay with us over the holidays when the shelter was overcrowded with other pets. They were such sweethearts and found a home just before Christmas.&lt;/small&gt;&lt;/p&gt;
&lt;h3 id=&#34;around-the-clock-attention&#34;&gt;Around-​the-​Clock Attention&lt;/h3&gt;
&lt;p&gt;Most of the foster animals need round-​the-​clock attention. Small bottle-​fed kittens need to be fed every few hours. Puppies need breaks for the bathroom, time playing, and need to be in and out of their kennel frequently. I’m already home all the time, so attention at various times of day is no big deal for me.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/blog/2019/02/volunteer-while-you-work-from-home/image-3.jpg&#34; /&gt;&lt;br&gt;&lt;small&gt;These itty bitties are one of several batches of foster kittens we’ve had. They all come underweight and shy and leave just when they’re big, healthy, and driving us nuts!&lt;/small&gt;&lt;/p&gt;
&lt;h3 id=&#34;schedule-it-around-your-own-time&#34;&gt;Schedule It Around Your Own Time&lt;/h3&gt;
&lt;p&gt;One thing I really like about animal fostering is the pace. There’s really only a commitment for each animal or set of animals that you take on for a few days or few weeks. If you’ve got a big work project to focus on, or can’t handle fostering for a few weeks, just take a break until a better time comes up.&lt;/p&gt;
&lt;p&gt;You do need to account for the extra time you’ll spend throughout the day with your fosters and account for a longer work day. I already take a lot of breaks and end up working on and off for about 10–11 hours. Everyone is different, but I plan for about an hour longer in my work day to take my foster breaks.&lt;/p&gt;
&lt;h3 id=&#34;do-some-good&#34;&gt;Do some good!&lt;/h3&gt;
&lt;p&gt;The end result of some of my fostering adventures has been an overwhelming sense that I’ve done some good while I was literally just working from home. I’ve also learned a ton from the vets and staff about animal health and have quite a bit more behavior experience with different types of pet personalities as well.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>How I Learn New Technologies</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2018/10/how-i-learn-new-technologies/"/>
      <id>https://www.endpointdev.com/blog/2018/10/how-i-learn-new-technologies/</id>
      <published>2018-10-30T00:00:00+00:00</published>
      <author>
        <name>Árpád Lajos</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2018/10/how-i-learn-new-technologies/image-0.jpg&#34; alt=&#34;woman typing at desk&#34; /&gt;&lt;br&gt;&lt;a href=&#34;https://www.flickr.com/photos/30478819@N08/&#34;&gt;Photo by Marco Verch&lt;/a&gt; · &lt;a href=&#34;https://www.flickr.com/photos/30478819@N08/45044053152/&#34;&gt;CC BY 2.0, modified&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If a developer has plenty of time, then the best way to learn a technology is to read a book about it, solve the tasks the book presents, and then to do some very basic work just to get some real-world experience. When this is done, one might want to watch some tutorial videos, consult with people who are either also learning, or, even better, are experienced in the given technology.&lt;/p&gt;
&lt;p&gt;When someone gets comfortable with a dev stack, the person might be inclined to prefer to work only in his or her comfort zone. In consulting, this is feasible in the majority of cases. But what if someone gets a new project in a different software stack? Is it a big problem? In my opinion, it’s not a problem, &lt;em&gt;if we are able to determine the minimal knowledge we need to get started&lt;/em&gt;. So how can a developer quickly grasp the essence of the problem space? Where are answers to the most frequent questions reachable?&lt;/p&gt;
&lt;p&gt;In 2008 I graduated from the university and was looking for a job. In the middle of the world economic crisis new programmers had limited chances at getting a job. So I began accepting very small projects from varied clients, all using vastly different technologies. To be successful at this, I realized I had to revise my method of learning technologies.&lt;/p&gt;
&lt;p&gt;I particularly remember the case when in 2009 I had a small JavaScript project and I had no knowledge whatsoever and a deadline of 24 hours, as the client needed the job done ASAP. Reading a book was not an option. Even a tutorial was too long, so after four hours of trying hard to solve the problem I watched &lt;a href=&#34;https://www.youtube.com/watch?v=v2ifWcnQs6M&#34;&gt;Douglas Crockford’s video&lt;/a&gt;. After so much suffering, his joke “Good morning, everybody, welcome to the Blair Witch project” was more than fitting about how I felt in that situation. After four hours of suffering I finally found an ally. With the help of this video I was able to grasp the &lt;strong&gt;core&lt;/strong&gt; of the knowledge I needed, that is, the information I need to be able to quickly find other information if needed. After watching the video, I completed the small project without much difficulty. Of course, it was a new language for me, but at least I had some understanding. That case taught me the importance of quickly grasping the core of the new technology I am learning.&lt;/p&gt;
&lt;p&gt;My methodology is to put the appropriate questions needed to be answered into a list. By looking at the answer of each question, I can acquire the core knowledge which allows me to work with the given technology. Of course, working with a technology one has no previous experience with takes more time in comparison with working with a technology one has years of experience with, because even the most trivial tasks might need some research, but if the core knowledge is already acquired, then 90% of the answers to the question one may have while working are easily answered.&lt;/p&gt;
&lt;h3 id=&#34;new-programming-language&#34;&gt;New Programming Language&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;What justifies the existence of the language? What is the purpose the language aims to fulfill?&lt;/li&gt;
&lt;li&gt;Where can I find the original documentation and how do I search and navigate there?&lt;/li&gt;
&lt;li&gt;Is the syntax similar to a language I already know? How are commands separated, what are the keywords one will frequently use?&lt;/li&gt;
&lt;li&gt;What type of things will I work with using the language? With CSS I define rules which specify the looks of a web page. With query languages I work with databases, relations/​tables, records, and columns. With HTML or XML I define a node hierarchy. With C I write functions. With Java I define classes and objects.&lt;/li&gt;
&lt;li&gt;What types of tasks can I expect from the projects I can work with?&lt;/li&gt;
&lt;li&gt;Can I watch a tutorial video? Watching an introductory video takes hours. Reading a book can  take weeks.&lt;/li&gt;
&lt;li&gt;What operating system should I use?&lt;/li&gt;
&lt;li&gt;What IDE should I use?&lt;/li&gt;
&lt;li&gt;Is there an online possibility to write experimental code to try my hand in this new language?&lt;/li&gt;
&lt;li&gt;Do I need to register in community forums?&lt;/li&gt;
&lt;li&gt;Do I have questions I can’t answer yet? I should  be able to find an answer on community forums or general purpose programming Q&amp;amp;A sites.&lt;/li&gt;
&lt;li&gt;Have I written a simple Hello World in the language?&lt;/li&gt;
&lt;li&gt;What will I have to watch out for?&lt;/li&gt;
&lt;li&gt;What are the best practices for coding in the given language?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;new-operating-system&#34;&gt;New Operating System&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Do I have two systems I can use, one where I can search the internet for help, and the other where I can begin experimenting on the new operating system?&lt;/li&gt;
&lt;li&gt;How to operate with files and folders?&lt;/li&gt;
&lt;li&gt;How to install/​run an application?&lt;/li&gt;
&lt;li&gt;What is the minimal knowledge I need in order to be able to work on my programming tasks?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;new-libraries-and-tools&#34;&gt;New Libraries and Tools&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Why do I need this?&lt;/li&gt;
&lt;li&gt;What are the features and use-cases I will be using?&lt;/li&gt;
&lt;li&gt;What are the names of functions/​methods I will be working with frequently?&lt;/li&gt;
&lt;li&gt;What do I need to do to use this?&lt;/li&gt;
&lt;li&gt;Is it documented?&lt;/li&gt;
&lt;li&gt;Does it have a forum?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;new-projects&#34;&gt;New Projects&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;What is the aim of the project?&lt;/li&gt;
&lt;li&gt;Are there technologies in use that I do have experience with?&lt;/li&gt;
&lt;li&gt;What are the technologies in use which I do not have experience with? Is it urgent to learn them?&lt;/li&gt;
&lt;li&gt;What are the main features of the project?&lt;/li&gt;
&lt;li&gt;What will I have to interact with first in the project?&lt;/li&gt;
&lt;li&gt;Can I play around with the project and do some experiments without being in danger of doing any harm to it?&lt;/li&gt;
&lt;li&gt;Is it documented?&lt;/li&gt;
&lt;li&gt;How am I going to work with it, what do I need to download/​install, and what networks am I going to access?&lt;/li&gt;
&lt;li&gt;How is the personality of the client affecting the working relationship? Am I going to have an easy time or not in my first days?&lt;/li&gt;
&lt;li&gt;Where are the vital points of the project and can I take a look at the code there to have a vague understanding of what is being done?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;new-concepts&#34;&gt;New Concepts&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;What is the definition of the concept?&lt;/li&gt;
&lt;li&gt;Is it related to something I already know?&lt;/li&gt;
&lt;li&gt;Does it have subconcepts?&lt;/li&gt;
&lt;li&gt;Do I need to understand something complex? If so, can I find/​draw some illustrative diagrams?&lt;/li&gt;
&lt;li&gt;Can I make a fairly accurate allegory, using elements I am aware of?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;allegory&#34;&gt;Allegory&lt;/h3&gt;
&lt;p&gt;In general, if something is not understandable at all for me, or has so many elements that it will be difficult to remember them all, I construct an allegory, using concepts I am already aware of. This way, if I forget anything from my newly acquired knowledge, then I think about my allegory, which serves as a mental decryption method.&lt;/p&gt;
&lt;p&gt;For instance, when I learned about object oriented concepts, I used the allegory of set theory to understand the concepts.&lt;/p&gt;
&lt;p&gt;I viewed classes as active sets, that is, sets which might have executable methods.&lt;/p&gt;
&lt;p&gt;I viewed objects as items in a set, which, on their own have their capability to perform actions.&lt;/p&gt;
&lt;p&gt;I viewed inheritance as a subset relation.&lt;/p&gt;
&lt;p&gt;To make the allegory more or less full, I had trouble integrating abstract classes and interfaces into the allegory, but after thinking about them, I came up with a solution. I considered abstract classes as partial definitions of a set and interfaces as declarations of the sets. Since neither had a complete definition, I needed a nonabstract subset to find items to these sets.&lt;/p&gt;
&lt;p&gt;Method overloading was easily understood for me as doing something using different domains. a * b is different if both a and b are real numbers and different if they are complex, basically we do the same operations, but with different variables. I added method overriding into my allegory as an evolution of methods, or as a specialization.&lt;/p&gt;
&lt;p&gt;The allegory is not necessarily 100% analogous with the concepts to be grasped, but if its accuracy is fairly high, then it’s a good starting point. In many cases this is enough by itself, but when it’s not enough, the allegory helped me to formulate intelligent questions, which I could transform to keywords which are searchable by a search engine.&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
&lt;p&gt;I am sure I am not the only human being with bad sectors in his/​her brain. Have you ever had the experience of totally understanding something and then repeatedly forgetting an important detail, but only that detail? Luckily, we are not in a classroom where we need to reproduce accurately all the verses of a long poem. We can write notes. If I observe that I regularly forget something important, then I make notes.&lt;/p&gt;
&lt;h3 id=&#34;closing-words&#34;&gt;Closing Words&lt;/h3&gt;
&lt;p&gt;The methods I described in this article work well for me. We are all different and what works for me does not necessarily work for you and vice versa. However, I think that this approach can be personalized. If you feel that you need to do things differently in comparison to what I described here, then you are probably right, as you have a different brain and it probably does not work in the exact same way as mine.&lt;/p&gt;
&lt;p&gt;For me, when I learn, frequent short breaks are helpful, as my subconscious is working out without any effort some details which are more difficult for my conscious thinking. After I read an article, if I take a walk and breath fresh air, I tend to have deeper knowledge when I return than when I started to walk.&lt;/p&gt;
&lt;p&gt;It is possible that you need to learn in a totally different way. My words here are not carved into stone. My advice, in general is to not be afraid of new challenges and technologies. It is awesome if you add learning into your comfort zone!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Using GitHub for Blog Comments</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2017/11/using-github-for-blog-comments/"/>
      <id>https://www.endpointdev.com/blog/2017/11/using-github-for-blog-comments/</id>
      <published>2017-11-14T00:00:00+00:00</published>
      <author>
        <name>Phineas Jensen</name>
      </author>
      <content type="html">
        &lt;p&gt;Last Saturday, November 11, we rolled out a new website that we’ve been working on for a few months. Part of this update was moving from Blogger as our blogging platform to static HTML generated by &lt;a href=&#34;https://middlemanapp.com&#34;&gt;Middleman&lt;/a&gt;. We were more than happy to move away from Blogger for a variety of reasons, including its lack of HTTPS support for custom domains and how difficult it was to keep its templating and styling up to date with our main website. We were also able to move from blog.endpoint.com to www.endpoint.com/blog.&lt;/p&gt;
&lt;p&gt;The most obvious thing that is missing from Middleman’s blog extension is the lack of a commenting system. After exploring some options for comments, we settled on using GitHub issues and comments, inspired by &lt;a href=&#34;http://donw.io/post/github-comments/&#34;&gt;Don Williamson’s post&lt;/a&gt; about doing the same thing. It’s a bit of an unconventional approach, so this post will explain how to use our commenting system and how we implemented it.&lt;/p&gt;
&lt;p&gt;Commenting requires a GitHub account, which is easy to sign up for and free, and the general target audience of our blog will often already have a GitHub account. At the bottom of each post will be a link to a GitHub issue at the top of the list of comments, if there are any. Click on the issue, write and post your comment, and it’ll appear on the blog post when you reload the page. It’s pretty simple.&lt;/p&gt;
&lt;p&gt;Now, for the gritty details. Don’s post shows the JavaScript he uses to find the correct GitHub issue and fetch its comments, but it required a bit of modification to work in our Middleman project. First, we needed a way to get the right GitHub issue number. Don’s example has that worked into the JavaScript with Hugo, fetching it from some parameter value, but I opted to create a hidden input on the page that would provide the right number:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#b06;font-weight:bold&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#369&#34;&gt;type&lt;/span&gt;=&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#369&#34;&gt;name&lt;/span&gt;=&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;gh_issue&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#369&#34;&gt;value&lt;/span&gt;=&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;%= current_page.data.gh_issue_number =&amp;gt;&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Or in HAML:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%input{type: &amp;#34;hidden&amp;#34;, name: &amp;#34;gh_issue&amp;#34;, value: current_page.data.gh_issue_number}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And we can fetch that value with jQuery:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; issue_id = $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;[name=&amp;#34;gh_issue&amp;#34;]&amp;#39;&lt;/span&gt;).val();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;From there, we just had to modify the IDs referenced in Don’s JavaScript to match ours, and comments were working perfectly! Well, new comments were.&lt;/p&gt;
&lt;p&gt;Our blog is over 9 years old now, with over 1,300 posts and comments on many of those, and we needed to pull those existing comments over into GitHub as well. Actually copying the data wasn’t too difficult. I wrote a simple Python script to use the Blogger API to fetch posts and their comments, sort them by date, create an appropriately-named GitHub issue, and add the comments to them. Aside from GitHub’s anti-abuse detection system getting in the way a few times, it was an easy process.&lt;/p&gt;
&lt;p&gt;We wanted to preserve original author and timestamp information, so I had my script prepend the comment body with that information in a code block so it could be easily read by people reading comments on GitHub and parsed by JavaScript:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;original author: ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;date: ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To parse that out, I wrote a quick and dirty regex that runs if I’m the user who created the comment:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (data.user.login == &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;phinjensen&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; regex = &lt;span style=&#34;color:#080;background-color:#fff0ff&#34;&gt;/^```\r?\noriginal author: ([^\r\n]+)\r?\ndate: ([^\r\n]+)\r?\n```/&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; info = data.body.match(regex);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (info) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    author_name = info[&lt;span style=&#34;color:#00d;font-weight:bold&#34;&gt;1&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    date = &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#038&#34;&gt;Date&lt;/span&gt;(info[&lt;span style=&#34;color:#00d;font-weight:bold&#34;&gt;2&lt;/span&gt;]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    data.body_html = data.body_html.replace(&lt;span style=&#34;color:#080;background-color:#fff0ff&#34;&gt;/^&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;.+\r?\n.+\r?\n&amp;lt;\/code&amp;gt;&amp;lt;\/pre&amp;gt;/&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If that regex isn’t matched, then the author and date data is left as-is and parsed as normal. Here’s the full JavaScript we’re using:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;function&lt;/span&gt; formatDate(date) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; monthNames = [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;January&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;February&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;March&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;April&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;May&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;June&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;July&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;August&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;September&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;October&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;November&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;December&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; day = date.getDate();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; monthIndex = date.getMonth();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; year = date.getFullYear();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;return&lt;/span&gt; monthNames[monthIndex] + &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; + day + &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt; + year;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$(&lt;span style=&#34;color:#038&#34;&gt;document&lt;/span&gt;).ready(&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;function&lt;/span&gt; () {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; issue_id = $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;[name=&amp;#34;gh_issue&amp;#34;]&amp;#39;&lt;/span&gt;).val();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; url = &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;https://github.com/EndPointCorp/end-point-blog/issues/&amp;#34;&lt;/span&gt; + issue_id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; api_url = &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;https://api.github.com/repos/EndPointCorp/end-point-blog/issues/&amp;#34;&lt;/span&gt; + issue_id + &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;/comments&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  $.ajax(api_url, {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    headers: { Accept: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;application/vnd.github.v3.full+json&amp;#34;&lt;/span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dataType: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    success: &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;function&lt;/span&gt;(comments) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;.comments&amp;#34;&lt;/span&gt;).append(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;Visit the &amp;lt;b&amp;gt;&amp;lt;a href=&amp;#39;&amp;#34;&lt;/span&gt; + url + &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;#39;&amp;gt;GitHub Issue&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt; to comment on this post.&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $.each(comments, &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;function&lt;/span&gt;(i, data) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; date, author_name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (data.user.login == &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;phinjensen&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; regex = &lt;span style=&#34;color:#080;background-color:#fff0ff&#34;&gt;/^```\r?\noriginal author: ([^\r\n]+)\r?\ndate: ([^\r\n]+)\r?\n```/&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; info = data.body.match(regex);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (info) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            author_name = info[&lt;span style=&#34;color:#00d;font-weight:bold&#34;&gt;1&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            date = &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#038&#34;&gt;Date&lt;/span&gt;(info[&lt;span style=&#34;color:#00d;font-weight:bold&#34;&gt;2&lt;/span&gt;]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            data.body_html = data.body_html.replace(&lt;span style=&#34;color:#080;background-color:#fff0ff&#34;&gt;/^&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;.+\r?\n.+\r?\n&amp;lt;\/code&amp;gt;&amp;lt;\/pre&amp;gt;/&lt;/span&gt;, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (!date) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          date = &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#038&#34;&gt;Date&lt;/span&gt;(data.created_at);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; $comment = $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;div/&amp;gt;&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;comment&amp;#39;&lt;/span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (!author_name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          $comment.append($(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;img/&amp;gt;&amp;#34;&lt;/span&gt;, {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;src&amp;#39;&lt;/span&gt;: data.user.avatar_url,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;avatar-image&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; $body = $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;div/&amp;gt;&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;comment-body&amp;#39;&lt;/span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;var&lt;/span&gt; $header = $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;span/&amp;gt;&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;comment-header&amp;#39;&lt;/span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;if&lt;/span&gt; (author_name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          $header.append(author_name);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        } &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          $header.append($(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;a/&amp;gt;&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;href&amp;#39;&lt;/span&gt;: data.user.html_url, &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;text&amp;#39;&lt;/span&gt;: data.user.login}));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $header.append(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34; commented on &amp;#34;&lt;/span&gt; + formatDate(date));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $body.append($header);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $body.append($(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;div&amp;gt;&amp;#34;&lt;/span&gt; + data.body_html + &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;&amp;lt;/div&amp;gt;&amp;#34;&lt;/span&gt;, {&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#39;comment-body&amp;#39;&lt;/span&gt;,}));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $comment.append($body);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;.comments&amp;#34;&lt;/span&gt;).append($comment);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    error: &lt;span style=&#34;color:#080;font-weight:bold&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;.comments&amp;#34;&lt;/span&gt;).append(&lt;span style=&#34;color:#d20;background-color:#fff0f0&#34;&gt;&amp;#34;Comments are not open for this post yet.&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Huge thanks to &lt;a href=&#34;http://donw.io/&#34;&gt;Don Williamson&lt;/a&gt; for sharing his implementation of this idea! If you have any feedback for us and how we’re doing it, let us know in the comments!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Malaysia Open Source Community Meetup Quarter 4 2015 (MOSCMY Q4 2015)</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2016/12/malaysia-open-source-community-meetup/"/>
      <id>https://www.endpointdev.com/blog/2016/12/malaysia-open-source-community-meetup/</id>
      <published>2016-12-09T00:00:00+00:00</published>
      <author>
        <name>Muhammad Najmi bin Ahmad Zabidi</name>
      </author>
      <content type="html">
        &lt;p&gt;After a year, finally I decided to publish this post to all of you!&lt;/p&gt;
&lt;p&gt;On November 26th 2015 I had a chance to give a talk in a local open source conference here in Malaysia. The organizer requested me to specifically deliver a talk on “remote work”. This meetup was organized by Malaysian Development Corporation (MDEC) with the sponsorship of Microsoft Malaysia. Microsoft recently started to become more “open source friendly” given that they are in the effort of pushing their cloud based product, Azure. The full schedule of the event can be referred &lt;a href=&#34;https://web.archive.org/web/20170805182015/http://lanyrd.com/2015/moscmy2015/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The conference was divided into two sessions; where the morning session was held in Petronas Club, Tower One of Kuala Lumpur City Centre (KLCC) and the other session was held in Microsoft Malaysia’s office in Tower Two KLCC. Generally the morning session was for non parallel track (including my track) and the afternoon sessions were two parallel sessions slot.&lt;/p&gt;
&lt;h3 id=&#34;morning-session&#34;&gt;Morning Session&lt;/h3&gt;
&lt;p&gt;The morning session started with a talk by Dinesh Nair, as the Director of Developer Experience and Evangelism, Microsoft Malaysia. The second session in the morning was delivered by Mr Izzat M. Salihuddin, from Multimedia Development Corporation (MDeC), Malaysia. He spoke on the behalf of MDeC explaining the effort by MDeC as a government wing to realize the local cloud infrastructure. One of the challenges that being mentioned by Mr Izzat was the readiness of physical infrastructure as well as the broadband connectivity for the public. The final slot in the morning was delivered by me in which I explained much of the way of how End Pointers do their job, open source software that we used, as well as how we accomplish our job remotely. The morning session was adjourned with a lunch break.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/blog/2016/12/malaysia-open-source-community-meetup/image-0-big.jpeg&#34; imageanchor=&#34;1&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/12/malaysia-open-source-community-meetup/image-0.jpeg&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Just in case if you are wondering, this is me delivering the talk on that day&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;afternoon-session&#34;&gt;Afternoon Session&lt;/h3&gt;
&lt;p&gt;The afternoon session was a parallel track session, where I chose to attend a talk on Ubuntu’s &lt;a href=&#34;http://www.ubuntu.com/cloud/juju&#34;&gt;Juju&lt;/a&gt; service. The talk was delivered by Mr Khairul Aizat Kamarudzaman from Informology. Mr Aizat’s slides for his talk could be read &lt;a href=&#34;http://www.slideshare.net/fenris/informology-introduction-to-juju&#34;&gt;here&lt;/a&gt;. Later, Mr Sanjay shared his Asterisk skills in which the server is hosted on the Azure platform. Mr Sanjay showed to us how make phone call from the computer to the mobile phone. Asterisk is different from Skype because it is using an open protocol (SIP) and with open clients. Mr Sanjay showed a demo on his implementation, in which it looks like the setup is to compete with the typical PABX phone system.&lt;/p&gt;
&lt;p&gt;For the next slot I decided to enter the slot on TCPTW kernel patch which was delivered by Mr Faisal from Nexoprima. As far as I understood, Mr Faisal reintroduced his own patch for the Linux kernel in order to handle TCP TIME_WAIT issue which was happened due to extremely busy HTTP requests. Since connection in TIME_WAIT state hold a local port for 1 minute and in many distro the default ports are up to 30,000, the effort put to search for free port(s) will use intensive CPU and it could was CPU cycle to purge tons of TIME_WAIT connections.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/blog/2016/12/malaysia-open-source-community-meetup/image-1-big.jpeg&#34; imageanchor=&#34;1&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/12/malaysia-open-source-community-meetup/image-1.jpeg&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mr Faisal gave his talks on TCPTW kernel patch&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Mr Faisal’s TCPTW patch for CentOS 7 could be viewed &lt;a href=&#34;https://github.com/efaisal/linuxtcptw/blob/master/centos/linux-3.10.0-229.1.2.el7.eafaisal.patch&#34;&gt;here&lt;/a&gt;. His presentation slides could be viewed &lt;a href=&#34;http://www.scribd.com/doc/291238152/TIME-WAIT-Hack-for-High-Performance-Ephemeral-Connection-in-Linux-TCP-Stack&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before went back home, I decided to enter a talk on “Dockerizing IOT Service” by Mr Syukor. In this talk Mr Syukor gave a bit theoretical background on Docker and how it can be used on Raspberry Pi board. You can view his slides &lt;a href=&#34;http://www.slideshare.net/msyukor/dockerizing-iot-services&#34;&gt;here&lt;/a&gt;. My personal thought is that Raspberry Pi is versatile enough to run any modern operating system and Docker should not be much an issue.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Ruby Fight Club</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2016/08/ruby-fight-club/"/>
      <id>https://www.endpointdev.com/blog/2016/08/ruby-fight-club/</id>
      <published>2016-08-31T00:00:00+00:00</published>
      <author>
        <name>Greg Davidson</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img alt=&#34;men boxing&#34; src=&#34;/blog/2016/08/ruby-fight-club/image-0.jpeg&#34; /&gt;&lt;br&gt;Photo by &lt;a href=&#34;https://www.flickr.com/photos/superwebdeveloper/&#34;&gt;Peter Gordon&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;first-rule-do-not-talk-about-ruby-fight-club&#34;&gt;First Rule: Do Not Talk About Ruby Fight Club&lt;/h3&gt;
&lt;p&gt;This post may get me kicked out for talking about the club, but…I was asked to share a few thoughts about something we tried out earlier this year at End Point. We ran an internal meetup dubbed Ruby Fight Club to read and discuss &lt;a href=&#34;https://www.poodr.com/&#34;&gt;Practical Object-Oriented Design in Ruby&lt;/a&gt; (POODR) by Sandi Metz.&lt;/p&gt;
&lt;img align=&#34;right&#34; alt=&#34;Poodr cover&#34; border=&#34;0&#34; height=&#34;250&#34; src=&#34;/blog/2016/08/ruby-fight-club/image-1.jpeg&#34; title=&#34;poodr-cover.jpg&#34; width=&#34;191&#34; /&gt;
In the past we’ve met together as a company and in smaller team or project focused groups but this was first time we used a book as the guiding, recurring topic with a smaller, committed group who made time for it. Attendance was optional and we did have some folks who opted out even though they loved the subject matter and the idea, because they knew they couldn’t make it most of the time. I think this made the group tighter-knit.
&lt;p&gt;Our group of six remote engineers met weekly for one hour to discuss one chapter from the book. We worked through each chapter together which often led to Q&amp;amp;A sessions and deeper discussions about Ruby and &lt;a href=&#34;https://en.wikipedia.org/wiki/Computer_science&#34;&gt;computer science&lt;/a&gt; theory in general. Each week, one member of the team would lead the discussion. It required some preparation in advance and gave us all a chance to work on our presenting and moderating skills. We used Google Hangouts to meet and the presenter would share their screen to show slides and example code.&lt;/p&gt;
&lt;h3 id=&#34;honing-our-craft&#34;&gt;Honing Our Craft&lt;/h3&gt;
&lt;p&gt;As consultants we have to balance technical perfection with other considerations—​most often budget and timelines/​deadlines. This reality does not lend itself well to developing and learning to apply new technical concepts. It’s also challenging to apply these new concepts in large, established projects where our role is to maintain and extend existing code. The conventions and architecture are well established and it’s hard to push against projects with inertia like this. Setting some time aside each week not tied to client projects gave us the opportunity to focus on our skills and develop them together. Although several in the group had read the POODR book before, they reported that working through each chapter and discussing it in a group setting greatly increased their understanding of the material.&lt;/p&gt;
&lt;h3 id=&#34;face-time&#34;&gt;Face Time&lt;/h3&gt;
&lt;p&gt;Our company has a large number of full-time remote engineers. At time of this writing close to 90% of us work in a location other than our head office in NYC. Remote work allows us the freedom to live where we want (I’m writing this from my home office in a small town in the interior of British Columbia, Canada) but requires extra effort for us to build team camaraderie and social connections. Ruby Fight Club was great for this. Although Hangouts, Skype and other video-conferencing apps have their challenges, everyone let us know they appreciated being able to spend time with the group each week. We’d often chat with each other for a few minutes before and after our book discussions.&lt;/p&gt;
&lt;p&gt;Discussing the book (somewhat) face-to-face over video also increased the fidelity and efficiency of our discussions. When you can see people’s faces, expressions and gestures it’s much easier to glean information and understand them. It feels silly and obvious to say this after the fact but it’s novel when the majority of your workday communication is done over IRC/​Slack, email and phone/​audio.&lt;/p&gt;
&lt;h3 id=&#34;got-meetups&#34;&gt;Got Meetups?&lt;/h3&gt;
&lt;p&gt;During one of our meetings I asked the group if anyone went to meetups local to them. I was surprised to learn that &lt;em&gt;none&lt;/em&gt; in the group did so. For every person the response was similar: “I would but there aren’t any groups meeting nearby”. I had assumed that I was the odd one out in this way because I live in a small town. The leader of our group lives in Chicago and I thought for sure there would be a meetup for him to attend but there wasn’t. The closest group to him required a long trip across town on public transit. Occasionally I &lt;em&gt;do&lt;/em&gt; travel 45-60 minutes (each way!) from home to attend meetups in &lt;a href=&#34;http://okdg.org/&#34;&gt;larger&lt;/a&gt;, &lt;a href=&#34;https://startupvernon.com/&#34;&gt;nearby&lt;/a&gt; &lt;a href=&#34;https://kamloopsinnovation.ca/&#34;&gt;towns&lt;/a&gt;. People are often surprised I travel so far but it’s worth it to me.&lt;/p&gt;
&lt;h3 id=&#34;what-worked-well&#34;&gt;What Worked Well&lt;/h3&gt;
&lt;p&gt;We stuck to the time limit (mostly) which was a good thing. We found we usually had enough time to socialize a bit, discuss the book, have a Q&amp;amp;A time and then get back to our client work. Sharing the presenting/​discussion leading role was also nice. Leading a session took a little time to prepare but because we all took turns doing this we shared the load.&lt;/p&gt;
&lt;p&gt;I’d like to personally thank Phunk (our fearless Ruby Fight Club leader) for having the idea and executing so well on it. We all really appreciate it and look forward to running more meetups like it in future.&lt;/p&gt;
&lt;h3 id=&#34;what-we-might-do-differently-next-time&#34;&gt;What We Might Do Differently Next Time&lt;/h3&gt;
&lt;p&gt;I think it would be good to allow a little more time for socializing and chat. This happened naturally in Ruby Fight Club but it would be cool to devote a block of time specifically to it.&lt;/p&gt;
&lt;p&gt;It would also be nice to allow time for people to do a show and tell/​lightning talk about something they are interested in. That said, having a book to work through was really great. Every week there is something to discuss and it was often a starting point to further discussions.&lt;/p&gt;
&lt;p&gt;What are you doing at your companies to stay sharp and connected? Let us know, we’d love to hear from you!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Talking UI/UX with Trey McKay</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2016/06/talking-ui-ux-trey-mckay/"/>
      <id>https://www.endpointdev.com/blog/2016/06/talking-ui-ux-trey-mckay/</id>
      <published>2016-06-07T00:00:00+00:00</published>
      <author>
        <name>Liz Flyntz</name>
      </author>
      <content type="html">
        &lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center;&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/06/talking-ui-ux-trey-mckay/shapewaysscreen.jpg&#34;/&gt;&lt;/div&gt;
&lt;p&gt;Trey McKay was kind enough to let me ask him a bunch of questions. Trey’s an Interaction Designer at &lt;a href=&#34;https://www.shapeways.com/&#34;&gt;Shapeways&lt;/a&gt;, which is a global 3D printing service and marketplace.&lt;/p&gt;
&lt;p&gt;Trey focuses on designing and building experiences for turning 3D designs into 3D printed products. He’s worked on everything from site-wide navigation redesigns to a suite of 3D tools, which help product designers identify and fix potential issues in their designs before they go into manufacturing. If you want to stalk him on the Internet, check out his &lt;a href=&#34;https://treymckay.net&#34;&gt;personal site&lt;/a&gt; or holler at him on the Twitter &lt;a href=&#34;https://twitter.com/trey_mckay&#34;&gt;@trey_mckay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Liz Flyntz: What is the thing that is most misunderstood about user interface and user experience design, in your opinion?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Trey McKay: In general, I’ve noticed that a lot of folks think that the role of a designer is to “make something pretty”. From coworkers to general public, I think there is a common misconception about what design is, how important it is, and what we as UX/UI designers do on the day-to-day.&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center;&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/06/talking-ui-ux-trey-mckay/shapeways.jpg&#34;/&gt;&lt;/div&gt;
&lt;p&gt;Design is how something works. Good design is transparent, as the saying goes, because when something is properly designed, it’s not getting in the user’s way. Well-designed products and services help people get stuff done, save them time, make their lives easier. We only notice design when it’s not doing those things for us, when it’s not helping us solve problems or is causing us frustration by being unclear, unhelpful, or distracting us from completing our tasks.&lt;/p&gt;
&lt;p&gt;Here’s an example: Let’s say as an interaction designer I’m working with a developer on a login form for the website. When I start to work on this page I add interface copy and spacing to UI elements to help clearly communicate what things do, what the user is expected to input. I group labels with their form field and work with color to make it clear what elements are clickable and what they need to interact with first.&lt;/p&gt;
&lt;p&gt;Now the common reaction for someone looking at this interface again after I’ve worked on it is likely, “Wow this looks a lot better” or something along those lines. I think this is where the “designers make things pretty” mentality comes from for the person who doesn’t work with designers often or at all. But a good developer knows that a lot more is going on than simply making something look “pretty”. They’ll know that the login form is more understandable at first glance, easier to use to complete your task, and has copy that is more helpful.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;LF: What are your must-have items of documentation? Do you always make user/use cases and workflows, for instance?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;TM: For me personally, the most important and must-have item 100% of the time is a clear problem statement, i.e. “What is the user problem that we’re solving here?” Once you have that clearly stated, and agreed upon, it becomes much easier to keep projects focused and design something useful.&lt;/p&gt;
&lt;p&gt;Usability testing, user research, focus groups and the like are excellent tools for truly understanding where users have problems in your experience, and why they’re having them. Workflows are essential for making sure that a user can get from point A to point B without any unnecessary steps, without any pitfalls or dead-ends in the experience.&lt;/p&gt;
&lt;p&gt;It’s important to get them sorted out as early into a project as possible, because if you end up focusing on details of a specific interface or step in the flow, without the flow itself figured out, then you may end up realizing later that the thing you spent all that time and energy on isn’t necessary at all. That’s a terrible feeling, trust me.&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center;&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/06/talking-ui-ux-trey-mckay/shapeways3dscan.jpg&#34;/&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;LF: What are your preferred tools for producing deliverables? What are some tools you would like to try?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;TM: The deliverables themselves, and the tools with which to create them, are heavily context-dependent. Meaning that different stages of the design process require different deliverables. The general rule of thumb that I’ve adopted for my work is to stay as low-fidelity as possible, for as long as possible. The goal there being that you end up staying much more agile and open to change, spend less time chasing down details that may not matter in the long run, and more likely to end up with something useful.&lt;/p&gt;
&lt;p&gt;Because low-fi tools require a small amount of time and energy, you as a designer don’t feel any attachment to them if you need to scrap your idea or start in a new direction. The more time you put into details on something, the more of an emotional attachment you build to it, and the less open you are to change (bad!). So it’s important, especially early in the design process, to work as low-fi as possible. Move quickly, explore lots of directions, and then over time you can refine your ideas as you move into higher-fidelity mediums like wireframes or comps.&lt;/p&gt;
&lt;p&gt;When I make medium-fidelity wireframes, I use Sketch. I prefer Sketch over tools like Photoshop or Illustrator for doing wireframes because it was designed from the ground up for doing UI design. There are a lot less unnecessary tools, and there are a ton of useful plug-ins around the Internet for doing various things in Sketch specific to UI design, and generally I’ve found my workflow to be vastly more efficient as a result. Photoshop in specific feels incredibly slow and inefficient for my process because it is a photo manipulation tool at its core.&lt;/p&gt;
&lt;p&gt;Lastly, my preferred hi-def tool is working directly in the browser. Working straight in HTML and CSS (we use Scss at Shapeways), I’m able to leverage the extensive front-end framework we’ve already built. We’ve got tons of CSS already written which helps me move as fast as possible, and really see exactly what the end result will be in a variety of browsers, on different devices, etc. CSS makes working with repetitive elements really efficient, as you can make broad, sweeping changes all in one go. Gone are the days of the “pixel-perfect” Photoshop comp. Go directly from medium-fidelity wireframe to hi-fidelity prototype in your browser, and profit.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;LF: What’s special about the UI needs of a highly specialized product/userbase like your company?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;TM: One of the biggest challenges that we face here is designing for the sheer variability of what our users can create, buy, and sell on our platform. We have an e-commerce marketplace that functions on the top-level like many others, but we’re also responsible for manufacturing and shipping those products. The things you buy on our marketplace may never have existed before, and that’s a very special thing to design for.&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center;&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2016/06/talking-ui-ux-trey-mckay/shapewaysimage.jpg&#34;/&gt;&lt;/div&gt;
&lt;p&gt;From a UI-design perspective, that forces you to account for a potentially unlimited amount of edge-cases. How do you design interfaces that serve people selling insanely complex mathematical art pieces that are generated from algorithms, high-end designer jewelry, and also scale miniatures? How do you design shop management interfaces for selling those same products in any of our 50+ 3D printing materials? It forces you to design for scale, flexibility, and inherent usability. There’s no room for “fluff” or unnecessary interface elements.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;LF: You are in-house, so I think that makes a difference; have you worked for clients before? What do you do when there is a mismatch between clients’ design wants and what you feel are user requirements?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;TM: I have worked for clients pretty extensively actually. I think there’s a correlation for in-house folks when they’re working with partner teams like marketing, business, etc. Generally, when there’s a mismatch between what a client wants, and what a user needs, it’s my job to educate my client the best I can as to why the user needs that, and why it’s important for the success of the project. I always feel that it’s my responsibility to be the loudest voice for the end-user. I generally try to be firm with clients, because in most situations, happy users make for happy clients. Hard to argue that! Though as with all things, there’s always a tradeoff to be found in most situations.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Cybergenetics Helps Free Innocent Man</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2016/04/cybergenetics-helps-free-innocent-man/"/>
      <id>https://www.endpointdev.com/blog/2016/04/cybergenetics-helps-free-innocent-man/</id>
      <published>2016-04-27T00:00:00+00:00</published>
      <author>
        <name>Elizabeth Garrett Christensen</name>
      </author>
      <content type="html">
        &lt;p&gt;We all love a good ending. I was happy to hear that one of End Point’s clients, Cybergenetics, was involved in a case this week to free a falsely imprisoned man, Darryl Pinkins.&lt;/p&gt;
&lt;p&gt;Darryl was convicted of a crime in Indiana in 1991. In 1995 Pinkins sought the help of the &lt;a href=&#34;http://www.innocenceproject.org/&#34;&gt;Innocence Project&lt;/a&gt;. His attorney Frances Watson and her students turned to Cybergenetics and their DNA interpretation technology called TrueAllele® Casework. The TrueAllele DNA identification results exonerated Pinkins. The Indiana Court of Appeals dropped all charges against Pinkins earlier this week and he walked out of jail a free man after fighting for 24 years to clear his name.&lt;/p&gt;
&lt;p&gt;TrueAllele can separate out the people who contributed their DNA to a mixed DNA evidence sample. It then compares the separated out DNA identification information to other reference or evidence samples to see if there is a DNA match.&lt;/p&gt;
&lt;p&gt;End Point has worked with Cybergenetics since 2003 and consults with them on security, database infrastructure, and website hosting. We congratulate Cybergenetics on their success in being part of the happy ending for Darryl Pinkins and his family!&lt;/p&gt;
&lt;p&gt;More of the story is available at &lt;a href=&#34;https://www.cybgen.com/information/newsroom/2016/apr/TrueAllele-helps-free-innocent-Indiana-man-after-24-years-in-prison.shtml&#34;&gt;Cybergenetics’ Newsroom&lt;/a&gt; or the &lt;a href=&#34;https://www.chicagotribune.com/suburbs/post-tribune/ct-ptb-pinkins-prison-release-st-0426-20160425-story.html&#34;&gt;Chicago Tribune&lt;/a&gt;.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>RubyConf India 2015</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2015/04/rubyconfindia2015/"/>
      <id>https://www.endpointdev.com/blog/2015/04/rubyconfindia2015/</id>
      <published>2015-04-15T00:00:00+00:00</published>
      <author>
        <name>Selvakumar Arumugam</name>
      </author>
      <content type="html">
        &lt;p&gt;The 6th edition of RubyConf India 2015 was held at Goa (in my opinion, one of the most amazing places in India). The talks were spread over various topics, mainly related to Ruby generally and RoR.&lt;/p&gt;
&lt;p&gt;Aaron Patterson (a core member of Ruby and Rails team) gave a very interesting talk about Pair Programming, benchmarking on Integration tests vs Controller tests and precompiling the view to increase the speed in Rails 5.&lt;/p&gt;
&lt;p&gt;Christophe Philemotte presented a wonderful topic on “&lt;a href=&#34;https://speakerdeck.com/toch/rubyconf-india-2015-diving-in-the-unknown-depth-of-a-project&#34;&gt;Diving in the unknown depths of a project&lt;/a&gt;” with his experience of contributing to the Rails project. He mentioned that 85% of a developer’s time is spent on reading the code and 15% of the time is spent on writing the code. So he explained a work process plan to make use of the developer’s time effectively which should adopt well to any kind of development. Here is the list of steps he explained:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Goal (ex: bug fixing, implement new feature, etc… )&lt;/li&gt;
&lt;li&gt;Map (ex: code repository, documentation, readme, etc…)&lt;/li&gt;
&lt;li&gt;Equipment (ex: Editor, IDE) and Dive (read, write, run and use)&lt;/li&gt;
&lt;li&gt;Next Task&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rajeev from ThoughtWorks talked about “&lt;a href=&#34;https://speakerdeck.com/rshetty01/functional-geekery-for-an-imperative-mind&#34;&gt;Imperative vs Functional programming&lt;/a&gt;” and interesting concepts in Haskell which can be implemented in Ruby, such as function composition, lazy evaluation, thunks, higher order functions, currying, pure functions and immutable objects.&lt;/p&gt;
&lt;p&gt;Aakash from C42 Engineering talked about an interesting piece of future web components called “Shadow DOM” which has interoperability, encapsulation and portability features built-in. He also mentioned &lt;a href=&#34;https://www.polymer-project.org&#34;&gt;polymer&lt;/a&gt; as a project to develop custom Shadow DOM.&lt;/p&gt;
&lt;p&gt;Vipul and Prathamesh from BigBinary showed an experimental project of “&lt;a href=&#34;https://github.com/prathamesh-sonpatki/torm&#34;&gt;Building an ORM with AReL&lt;/a&gt;” which is Torm (Tiny Object Relation Mapping) to gain more control over the ORM process in Rails.&lt;/p&gt;
&lt;p&gt;Smit Shah from Flipkart gave a talk on “Resilient by Design” which follows some design patterns like:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bounding (change the default timeouts)&lt;/li&gt;
&lt;li&gt;Circuit breakers&lt;/li&gt;
&lt;li&gt;Fail Fast&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Christopher Rigor shared some awesome information about “&lt;a href=&#34;https://speakerdeck.com/crigor/cryptography-for-rails-developers-rubyconfindia&#34;&gt;Cryptography for Rails Developers&lt;/a&gt;”. He explained some concepts like Public Key cryptography, symmetric cryptography, and SSL/TLS versions. He recommended we all use TLS 1.2 and AES-GCM on production to keep the application more secure.&lt;/p&gt;
&lt;p&gt;Eleanor McHugh, a british hacker gave an important talk on “&lt;a href=&#34;https://www.slideshare.net/feyeleanor/privacy-is-always-a-requirement&#34;&gt;Privacy is always a requirement&lt;/a&gt;”. The gist of the talk is to keep security tight by encrypt all transports, encrypt all passwords, provide two-factor authentication, encrypt all storage and anchor trust internally. The data won’t by safe by privacy or trust or contract in the broken internet world.&lt;/p&gt;
&lt;p&gt;Laurent Sansonetti who works for RubyMotion gave a demo of a Floppy bird game which he created using RubyMotion with code walkthrough. RubyMotion is used to develop native mobile applications for iOS, OS X and Android platforms. It provides features to use Objective-C API and Android API, and the whole build process is Rake-based.&lt;/p&gt;
&lt;p&gt;Shadab Ahmed gave a wonderful demo on the ‘aggrobot’ gem, used to perform easy aggregations. aggrobot runs on top of ActiveRecord as well as working directly with database to provide good performance on query results.&lt;/p&gt;
&lt;p&gt;Founder and CEO of CodeClimate Bryan Helmkamp spoke about “Rigorous Deployment” using a few wonderful tools. The ‘rollout’ gem is extensively helpful to deploy to specific users, specific branch deployment, etc… So there is no need of staging environment and it helps to avoid things like ‘it works in staging, not production’&lt;/p&gt;
&lt;p&gt;Erik Michaels-Ober gave an awesome talk on “&lt;a href=&#34;https://speakerdeck.com/sferik/writing-fast-ruby&#34;&gt;Writing Fast Ruby&lt;/a&gt;” (must-visit slides) with information about how to tweak regular code to improve the performance of the application. He also presented the Benchmark/IPS results of two versions of code with working logic and execution time. He mentioned as a rule-of-thumb that any performance improvement changes should require at least 12% improvement compare to current code.&lt;/p&gt;
&lt;p&gt;The final presenter Terence Lee from the Ruby Security Team gave a talk on “Ruby &amp;amp; You” which summarised all the talks and gave information on the Ruby Security Team and its contribution to Ruby community. He suggested everyone to keep their Ruby version up-to-date so to get the latest security patches and avoid vulnerabilities. He also encouraged the audience to submit bug reports to the official &lt;a href=&#34;https://bugs.ruby-lang.org&#34;&gt;Ruby ticketing system&lt;/a&gt; because, quoting him, “Twitter is not bug tracker”.&lt;/p&gt;
&lt;p&gt;It was really fascinating to interact with like minded people and I was very happy to leave the conference with many new interesting ideas and input about Ruby and RoR along with some new techie friends.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Today’s Internet Slowdown</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2014/09/todays-internet-slowdown/"/>
      <id>https://www.endpointdev.com/blog/2014/09/todays-internet-slowdown/</id>
      <published>2014-09-10T00:00:00+00:00</published>
      <author>
        <name>Jon Jensen</name>
      </author>
      <content type="html">
        &lt;p&gt;Today End Point is participating in an Internet-wide campaign to raise awareness about net neutrality, the FCC’s role in overseeing the Internet in the United States, and the possible effects of lobbying by large consumer Internet providers.&lt;/p&gt;
&lt;p&gt;Many companies and individuals are in favor of specific “net neutrality” regulation by the FCC, and make good arguments for it, such as these by &lt;a href=&#34;https://www.battleforthenet.com/&#34;&gt;Battle for the Net&lt;/a&gt;, &lt;a href=&#34;http://www.wired.com/2014/09/etsy-ceo-to-businesses-if-net-neutrality-perishes-we-will-too/&#34;&gt;Etsy&lt;/a&gt; and &lt;a href=&#34;http://motherboard.vice.com/en_us/read/net-neutrality-monopoly-and-the-death-of-the-democratic-internet&#34;&gt;ThoughtWorks and Reddit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are also plenty speaking out against certain specific regulatory proposals out there: &lt;a href=&#34;http://www.dontbreakthe.net/&#34;&gt;TechFreedom&lt;/a&gt;, &lt;a href=&#34;https://web.archive.org/web/20160804181924/http://www.foxbusiness.com/features/2014/05/08/100-internet-companies-voice-opposition-to-net-neutrality-rules.html&#34;&gt;Google, Facebook, Microsoft, Yahoo!&lt;/a&gt;, &lt;a href=&#34;http://mashable.com/2014/05/16/5-arguments-against-net-neutrality/&#34;&gt;Todd Wasserman&lt;/a&gt;, and with a jaunty propagandistic style, &lt;a href=&#34;https://www.ncta.com/&#34;&gt;NCTA&lt;/a&gt;, the cable company’s lobby.&lt;/p&gt;
&lt;p&gt;I think we are all sympathetic to free-market arguments and support non-governmental solutions that allow companies and individuals to create things without getting permission, and to arrange services and peering as they see fit. It seems that most people and companies understand the need to pay for more bandwidth, and more data transfer. (Marketers are the ones promising unlimited everything, then hiding limits in the fine print!) Many of us are worried about further entrenching government in private networks, whether ostensibly for national security, “intellectual property” policing, or enforcing net neutrality.&lt;/p&gt;
&lt;p&gt;But the market competition is hobbled when there are few competitors in a given geographic area. Many Internet users have few options if their ISP begins to filter or slow traffic by service type. I think we would all be better off with less false advertising of “unlimited downloads” and more realistic discussion of real costs. ISP backroom arm-twisting deals with companies just using the network as customers request can invisibly entrench existing players to the exclusion of new entrants.&lt;/p&gt;
&lt;p&gt;Every Internet provider builds on lots of infrastructure that was funded by the public, platform popularity built by other companies and individuals, rights of way granted by local municipalities and others, research done by government-funded institutions, and finally, their own semi-monopoly positions that are sometimes enforced by government at various levels.&lt;/p&gt;
&lt;p&gt;In any case there is not really a simple argument on either side either entirely for or against regulation. Some regulation is already there. The question is what form it will take, how it affects different groups now, and how it shapes the possibilities in the future.&lt;/p&gt;
&lt;p&gt;End Point does not endorse any specific position or proposal on the table at the FCC, but we want to raise awareness about this Internet regulation discussion and hope that you will do some research and comment to the FCC about how you see things. It’s worth letting your Internet provider, mobile phone carrier, and businesses you interact with online know how you feel too! Those outside the United States may find similar debates underway in their countries, perhaps not getting the broad attention they deserve.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>OpenWest Conference Recap</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2014/06/openwest-conference-recap/"/>
      <id>https://www.endpointdev.com/blog/2014/06/openwest-conference-recap/</id>
      <published>2014-06-10T00:00:00+00:00</published>
      <author>
        <name>Josh Tolley</name>
      </author>
      <content type="html">
        &lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center; background-color: #FFFFFF&#34;&gt;&lt;a href=&#34;/blog/2014/06/openwest-conference-recap/image-0.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; src=&#34;/blog/2014/06/openwest-conference-recap/image-0.png&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;A few weeks ago, the Utah Open Source Foundation put on its seventh annual conference, known as &lt;a href=&#34;https://www.openwest.org/&#34;&gt;OpenWest&lt;/a&gt;. Spencer Christensen &lt;a href=&#34;/blog/2014/05/highlights-of-openwest-conference-2014/&#34;&gt;already wrote&lt;/a&gt; about his experience at the conference. Family concerns kept me from attending much of it, so as time has permitted I’ve been reviewing some of the &lt;a href=&#34;/blog/2014/05/highlights-of-openwest-conference-2014/&#34;&gt;conference videos&lt;/a&gt; as they’ve come out. The schedule demonstrates a promising evolution as the conference expands and improves. The early years’ schedules always struck me as a bit heavy on front-end development and a limited set of currently popular technologies, and necessarily so given the smaller base of attendees and supporters. But recent years and increasing maturity have brought a very well-rounded conference. For this conference, tickets sold out.&lt;/p&gt;
&lt;p&gt;This year’s keynotes included Utah’s enthusiastic Lieutenant Governor speaking on technology in the state, and though this is a regional conference with attendees from all over the western United States, the issues in question cross state lines as governments turn increasingly to technology, and infrastructure ties together even the very remote and rural areas that comprise much of the West. Cox’s video, available &lt;a href=&#34;https://www.youtube.com/watch?v=TiEddaKOwo4&#34;&gt;here&lt;/a&gt;, describes the growth of internet service in Utah as seen through the eyes of CentraCom, a communications company Cox’s family helped found.&lt;/p&gt;
&lt;p&gt;The next keynote came from OpenWest regular Pete Ashdown, founder and sole owner of conference sponsor &lt;a href=&#34;http://xmission.com/&#34;&gt;XMission&lt;/a&gt;, a Utah internet service provider. In the media attention surrounding the National Security Agency, Ashdown and XMission received quite a bit of publicity for making clear their &lt;a href=&#34;/blog/2014/05/highlights-of-openwest-conference-2014/&#34;&gt;policy&lt;/a&gt; to ignore government requests for ISP data except when accompanied by what Ashdown called “proper warrants”, and his keynote on Internet Liberty was one I was sad to miss in person. Video of his talk is available &lt;a href=&#34;https://www.youtube.com/watch?v=tl3muxsiSP0&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=144K_RGBbQw&#34;&gt;My own presentation&lt;/a&gt; at the end of the first day covered the essentials of dimensional modeling, as described in &lt;a href=&#34;/blog/2013/05/dimensional-modeling/&#34;&gt;a blog post&lt;/a&gt; I wrote some time ago. Especially considering the constant hype around “big data” in recent years, the relatively little attention paid to properly modeling those data within a relational database in useful ways is surprising. This may reflect the fact that levels of hype and levels of intellectual rigor don’t necessarily correspond, but in larger part it demonstrates the spread of non-relational databases into the “big data” field.&lt;/p&gt;
&lt;p&gt;The conference traditionally incorporates a “family day”, where topics extend beyond software development into &amp;hellip; whatever the conference organizers are willing to accept. In this year’s conference swag, Utah “maker space” &lt;a href=&#34;http://thetransistor.com/&#34;&gt;theTransistor&lt;/a&gt; added an &lt;a href=&#34;https://www.arduino.cc/&#34;&gt;Arduino&lt;/a&gt;-based kit for attendees to solder together. The family day track also featured presentations and labs specifically for younger nerds, beginner development classes, and interesting projects that don’t really fit in other tracks. My wife and I held a workshop on fermented foods, covering stuff like sauerkraut and sourdough, while other sessions included the traditional annual PGP keysigning, workshops from Perl luminary &lt;a href=&#34;https://blog.plover.com/&#34;&gt;Mark Dominus&lt;/a&gt;, and a full “Young Technologist” track designed both to help kids get into technology, and to support parents in caring for their geeky progeny.&lt;/p&gt;
&lt;p&gt;I’ve enjoyed watching OpenWest develop from a relatively small conference of limited focus into a well-organized regional educational experience. Thanks to its &lt;a href=&#34;https://web.archive.org/web/20160411053336/https://www.openwest.org/our-sponsors/&#34;&gt;sponsors&lt;/a&gt; for their support, and its organizers for their excellent work.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Ecommerce Innovation 2013</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2013/10/ecommerce-innovation-2013/"/>
      <id>https://www.endpointdev.com/blog/2013/10/ecommerce-innovation-2013/</id>
      <published>2013-10-16T00:00:00+00:00</published>
      <author>
        <name>Richard Templet</name>
      </author>
      <content type="html">
        &lt;p&gt;Mark Johnson and I went to the &lt;a href=&#34;http://www.ecommerce-innovation.com/&#34;&gt;Ecommerce Innovation 2013&lt;/a&gt; conference in beautiful Hancock, NY. The event was hosted by Sam Batschelet of &lt;a href=&#34;http://www.westbranchresort.com/&#34;&gt;West Branch Resort&lt;/a&gt;. The conference was spread out over three days and was very well planned. We had plenty of time in between talks to mingle with the other people. All of the talks were very insightful and informative. I found the mixture of technology and marketing talks beneficial. I have already discussed some things with my clients that I learned.&lt;/p&gt;
&lt;h3 id=&#34;a-brief-overview-of-the-talks&#34;&gt;A brief overview of the talks&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jure Kodzoman of &lt;a href=&#34;http://www.informa.si/&#34;&gt;Informa&lt;/a&gt; had two different subjects.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;His first talk was about Template::Flute which is a Perl based template system which is the default template for Interchange 6. It utilizes the use of html classes to figure out where to parse in the data returned from your Perl code. Overall it seems pretty straight forward to use.&lt;/li&gt;
&lt;li&gt;His second talk was about the current state of the new Interchange 6 demo store.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ana Kozole of Informa had a talk named “Remarketing with Banners” that was really informative.The base of this is to have the ability to show specific banners to visitors on different websites.  She discussed different remarketing techniques including creating specific lists based on different criteria like all visitors, people who got to the checkout page but didn’t checkout or people who used a coupon code etc. You can also use remarketing lists for search ads.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Luka Klemenc of Informa gave two talks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;He discussed some a CRM system that they had developed in house and some of the pros and cons.&lt;/li&gt;
&lt;li&gt;Luka gave us short talk about the ways to know whether or not your newsletter is effective.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Josh Lavin of &lt;a href=&#34;http://www.perusion.com&#34;&gt;Perusion&lt;/a&gt; talked about a new template for Interchange 5 called Strap which is based on &lt;a href=&#34;http://getbootstrap.com/2.3.2/&#34;&gt;Bootstrap&lt;/a&gt; version 2.3.2. With this new template they have created a bunch of page and url changes to make the stock Interchange much more SEO friendly. This also makes a few underlying changes like assuming the username to login would be your email address and creating a multiple page checkout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mike Heins of Perusion gave us a brief history of Interchange and compared it to modern day frameworks like Dancer. He also gave us a brief overview of PCI compliance and how Interchange holds up. He introduced us to the features of the Perusion Payment Server which is a remote credit card processing system that helps with PCI compliance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stefan Hornburg of &lt;a href=&#34;http://www.linuxia.de/&#34;&gt;LinuXia Systems&lt;/a&gt; discussed two different topics with us.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gave us an overview of where the Interchange 6 project currently is and where it’s going. He gave us some code samples of the way we can do simple things like add an item to the cart, fetch the subtotal of the cart and talk to the database.&lt;/li&gt;
&lt;li&gt;Stefan walked us through an integration he did for OpenERP with Interchange 5 using RPC::XML.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;/team/mark-johnson/&#34;&gt;Mark Johnson&lt;/a&gt; gave us a review of the modifications to Interchange 5 to allow web servers like &lt;a href=&#34;http://www.nginx.com&#34;&gt;nginx&lt;/a&gt; or &lt;a href=&#34;http://www.apache.org&#34;&gt;Apache&lt;/a&gt; to cache entire pages. He discussed how we modified Interchange 5 for a customer to help with a DDoS attack. He laid out all of the new usertags and directives you will need to set to get pages to be cachable including some “gotchas” like not sending cookie information if you want this page to be cached. We hope that this feature will be included in the Interchange 5.8.1 release.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sam Batschelet gave a talk about &lt;a href=&#34;http://www.devcamps.org/&#34;&gt;DevCamps&lt;/a&gt; and the reasons why it is so great. He discussed things like using Perlbrew and Carton in camps to help get around the fact that most Linux operating systems ship with a pretty old version of Perl. He also expanded on a few features that we hope to get released soon.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last big item on the schedule was a 2 hour round table discussion about the database schema for Interchange 6. It was a very good discussion with many different opinions for adjustments. Most of us based our suggestions on past experience with clients. I do not think we are finished making adjustments to it but we are on the right path to a very flexible setup.&lt;/p&gt;
&lt;p&gt;Overall I thought the conference was a great success. It was great to meet in person some people I had only seen on a mailing list before and pass around ideas for the future. I cannot wait to see what cool new things we will have to discuss next year!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>eCommerce Innovation Conference 2013</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2013/09/ecommerce-innovation-conference-2013/"/>
      <id>https://www.endpointdev.com/blog/2013/09/ecommerce-innovation-conference-2013/</id>
      <published>2013-09-20T00:00:00+00:00</published>
      <author>
        <name>Richard Templet</name>
      </author>
      <content type="html">
        &lt;p&gt;The &lt;a href=&#34;http://www.ecommerce-innovation.com/&#34;&gt;eCommerce Innovation Conference 2013&lt;/a&gt; is a new conference being held in Hancock, New York, between October 8th and 11th. The conference aims to discuss everything ecommerce with a focus on &lt;a href=&#34;http://www.perl.org/&#34;&gt;Perl&lt;/a&gt;-based solutions including &lt;a href=&#34;http://perldancer.org/&#34;&gt;Dancer&lt;/a&gt; and &lt;a href=&#34;http://www.icdevgroup.org/&#34;&gt;Interchange&lt;/a&gt;. It isn’t geared directly to any one specific type of person unlike most conferences. The current speakers list include in-house ecommerce software developers, consultants, sales managers, project managers, and marketing experts. The talk topics range from customer relationship management to template engines for Perl.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/team/mark-johnson/&#34;&gt;Mark Johnson&lt;/a&gt; and I are both going to be speaking at the conference. Also there will be Mike Heins, creator of Interchange, and Stefan Hornburg, longtime Interchange development group “team captain”.&lt;/p&gt;
&lt;p&gt;Mark is going to be discussing full page caching in Interchange 5. This is becoming a more frequent request from our larger customers. They want to be able to do full page caching to allow the web browser and a caching proxy server alone to handle most requests leaving Interchange and the database open to handle more shopping-based requests like add to cart or checkout. This is a commonly-used architecture in many application servers, and my colleague David Christensen has several new features already in use by customers to make full-page caching easier, which are expected to go into Interchange 5.8.1 soon.&lt;/p&gt;
&lt;p&gt;I will be doing a talk on &lt;a href=&#34;http://www.icdevgroup.org/slides/eic2013/multi-site-setup/talk.html#&#34;&gt;multi-site setup in Interchange 5&lt;/a&gt;. This is a request we have received frequently over the years. Companies may either already have some kind of wholesale website or just want to have multiple websites use the same database and programming but allow for different website designs. They normally need to control what website a product will show up on and possibly adjust the price accordingly. I’ll discuss the different methods we have used to accomplish this at End Point.&lt;/p&gt;
&lt;p&gt;I see on the schedule that Sam Batschelet will be &lt;a href=&#34;http://www.icdevgroup.org/slides/eic2013/Camps.pdf&#34;&gt;speaking about the camps system&lt;/a&gt; and some new capabilities he’s added for &lt;a href=&#34;http://perlbrew.pl/&#34;&gt;perlbrew&lt;/a&gt; and &lt;a href=&#34;https://github.com/miyagawa/carton&#34;&gt;Carton&lt;/a&gt;, among other things. We are also using camps some places with perlbrew and &lt;a href=&#34;https://github.com/tokuhirom/plenv&#34;&gt;plenv&lt;/a&gt;, so it will be interesting to compare notes. I hope we’ll see some discussion and/or contribution to the &lt;a href=&#34;http://www.devcamps.org/&#34;&gt;open source DevCamps&lt;/a&gt; project soon!&lt;/p&gt;
&lt;p&gt;It promises to be a very nice conference with lots of diverse information!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>JSConf US 2013 — Day One</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2013/06/jsconf-us-day-one/"/>
      <id>https://www.endpointdev.com/blog/2013/06/jsconf-us-day-one/</id>
      <published>2013-06-04T00:00:00+00:00</published>
      <author>
        <name>Greg Davidson</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/geigercounter/8951325076/&#34; title=&#34;Room With A View by Geiger Counter, on Flickr&#34;&gt;&lt;img alt=&#34;Room With A View&#34; height=&#34;217&#34; src=&#34;/blog/2013/06/jsconf-us-day-one/image-0.jpeg&#34; width=&#34;640&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I attended JSConf in Amelia Island, FL last week. As you can see, the venue was pretty spectacular and the somewhat remote location lent itself very well to the vision set by the conference organizers. Many developers myself included, often find the line between work and play blurring because there is much work to be done, many new open source projects to check out, constant advancements in browser technology, programming languages, you name it. Keeping up with it all is fun but can be challenging at times. While the talks were amazing, the focus and ethos of JSConf as I experienced it was more about people and building on the incredible community we have. I highly recommend attending meetups or conferences in your field if possible.&lt;/p&gt;
&lt;p&gt;Without further ado, I’ve written about some of the talks I attended. Enjoy!&lt;/p&gt;
&lt;h3 id=&#34;day-one&#34;&gt;Day One&lt;/h3&gt;
&lt;h4 id=&#34;experimenting-with-webrtc&#34;&gt;Experimenting With WebRTC&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://remysharp.com/&#34;&gt;Remy Sharp&lt;/a&gt; presented the first talk of the day about his experience building a &lt;a href=&#34;https://experiments.withgoogle.com/collection/chrome&#34;&gt;Google Chrome Experiment&lt;/a&gt; with WebRTC and the peer to peer communication API. The game (&lt;a href=&#34;https://web.archive.org/web/20130816024030/https://headshots.leftlogic.com/&#34;&gt;headshots&lt;/a&gt;), was built to work specifically on Chrome for Android Beta. Because WebRTC is so young, the libraries supporting it (Peer.js, easyRTC, WebRTC.io, SimpleWebRTC) are very young as well and developing quickly. He found that “Libraries are good when you’re fumbling, bad when stuff doesn’t work”. The “newness” of WebRTC ate much more time than he had anticipated. Remi demoed the game and it looked like good fun. If you’re interested in checking out headshots further, the &lt;a href=&#34;https://github.com/leftlogic/headshots&#34;&gt;source code&lt;/a&gt; is up on GitHub.&lt;/p&gt;
&lt;h4 id=&#34;javascript-masterclass&#34;&gt;JavaScript Masterclass&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://twitter.com/angelinamagnum&#34;&gt;Angelina Fabbro&lt;/a&gt; gave a talk about levelling up your skills as a developer. She first broke everyone’s heart by telling us “we’re not special” and that nobody is a natural born programmer. She presented some data (studies etc) to support her point and argued that early exposure to the practice of logical thinking and practicing programming can make you seem like a natural.&lt;/p&gt;
&lt;p&gt;She described several ways to know you’re not a beginner:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use the fundamentals in any language&lt;/li&gt;
&lt;li&gt;You are comfortable writing code from scratch&lt;/li&gt;
&lt;li&gt;You peek inside the libraries you use&lt;/li&gt;
&lt;li&gt;You feel like your code is mediocre and you’re unsure what to do about it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip;and ways to know you’re not an expert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You don’t quite grok (understand) all the code you read&lt;/li&gt;
&lt;li&gt;You can’t explain what you know&lt;/li&gt;
&lt;li&gt;You aren’t confident debugging&lt;/li&gt;
&lt;li&gt;You rely on references/docs too much&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;“Welcome to the ambiguous zone of intermediate-ness”.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Angelina suggested several ways to improve your skills. Ask “why?” obsessively, teach or speak at an event, work through a suggested curriculum, have opinions, seek mentorship, write in another language for a while etc. One book she specifically recommended was Secrets of the JavaScript Ninja by John Resig.&lt;/p&gt;
&lt;h4 id=&#34;javascript-is-literature-is-javascript&#34;&gt;JavaScript is Literature is JavaScript&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;http://anguscroll.com/&#34;&gt;Angus Croll&lt;/a&gt; from Twitter presented a hilariously entertaining talk in which he refactored some JavaScript functions in the literary styles of Hemingway, Shakespeare, Bolaño, Kerouac, James Joyce and other literary figures. The talk was inspired by a &lt;a href=&#34;http://byfat.xxx/if-hemingway-wrote-javascript&#34;&gt;blog post&lt;/a&gt; he’d written and had the entire conference hall erupting with laughter throughout.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/geigercounter/8950136537/&#34; title=&#34;poolside.js by Geiger Counter, on Flickr&#34;&gt;&lt;img alt=&#34;poolside.js&#34; height=&#34;500&#34; src=&#34;/blog/2013/06/jsconf-us-day-one/image-0.jpeg&#34; width=&#34;375&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;learning-new-words&#34;&gt;Learning New Words&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;http://andrewdupont.net/&#34;&gt;Andrew Dupont&lt;/a&gt; continued in the literary, language-oriented vein, giving a talk which drew a parallel between olde english purists who did not want to adopt any “new” words and the differing views surrounding the EcmaScript 6 specification process. Dupont’s talk was very thought-provoking especially in light of the resistance to some proposals in the works (e.g. &lt;a href=&#34;https://web.archive.org/web/20130820143217/http://wiki.ecmascript.org/doku.php?id=harmony:modules&#34;&gt;ES6 modules&lt;/a&gt;). Check out &lt;a href=&#34;https://www.slideshare.net/savetheclocktower/learning-new-words-22244915&#34;&gt;his slides&lt;/a&gt;—​the video will also be published in future.&lt;/p&gt;
&lt;h4 id=&#34;flightjs&#34;&gt;Flight.js&lt;/h4&gt;
&lt;img alt=&#34;Flight twitter&#34; border=&#34;0&#34; height=&#34;258&#34; src=&#34;/blog/2013/06/jsconf-us-day-one/image-2.png&#34; style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; title=&#34;flight-twitter.png&#34; width=&#34;375&#34;/&gt; 
&lt;p&gt;&lt;a href=&#34;https://twitter.com/danwrong&#34;&gt;Dan Webb&lt;/a&gt; spoke about &lt;a href=&#34;https://web.archive.org/web/20130520095336/http://twitter.github.io/flight/&#34;&gt;Flight&lt;/a&gt;, a client-side framework developed by the team at Twitter and released this past January. They have been using it to run lots of twitter.com and most of tweetdeck as well. Webb got a laugh out of the room when he recalled the first comment on Hacker News after &lt;a href=&#34;https://web.archive.org/web/20130518044937/http://engineering.twitter.com/2013/01/introducing-flight-web-application.html&#34;&gt;Flight was announced&lt;/a&gt;: “Why not use &lt;a href=&#34;https://angularjs.org/&#34;&gt;Angular&lt;/a&gt;?”. The motivation behind Flight’s design was to make a “system that’s easy to think about”. This aim was achieved by decoupling components (entirely self-contained).&lt;/p&gt;
&lt;p&gt;A Flight component is just a JavaScript object with a reference to a DOM node. The component can be manipulated, trigger events and listen to events (from other components). Applications are constructed by attaching Flight components to pieces of the DOM. Keeping the components independent in this way makes testing very easy. Complexity can be layered on but does not require any additional mental overhead. Dan suggested that Flight’s design and architecture would work very well with Web Components and &lt;a href=&#34;https://polymer-project.appspot.com/&#34;&gt;Polymer&lt;/a&gt; in future.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Lanyrd: Finding conferences for the busy or travel-weary developer</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2013/05/lanyrd-finding-conferences-for-busy-or/"/>
      <id>https://www.endpointdev.com/blog/2013/05/lanyrd-finding-conferences-for-busy-or/</id>
      <published>2013-05-10T00:00:00+00:00</published>
      <author>
        <name>Jeff Boes</name>
      </author>
      <content type="html">
        &lt;p&gt;Recently I had planned to attend a nearby technical conference on a weekend, but my plans fell through. As a result, my supervisor encouraged me to find a replacement, but having been out of the “free T-shirt and all the presentations you can stay awake through” circuit for many years, I didn’t have any ideas of where to start.&lt;/p&gt;
&lt;p&gt;I wanted to filter the conferences by topic: no sense attending a Web Development conference if all the presentations were far afield from what I do; I’m not a Ruby developer at present, and have no immediate plans to become one, so not much point in attending a deep exploration of that topic.&lt;/p&gt;
&lt;p&gt;I also wanted to stay local: if there’s something I can get to by car in a day, I’d prefer it.&lt;/p&gt;
&lt;p&gt;I stumbled upon &lt;a href=&#34;https://lanyrd.com&#34;&gt;Lanyrd.com&lt;/a&gt; almost by accident: it’s a sharp, well-engineered central point for data about upcoming conferences on a dizzying array of topics. Not just software: library science, economics, photography, water management, social media, and medicine were represented in just the one day on which I wrote this post.&lt;/p&gt;
&lt;p&gt;I subscribed to about a dozen topics, limiting each to the USA, and Lanyrd immediately suggested 46 events in which I might be interested.&lt;/p&gt;
&lt;p&gt;You can connect your Twitter or LinkedIn account with Lanyrd, which seems to offer a way to see when your friends and colleagues will be attending conferences. I wasn’t able to confirm that, as the overlap of my LinkedIn account with Lanyrd results in only one person, but I imagine that feature would be more valuable for others.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Liquid Galaxy in GSoC 2013!</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2013/04/liquid-galaxy-in-gsoc-2013/"/>
      <id>https://www.endpointdev.com/blog/2013/04/liquid-galaxy-in-gsoc-2013/</id>
      <published>2013-04-10T00:00:00+00:00</published>
      <author>
        <name>Benjamin Goldstein</name>
      </author>
      <content type="html">
        &lt;img alt=&#34;&#34; border=&#34;0&#34; src=&#34;/blog/2013/04/liquid-galaxy-in-gsoc-2013/image-0.jpeg&#34; style=&#34;width: 750px;&#34;/&gt;
&lt;p&gt;Once again &lt;a href=&#34;https://github.com/liquidgalaxy/liquid-galaxy&#34;&gt;The Liquid Galaxy Project&lt;/a&gt; has been accepted as a mentoring organization for the &lt;a href=&#34;http://www.google-melange.com/gsoc/homepage/google/gsoc2013&#34;&gt;Google Summer of Code&lt;/a&gt; program! The Google Summer of Code program (AKA GSoC) provides a tremendous opportunity for talented undergraduate and graduate students to work developing Open Source software guided by a mentor. Students receive $5000 stipends for successfully completing their summer projects. The past two years The Liquid Galaxy Project has had three GSoC students successfully complete their projects each year. This year we are hoping to increase this number.&lt;/p&gt;
&lt;p&gt;Right now we are in the “would-be student participants discuss application ideas with mentoring organizations” phase of the program. Interested students should contact the project’s mentors and admins (which includes a goodly number of End Pointers) by emailing &lt;del&gt;lg-gsoc@endpoint.com&lt;/del&gt; or by jumping into the #liquid-galaxy Freenode IRC channel. Applicants are well advised to take advantage of the opportunity to consult with project mentors in developing their applications. Student applications are being accepted starting April 22 and must be submitted by May 3. &lt;a href=&#34;https://web.archive.org/web/20130420171608/http://www.google-melange.com/gsoc/events/google/gsoc2013&#34;&gt;The definitive timeline for the Google Summer of Code program with the exact time of the student application deadline&lt;/a&gt; should be consulted by interested students. Applications for the Liquid Galaxy Project’s GSoC program should be emailed to &lt;del&gt;lg-gsoc@endpoint.com&lt;/del&gt;.&lt;/p&gt;
&lt;p&gt;The Liquid Galaxy GSoC 2013 Ideas Page is at &lt;a href=&#34;https://web.archive.org/web/20130426033629/http://code.google.com/p/liquid-galaxy/wiki/GSoC2013Ideas&#34;&gt;http://code.google.com/p/liquid-galaxy/wiki/GSoC2013Ideas&lt;/a&gt;. We are interested in project proposals based on all the topics listed there and in other ideas from students for projects that will advance the capabilities of Liquid Galaxy. This past year has seen wonderful advances on the Liquid Galaxy, with great improvements in the display of Street View, panoramic photography and video, Google Maps, and more. This summer we will have weekly Hangouts for all students and mentors and other interested community members. The Hangouts will provide concrete support for our students in their projects.&lt;/p&gt;
&lt;p&gt;The FAQ for the 2013 Google Summer of Code program is located at &lt;a href=&#34;https://web.archive.org/web/20130609145950/https://google-melange.appspot.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page&#34;&gt;https://google-melange.appspot.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are a student with programming chops who likes Open Source software you should look at the Google Summer of Code program and apply to one or more of the great projects in the program. If you know of students who you think would be a good fit for the program you’ll be doing a good deed by encouraging them to check it out. And by all means, if you are interested in the Liquid Galaxy Project jump in and contact us!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Website Performance Boot Camp at UTOSC 2012</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2012/05/website-performance-boot-camp-at-utosc/"/>
      <id>https://www.endpointdev.com/blog/2012/05/website-performance-boot-camp-at-utosc/</id>
      <published>2012-05-21T00:00:00+00:00</published>
      <author>
        <name>Jon Jensen</name>
      </author>
      <content type="html">
        &lt;p&gt;I’ll keep brief my last post about this year’s Utah Open Source Conference.&lt;/p&gt;
&lt;p&gt;I was asked to give on both day one and day two a talk called “Website Performance Boot Camp” which carried this brief description:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What’s the difference between a snappy website and a sloth that you turn away from in frustration? A lot of little things, usually. It’s rarely worth doing 100% of the optimization you could do, but getting 75% of the way isn’t hard if you know where to look.&lt;/p&gt;
&lt;p&gt;We’ll look at HTTP caching, compression, proxying, CDNs, CSS sprites, minification, and more, how to troubleshoot, and what’s best to leave alone when you have limited time or tolerance for risk.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Here is the video recording of the first time I presented the talk. (The technician noted its audio was “a little hot”.)&lt;/p&gt;
&lt;iframe allowfullscreen=&#34;&#34; frameborder=&#34;0&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/ItkF8V7DzyQ?rel=0&#34; width=&#34;560&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Use this &lt;a href=&#34;https://www.youtube.com/watch?v=ItkF8V7DzyQ&#34;&gt;Website Performance Boot Camp&lt;/a&gt; direct YouTube video link if the embedded video doesn’t work for you.&lt;/p&gt;
&lt;p&gt;The slides for this &lt;a href=&#34;https://jon.swelter.net/talks/utosc-2012/website-performance-boot-camp.html&#34;&gt;Website Performance Boot Camp&lt;/a&gt; presentation are available.&lt;/p&gt;
&lt;p&gt;Thanks again to the conference organizers and the other speakers and sponsors, and the nice venue &lt;a href=&#34;https://www.uvu.edu/&#34;&gt;Utah Valley University&lt;/a&gt;, for making it a great conference!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>UTOSC Recap</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2012/05/utosc-recap/"/>
      <id>https://www.endpointdev.com/blog/2012/05/utosc-recap/</id>
      <published>2012-05-10T00:00:00+00:00</published>
      <author>
        <name>Josh Tolley</name>
      </author>
      <content type="html">
        &lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: center;&#34;&gt;&lt;a href=&#34;/blog/2012/05/utosc-recap/utos-logo.png&#34; imageanchor=&#34;1&#34; style=&#34;clear:right; float:right; margin-left:1em; margin-bottom:1em&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;100&#34; src=&#34;/blog/2012/05/utosc-recap/utos-logo.png&#34; width=&#34;257&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I spent three days last week attending the &lt;a href=&#34;https://web.archive.org/web/20120525040559/http:/conference.utos.org/&#34;&gt;Utah Open Source Conference&lt;/a&gt;, in company with &lt;a href=&#34;/team/josh-ausborne/&#34;&gt;Josh Ausborne&lt;/a&gt; and &lt;a href=&#34;/team/jon-jensen/&#34;&gt;Jon Jensen&lt;/a&gt;. Since End Point is a “distributed company”, I’d never met Josh Ausborne before, and was glad to spend a few days helping and learning from him as we demonstrated the Liquid Galaxy he has &lt;a href=&#34;/blog/2012/05/end-point-at-utah-open-source/&#34;&gt;already written about&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This time around, the conference schedule struck me as being particularly oriented toward front-end web development. The talks were chosen based on a vote taken on the conference website, so apparently that’s what everyone wanted, but front-end stuff is not generally my cup of tea. That fact notwithstanding, I found plenty to appeal to my particular interests, and a number of talks I didn’t make it to but wished I had.&lt;/p&gt;
&lt;p&gt;I delivered two talks during the conference, the first on database constraints, and the second on Google Earth and the Liquid Galaxy as they apply to geospatial visualization (slides &lt;a href=&#34;https://josh.endpointdev.com/dont-do-that.pdf&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://josh.endpointdev.com/mighty-maps.pdf&#34;&gt;here&lt;/a&gt;, respectively). Though I couldn’t get past the feeling that my constraints talk dragged quite a bit, it was well received. Where possible I kept it as database-agnostic as possible, but no talk on the subject would be complete without mentioning PostgreSQL’s innovative &lt;a href=&#34;https://www.postgresql.org/docs/current/static/ddl-constraints.html#DDL-CONSTRAINTS-EXCLUSION&#34;&gt;exclusion constraints&lt;/a&gt;. Their applicability to scheduling applications, by easily preventing things like overlapping time ranges, seemed particularly interesting to one attendee with recent experience writing such an application. Should I have opportunity to deliver the talk again, it will definitely include more examples of some of the more overlooked constraint types, as well as a more detailed description of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Surrogate_key&#34;&gt;surrogate vs. natural keys&lt;/a&gt;, which generated quite a bit of discussion after I mentioned it in passing.&lt;/p&gt;
&lt;p&gt;My mapping talk was less enthusiastically attended, which may well be due to the topic or the speaker, but it was also scheduled at 6:00 PM, in the last slot of the day, and I expect many attendees had gone home. UTOSC features an unusually high number of attendees with young families, compared to most conferences I’ve attended, and clears out relatively rapidly toward evening. The last day’s tracks tend to be family-focused specifically because of all the parents who want to bring their children, and included hands-on labs, board game sessions, and child-friendly demonstrations.&lt;/p&gt;
&lt;p&gt;Sparse attendance notwithstanding, I enjoyed introducing my audience to Google Earth’s KML language, the Kamelopard library I’ve been working on to facilitate making KML, and some of the applications of Google Earth for visualization. We moved the Liquid Galaxy from our display booth to the classroom for my presentation; I expect it was one of the more involved demonstrations in any talk, and certainly deserves honorable mention for being a live demo that actually worked.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>SeniorNet</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2011/06/seniornet/"/>
      <id>https://www.endpointdev.com/blog/2011/06/seniornet/</id>
      <published>2011-06-07T00:00:00+00:00</published>
      <author>
        <name>Jeff Boes</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;a href=&#34;http://www.seniornet.com/&#34;&gt;SeniorNet&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;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.*&lt;/p&gt;
&lt;p&gt;*I’m among the very oldest, if not the actual oldest of the End Point crew, having begun my computer experience in the days of punch cards. That’s one of the reasons I’m acceptable to SeniorNet, because they prefer their instructors and coaches to be contemporaries of their students.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Postgres Bug Tracking - Help Wanted!</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2011/05/postgres-bug-tracking-help-wanted/"/>
      <id>https://www.endpointdev.com/blog/2011/05/postgres-bug-tracking-help-wanted/</id>
      <published>2011-05-29T00:00:00+00:00</published>
      <author>
        <name>Greg Sabino Mullane</name>
      </author>
      <content type="html">
        &lt;p&gt;Once again there is talk in the Postgres community about adopting the use of a bug tracker. The latest &lt;a href=&#34;https://web.archive.org/web/20110825004033/http://postgresql.1045698.n5.nabble.com/How-can-I-check-the-treatment-of-bug-fixes-td4431752.html&#34;&gt;thread, on pgsql-hackers&lt;/a&gt;, 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:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Someone finds a bug1. They send an email to &lt;a href=&#34;mailto:pgsql-bugs@postgresql.org&#34;&gt;pgsql-bugs@postgresql.org&lt;/a&gt; &lt;strong&gt;OR&lt;/strong&gt; they use the web form, which grabs a sequential number and mails the report to &lt;a href=&#34;mailto:pgsql-bugs@postgresql.org&#34;&gt;pgsql-bugs@postgresql.org&lt;/a&gt;. Nothing else is done/stored, it just sends the email.1. Someone replies about the bug &lt;strong&gt;OR&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As you can see, there is some room for improvement there. Some of the most major and glaring holes in the current system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No way to search previous / existing bugs&lt;/li&gt;
&lt;li&gt;No way to tell the status of a bug&lt;/li&gt;
&lt;li&gt;No way to categorize and group bugs (per version, per platform, per component, per severity, etc.)&lt;/li&gt;
&lt;li&gt;No way to know who is working on a bug&lt;/li&gt;
&lt;li&gt;No way to prevent things from slipping through the cracks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Luckily, the above problems have been solved for many many years now but a wide variety of bug tracking software. There have traditionally been three problems to getting a bug tracker working for the Postgres
project:&lt;/p&gt;
&lt;h3 id=&#34;inertia&#34;&gt;Inertia&lt;/h3&gt;
&lt;p&gt;The current system is, in a very literal sense, “good enough”, so it’s hard to impose the inevitable short-term pain of a new system when there always seem to be more pressing matters to attend to.&lt;/p&gt;
&lt;h3 id=&#34;doesnt-make-julienne-fries&#34;&gt;Doesn’t Make Julienne Fries&lt;/h3&gt;
&lt;p&gt;Everyone wants a different set of features, and getting all the hackers involved to agree on even a simple subset of desired features is pretty difficult. This is sort of similar to the crusade by myself and others to get git as the replacement version control system; there were some strong voices for competing systems (e.g. mercurial).&lt;/p&gt;
&lt;h3 id=&#34;who-will-put-the-bell-on-the-cat&#34;&gt;Who Will Put the Bell on the Cat?&lt;/h3&gt;
&lt;p&gt;Everyone talks about the problem, and there have even been some attempts over the years to implement some sort of system, but the problem remains that setting up such a system, getting it smoothly integrated into the project’s work flow, and then maintaining said system is a non-trivial task. Especially when you can’t be assured of buy-in from some of the major players.&lt;/p&gt;
&lt;p&gt;I’m hopeful that the recent thread indicates a slight shift of late in global acceptance of the need for a bug tracking system. The question is, which one, and who is going to take the time to write something? I’m really hoping
someone who has been lurking in the background will step up and help create something wonderful (okay, we can start with ‘decent’ :) Perhaps even someone with experience setting up bug tracking systems. Certainly Postgres must be one of the last major open source projects without a bug tracker; there is plenty of hard-won experience out there to be learned from. It would also be ideal if the person or persons was &lt;em&gt;not&lt;/em&gt; a Postgres hacker of any sort, as taking the time to build and maintain this system would definitely take time away from their other hacking tasks. On the other hand, one could argue that a bug tracker is a vital piece of project infrastructure that is potentially as important as any other work that goes on. I certainly think so.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Postgres Build Farm Animal Differences</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2011/03/postgres-build-farm-animal-differences/"/>
      <id>https://www.endpointdev.com/blog/2011/03/postgres-build-farm-animal-differences/</id>
      <published>2011-03-29T00:00:00+00:00</published>
      <author>
        <name>Greg Sabino Mullane</name>
      </author>
      <content type="html">
        &lt;p&gt;I’m a big fan of the &lt;a href=&#34;https://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto&#34;&gt;Postgres Build Farm&lt;/a&gt;, a distributed network of computers that are constantly installling, building, and testing Postgres to detect any problems in the code. The build farm works best when there is a wide variety of operating systems and architectures testing. Thus, while I have a rather common x86_64 Linux box available for testing, I try to make it a little unique to get better test coverage.&lt;/p&gt;
&lt;p&gt;One thing I’ve been working on is &lt;a href=&#34;https://clang.llvm.org/&#34;&gt;clang&lt;/a&gt; support (clang is an alternative to gcc). Unfortunately, the latest version of clang has a bug that prevents it from building Postgres on Linux boxes. I submitted a small patch to the Postgres source to fix this, but it was decided that we’ll wait until clang fixes their bug. Supposedly they have in their svn head, but I’ve not been able to get that to compile successfully.&lt;/p&gt;
&lt;p&gt;So I also just installed &lt;a href=&#34;http://gcc.gnu.org/gcc-4.6/changes.html&#34;&gt;gcc 4.6.0&lt;/a&gt;, the latest and greatest. Installing it was not easy (nasty problems with the mfpr dependencies), but it’s done now and working. It probably won’t make any difference as far as the results, but at least my box is somewhat different from all the other x86_64 Linux boxes in the farm. :)&lt;/p&gt;
&lt;p&gt;I’ve asked before on the list (with no response) about what sort of configuration changes could be made to expand the range of testing. The build farm itself provides a handful of things to choose from, and &lt;a href=&#34;https://buildfarm.postgresql.org/cgi-bin/show_status.pl&#34;&gt;most of the animals in the farm have most of them configured&lt;/a&gt; (I have everything except “pam” and “vpath” enabled). However, one thing I’ve thought about changing is NAMEDATALEN. It’s basically a compile-time option that sets the maximum number of characters things like table names can have. It is set by default to 64, while the SQL spec wants it to be 128. The problem is that this causes some tests to fail, as they have a hard-coded assumption about the length. The real problem of course is that Postgres’ ‘make check’ is a very crude test. I’ve got some ideas on how to fix that, but that’s another post for another day. So, anyone have other ideas on how to make my particular build farm member, and others like it, more useful?&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>An Odd Reason Why I Like Google Wave</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2010/08/odd-reason-why-i-like-google-wave/"/>
      <id>https://www.endpointdev.com/blog/2010/08/odd-reason-why-i-like-google-wave/</id>
      <published>2010-08-30T00:00:00+00:00</published>
      <author>
        <name>Jon Jensen</name>
      </author>
      <content type="html">
        &lt;p&gt;Others have noted reasons why Google might have decided Wave is a failure, but for me the most significant reason is that when it was announced at Google I/O 2009, it needed to be open to all interested parties. With the limited sandbox, followed by the limited number of accounts given out, there was no chance for the network effect to kick in, and without that, a communication tool no matter how useful will not gain much traction.&lt;/p&gt;
&lt;p&gt;I still use Google Wave, along with several of my co-workers. Wave has great real-time collaborative editing, and for me fills a useful niche between email, wiki, and instant messaging.&lt;/p&gt;
&lt;p&gt;However, every once in a while a completely different advantage hits me: The absurdly, almost comically bad, threading and quoting in regular email. This is both a technical problem with email clients that handle quoting stupidly, and a problem of conventions with people quoting haphazardly, too much, or with wacky trimming and line wrapping. To say nothing of multipart email with equally hideous plain text and bloated HTML parts.&lt;/p&gt;
&lt;p&gt;I munged the text of the following example from a mailing list to show an example. It&amp;rsquo;s not the most egregious mess of quoting, and had no pile of attachments as sometimes happens, but it shows how messy it can be.&lt;/p&gt;
&lt;p&gt;In Wave, replies and quoting were quite a bit better. Not perfect, but nothing like this. If Wave goes away, I&amp;rsquo;m not sure when we&amp;rsquo;ll see another candidate to compete with email that is likewise an open protocol with a solid reference implementation that&amp;rsquo;s free of charge to use. It&amp;rsquo;s a shame.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Date: Mhx, 3 Hqi 1499 37:76:16 +1546
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;From: Pswr iwo zvs Aburf &amp;lt;umcr@9sehh.rcs&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To: gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subject: Re: [gdgmguezfet-list] Lgj Cjroiojezg: Jmxc Mezfcfeqh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; -----Original Message-----
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; From: gnszgqzspfx-whto-zhnmchx@cpevwgofsv.isj [mailto:iiyqktwjujg-fnlq-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; evkvpty@eczdtgakvm.oac] Jl Waopuq Vq Exho Jxprx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Sent: Ojamlrtxg, Hkzn 16, 2906 41:72 AE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; To: gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Subject: Re: [gdgmguezfet-list] Bqr Dqjdiarbbf: Usdq Frweivcmz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Turlmyx Mhek rhh gye Llkat (utbm@6pgbr.bfb):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; -----Original Message-----
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; From: iilxvyjwayx-bllf-ptrecjc@heaukjmdkq.htj [mailto:rrnjpeneara-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; ooxd-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; xalsxai@hxugschjny.xsq] Re Fvbihv Yz Fhlg Hmcrf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; Sent: Eezdaevyk, Pgyh 99, 9587 0:76 QQ
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; To: gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; Subject: Re: [gdgmguezfet-list] Kld Jzecudkxki: Dstw Tyjekgeah
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; Tdhdojq Atrg wbf mvf Cudfw (wphe@8gwbs.lgu):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; -----Original Message-----
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; From: wrlsvvealuw-wsod-hwwvjdo@ihgudlwfrk.kgs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; [mailto:ckajpyzyzoi-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; ccnq-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; rwmpxyk@ronwonbthg.air] Jn Zubqus Sr Sohf Ovswrrbhd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Sent: Ndasppj, Banc 94, 8862 2:10 KH
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; To: gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Subject: Re: [gdgmguezfet-list] Pbu Zntzwmgimt: Gxel Wdjpzgemo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Sonpxm Kjluxxmr (Itqeg) wrote:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Yxhw xb oftwdhs gtiogosk qkv opusb (yfrtg qxegsju rem
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; qnhmsoox)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; bkv
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; ptqa mq vlyd edtomyuz eikclpf:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; kptd://qfx.bdtqmqabro.chk/opnamgt/oikgome/cwppzfezxru-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; fdpf/1149-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Smxw/9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; 74694.txke
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Lyvuivy, Ucqg!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Dpynbi Unpnk!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Gl xu syc iqh.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; S oztdn agm hagxp X okqf hazgjohvhx kijip lxpq djna.  Te ffc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; myuoxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; kjisroyk cb x wdvrg jp lkdeqqw gf c xdx bpfs sicpb giohed cz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; paz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; ntrtb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; boqsnoxc cazeupca msxscw dqqdv piuvapku paahujdimn bjb afueakh.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Eefj ik ss ejmlkis edchi inkfg puiqovazf y gflmel ol etnvgxyz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; fl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; gxp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; fnicp fndjc.  Z xjqb zgnb asfpjjm ht kp aiiupstbsh rijcacj
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; xewre
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; qof.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; M talpk mpoj bzprpown oywg we zxz qtu fjeb yydclxzr uts gjxp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; CynkyOmnareHvmdyl hlclxaxvs pw cn ehqxfd krqs gfeq bwn ywzynpo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; qheelwu busk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; amlptm, ao qxpb qqal udh yanqoin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; HboiyErxaftByifwd  prka cmu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; Hhmtun lujf emfcfwlysstn, qoplid jpt mdnfb imbuyy. A pr rhb xl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; oulydlqvu byxo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; mjfossxp zsm neqna uxvjou sby b odo ibuc.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; X zagkk v toevkk vpwfmon idirul dx:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;   MfIrpktz vmqklb jolquatuzjqz ngmffe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; dcff ri kdrice xcem vx g fjuxp qnw ekmylkjs nhdrjtlj. Zh osuvxnx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vpe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; jedp khbfuhibx jlupzdsnwen jv ljkhy kqoyeh, ncoh bgr uok ylas.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; Bvy iopef kuje&amp;#39;s aiec mcf tlvyp msvsw hl fti ghqqn lwff? Crdwj qrgi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; gpnavlq
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; hljshpg qgq kocel knrp kgmshwlbms cq wztz zkbu mbpwq ph pynzqpsd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; ahjjy,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; nplwl gms xaftc vtw srri uw nzbv dv tgt noo hnfmokm p katlc xmskoss $
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; mukgegrqu pogr.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Scciwgd kj zjfbrecy miu yscw npzmb iu. IbTibflw * tkckv rchxz cyhu. 5-)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; U fbfaejarxux pd eexpwcme so=wai-yyh-zjoocg + [mzed-rxjf] gq n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; xollrj slmmiq ffe suhvjcjyam LfFzhvap ja wxqd eviaql se rmm ic W uj
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; dcjtmbyss. Xtbvmmhl lkzsv sxfegic bd lho devcb bcmlh&amp;#39;h xmzi xn js
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; uweoh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; jtucuu rwpmtme zhprrwd zc tnjhdrqz ergbp rkrzb xzjypfz snrzaqhti.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; Duodc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; ivzl vq fjicz aof bxg mzemgedp kscj gbtzcjf. Ugd ti vnh ptoa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; bfnshu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; rq k
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; xbkhi &amp;#39; quc jzvm xfkfqcmx &amp;#39; pk qgo om hoszfrv dxbc cmw cbhfsa fwb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; ntc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; &amp;gt; bezs-bkjdnw zcs gb. 0-)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; Phkq ynohufr jtwq xe pqzyco lkoqn qzvm ggcfqfeqxh hqgw pknxgoma
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; wtblpu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; lisdkw xw atok?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Ykxbr auksxkx auujvb. Qbefjsg kemw odhe e wsmmdvpy lhfjd jz kne
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;#34;pqynmmwp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; bjoqrd&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Gaosgf&amp;#39;m aoih tu tw vhqwkl zp dotgpa:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GpclzPtypqeVknqkp owcrmhgm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; Fzjhf vor hdabr sxzwtylu ox hze xdabn vdo tyzssjor fh rnnol gp ny i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; arhnfo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; bvv fd ccvjz jlki xfzu ebcwt tr htbatha zmro zb jh mxnz nrugdz o yap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; keor
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; nahe vdvfh xog?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Fp pmg qinel okk qrfju utzmmuuib, dnsy. Zn zqh jfccu gji hqkt ba eiu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Xsomgqxyldd, edtz.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; &amp;gt; Fbf qjh segbu tjb lsfwcewqmh fs qimdvdxdp, mzb xxdl maf ebgujoheazk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; mgis? ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; --
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Dbnq Chiauz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Zrwintky -- Amrtws Mgztvpfpbwp Jfocmutnso    http://arn.oosbscvt.inw/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; eocsk +5.415.700.6883  &amp;lt;whal@jecqxmyf.hoy&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; Nmejbtdh vxani: Nguu xh cwziz bqjtb.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; _______________________________________________
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; gdgmguezfet-list mailing list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; http://ivd.xitxowuodc.eci/vccqskc/xettnigw/bliyqvhrdse-list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;_______________________________________________
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gdgmguezfet-list mailing list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gdgmguezfet-list@lykkkafnnj.wjo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http://ivd.xitxowuodc.eci/vccqskc/xettnigw/bliyqvhrdse-list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/whal@jecqxmyf.hoy&amp;gt;&amp;lt;/umcr@9sehh.rcs&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aaaah! My eyes!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>SouthEast LinuxFest 2010</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2010/06/southeast-linuxfest-2010/"/>
      <id>https://www.endpointdev.com/blog/2010/06/southeast-linuxfest-2010/</id>
      <published>2010-06-16T00:00:00+00:00</published>
      <author>
        <name>Brian J. Miller</name>
      </author>
      <content type="html">
        &lt;p&gt;This past weekend I took a day to visit lovely, uh, Spartanburg, SC for the 2nd Annual &lt;a href=&#34;http://www.southeastlinuxfest.org/&#34;&gt;SouthEast LinuxFest&lt;/a&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;I’ve yet to live in an area of the country that either embraces Open Source Software (OSS) to a significant degree (Portland for instance) or is significantly populated (New York, San Francisco) or has significant university representation (Ann Arbor, Cambridge) which would allow me to get well connected in person or have large events to attend about the platforms I use regularly. Such is life, but it makes it difficult to feel engaged in the community aspects of many of the projects whose products I use on a daily basis. It also makes it difficult to learn in a quick fashion even the most basic elements about a new technology or practice that might be making its rounds at any given moment. Much to my surprise even here in “The South” there is a group of volunteers putting on a very good conference, not exceptional, not huge, but good. And for the second year, growing, and from the conversations I had with past participants improving!&lt;/p&gt;
&lt;p&gt;The nature of the conference, i.e. a LinuxFest, makes the topic range incredibly varied as how can you have a targeted conference about all topics of a particular ecosystem as large as Linux is these days, but there were a couple of central themes—​virtualization, clouds, and scalability seemed to be the common threads. (And how everyone is sick of hearing the word “cloud”, but that was more unofficial.) One interesting (to me) thing I noticed was that git was talked about as if it was ubiquitous but there was a distinct lack of talks on it, has it and version control really come this far this fast?&lt;/p&gt;
&lt;p&gt;The two keynotes revolved around community building efforts and a couple of the talks I attended had a similar bent. There were six sessions per time slot on Saturday and Sunday which helped to keep most of them small but provide something of interest for everyone throughout the day. Obviously I was only able to attend a small fraction of topics and most I chose because of something in particular that affects my daily work.&lt;/p&gt;
&lt;p&gt;I was surprised to find a lack of “NoSQL” talks given the hype surrounding such data stores, but fortunately the first talk I attended, “Which Database Should You Choose?” ended up being a talk about the suggestion of an alternative name for “NoSQL” databases by the author of SQLite. He suggested the name be changed to “Postmodern Databases” and included a number of very funny but seemingly accurate comparisons to the postmodern philosophical and artistic movements. In the end the talk provided a nice overview of just what the NoSQL hype is all about, and despite the hype, just how important traditional RDBMS are and will continue to be. See “Why consistency is important when dealing with people’s money”&amp;hellip;or “how an expressive and full featured language makes interfacing complex data structures simpler” (even if it is one that people love to hate).&lt;/p&gt;
&lt;p&gt;After the DB talk I moved on to a personal history of OSS from Jon “Maddog” Hall that was enjoyably informative though not necessarily overly practical, it did make me reflect on the fact that I’ve been running Linux for 13 years and that that is a frighteningly long time in this particular technology.&lt;/p&gt;
&lt;p&gt;After which I attended a talk about Postfix by its author that was generally useful to someone that has “run” mail servers in the past, and dealt with SMTP from the development side, but knows that mail is more complex than any non-system admin could possibly handle. A nice overview, but it reconfirmed that I should leave this stuff to someone smarter than myself.&lt;/p&gt;
&lt;p&gt;From there I moved to a talk about the Xen virtualization platform that was targeted at building the community around Xen.org, but my primary takeaway was this thing called the Hypervisor and a better understanding of just how Xen (and the other common platforms) implement virtualization on a hardware system. As a developer on a day-to-day basis I have familiarity with running virtual machines, and I can certainly see the benefits, but I’d had very little exposure to even the basics of how they are implemented under the hood and just the short part of this talk on the Hypervisor provided a means for doing my own research after the conference (a good goal for any conference talk). Speaking of which, reading the &lt;a href=&#34;https://en.wikipedia.org/wiki/Hypervisor&#34;&gt;Hypervisor page on Wikipedia&lt;/a&gt; is a nice place to start.&lt;/p&gt;
&lt;p&gt;Following that I attended a talk on Puppet by the product manager at PuppetLabs. And how could I go a whole day without a talk on a CMS web platform, so I jumped into a Drupal talk.&lt;/p&gt;
&lt;p&gt;In general a well rounded and informative day. The usual spate of informal conversations between talks and at lunch provided nice filler and a chance to interact with other OSS users of varying backgrounds and experience levels. The conference despite a few hiccups here and there was well run and kept to the schedule. As far as I could tell all sessions were videotaped so should start to appear online soon, and most presenters indicated their slides would be available shortly.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>The PGCon “Hall Track”</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2010/05/pgcon-hall-track/"/>
      <id>https://www.endpointdev.com/blog/2010/05/pgcon-hall-track/</id>
      <published>2010-05-25T00:00:00+00:00</published>
      <author>
        <name>Josh Tolley</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;a href=&#34;/blog/2010/05/pgcon-hall-track/image-0-big.png&#34; onblur=&#34;try {parent.deselectBloggerImageGracefully();} catch(e) {}&#34;&gt;&lt;img alt=&#34;&#34; border=&#34;0&#34; id=&#34;BLOGGER_PHOTO_ID_5475232667283865314&#34; src=&#34;/blog/2010/05/pgcon-hall-track/image-0.png&#34; style=&#34;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of my favorite parts of PGCon is always the “hall track”, a general term for the sideline discussions and brainstorming sessions that happen over dinner, between sessions (or sometimes during sessions), and pretty much everywhere else during the conference. This year’s hall track topics seemed to be set by the developers’ meeting; everywhere I went, someone was talking about hooks for external security modules, MERGE, predicate locking, extension packaging and distribution, or exposing transaction order for replication. Other developers’ pet projects that didn’t appear in the meeting showed up occasionally, including unlogged tables and range types. Even more than, for instance, the &lt;a href=&#34;https://wiki.postgresql.org/wiki/PgCon_2010_Developer_Meeting&#34;&gt;wiki pages describing the things people plan to work on&lt;/a&gt;, these interstitial discussions demonstrate the vibrancy of the community and give a good idea just how active our development really is.&lt;/p&gt;
&lt;p&gt;This year I shared rooms with Robert Haas, so I got a good overview of his plans for &lt;a href=&#34;http://rhaas.blogspot.com/2010/05/global-temporary-and-unlogged-tables.html&#34;&gt;global temporary and unlogged tables&lt;/a&gt;. I spent a while with &lt;a href=&#34;https://web.archive.org/web/20100512170404/http://thoughts.j-davis.com/&#34;&gt;Jeff Davis&lt;/a&gt; looking through the code for exclusion constraints and deciding whether it was realistically possible to cause a starvation problem with many concurrent insertions into a table with an exclusion constraint. I didn’t spend the time I should have talking with &lt;a href=&#34;https://twitter.com/tapoueh&#34;&gt;Dimitri Fontaine&lt;/a&gt; about his PostgreSQL extensions project, but if time permits I’d like to see if I could help out with it. Nor did I find the time I’d have liked to work on &lt;a href=&#34;http://parrot.org/&#34;&gt;PL/Parrot&lt;/a&gt;, but I was glad to meet Jonathan Leto, who has done most of the coding work thus far on that project.&lt;/p&gt;
&lt;p&gt;In contrast to other conferences, I didn’t have a particular itch of my own to scratch between sessions. During past conferences I’ve been eager to discuss ideas for multi-column statistics; though that work continues, slowly, time hasn’t permitted enough recent development even for the topic to be fresh in my mind, much less worthy of in-depth discussion. This lack of one overriding subject turned out to be a refreshing change, however, as it left the other hall track subjects less filtered.&lt;/p&gt;
&lt;p&gt;Finally, it was nice to spend time with co-workers, and in fact to meet (finally) in person the &lt;a href=&#34;/blog/authors/greg-sabino-mullane/&#34;&gt;one of the “Greg”s&lt;/a&gt; I’d talked to on the phone many times, but never actually met in person. Various engagements in my family or his have gotten in the way in the past. One of the quirks of working for a distributed organization&amp;hellip;&lt;/p&gt;
&lt;p&gt;Update: Fixed link to developers’ meeting wiki page, thanks to comment from roppert&lt;/p&gt;

      </content>
    </entry>
  
</feed>
