Blog Archive

Building a custom login for your church website using the API

Posted By: Tracy Mazelin on November 29, 2011

Background

The Application Programming Interface (API) of Fellowship One provides a way for churches to leverage their own church data within custom built applications. This tutorial is going to outline how you can use our API to build a custom login to your church website by authorizing the user based on their WebLink or InFellowship login credentials. This is a 2nd party application and this post builds upon the foundation laid by Jas Singh here. You will find links to the PHP oAuth library and more detail about 2nd party authorization in his post.

Step 1: Build a login form

image

First, you will need to build a login form requesting a username and password. If the majority of your church has already converted their WebLink login to an InFellowship login, then you will want to ask for their email address…

Read the whole entry...
Posted In: API, Tips
Comments:  Comments

The Agile Triangle

Posted By: Lance Dacy on July 27, 2011



Jim Highsmith presented to DFW Scrum on July 26, 2011. We are grateful for his time and energy to come by and educate us on the true Agile Triangle and how to balance cost, scope, and schedule (which he ascertains are actually constraints, not foundational pieces of the Iron Triangle).

Fellowship Technologies is a proud sponsor of DFW Scrum as they strive to concentrate on various "bands" in Scrum. The process is small and simple, and relatively easy to understand. Doing it... well that is another story altogether. Scrum says "start with a backlog, prioritize it, estimate it, commit to a piece of it in a sprint, deliver potentially shippable product in the end, look back on ways to improve, rinse and repeat". I also add that our job…

Read the whole entry...
Posted In: Tips
Comments: 0  Comments

Conversation Paralysis

Posted By: Lance Dacy on July 7, 2011

Scrum teaches us that feature requests (user stories) are to be written in the language of the customer (As <some role> I need <some feature> so that I can <get some value>.) These small sentences actually pack a load of information for the technical team reading them and it forces the user to really think about their feature and what they are trying to accomplish. All too often, even the customer doesn't know exactly what they want, so this format helps them to succinctly describe their problem.

The beauty of the user story however is not necessarily the language or format. The user story is actually the place holder for the conversation that needs to take place. The team can then solve the user's problem by talking through the solution with the entire team's knowledge and wisdom at work (all the while conversing with the…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Building a Deployment Pipeline

Posted By: Nick Floyd on October 5, 2010

In Development at Fellowship Tech, one thing we’ve been working on is an automated build pipeline.  This allows us to build our software and deploy it to our environments with no human intervention.  The complete automation of our builds and deployments is called a deployment pipeline or build pipeline.  It’s called a pipeline because once the build is inserted into the pipeline, a set of mostly automated process act upon it and pending the passing/approval of the results of that process it moves on to the next stage.  Let’s examine the stages of the build process.

Read the whole entry...
Posted In: Tips
Comments:  Comments

The World of Dev Craft

Posted By: Lance Dacy on September 28, 2010

I joined Fellowship Technologies in 2004, so feel I have been exposed to the Software Development Craft for quite a while now. While my degree was in Computer Science, my past physical work experience did not involve Software Development until I joined FT. So, I may be completely off-base with my observation, but I woke up this morning with the need to blog on this topic to help with my research / hypothesis.

The Software Development craft is amazing in that most people seem to incorporate community in their day-to-day work. I don’t mean they use Facebook or Twitter (although most of them do). I mean that these groups of people are always willing to put an idea in the public space, critique ideas so that people can improve themselves, and organize a broad self-help support community for just about any issue that you face while developing software.

Looking back…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Running Tests in Parallel with Selenium

Posted By: Matthew Sneeden on September 22, 2010

The ability to run multiple tests in parallel is key when creating large, scalable, automated test suites.  It is even more important when we begin to enter the world of continuous integration and deployment.

Luckily, users of Selenium are able to a accomplish this, with a few modifications and potential restructuring of existing tests.  “Out of the box” Selenium is coupled with the NUnit framework.  For this example, we will be using the MbUnit framework which is included with the Gallio automation platform http://www.gallio.org/.  for a C# implementation of Selenium.

After installing Gallio, any references to NUnit in existing and/or new test projects must be replaced with MbUnit.  MbUnit includes an attribute known as the ‘Parallelizable’ attribute that can be applied at either the test or test fixture level.  As you may have guessed from the name, this is the attribute which designates a test, or test fixture as being…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Abstracting Your Code to Remove Duplication

Posted By: Jingyi on September 14, 2010

Every developer knows duplicated code is bad. We should avoid duplicating code. The following code snippets are from my own work.


public SomeMethod() {
string hiddenFunds = ".....";
string hiddenSubFunds = ".....";
string hiddenPledgeDrives = ".....";

proxy.Funds = ToFunds(hiddenFunds);
proxy.SubFunds = ToSubFunds(hiddenSubFunds);
proxy.PledgeDrives = ToPledgeDrives(hiddenPledgeDrives);

}

private FundCollection ToFund(string hidden) {
var ret = new FundCollection();

if(!hidden.IsEmpty()) {
String[] pairs = hidden.Split(';');
foreach (var pair in pairs) {
string[] arr = pair.Split(',');
collection.Add(new Fund {ID = int.Parse(arr[0]), Name = arr[1] });
        }
  }
  return ret;
}

private SubFundCollection ToSubFunds(string hidden) {
var ret = new SubFundCollection();

if(!hidden.IsEmpty()) {
String[] pairs = hidden.Split(';');
foreach (var pair in pairs) {
string[] arr = pair.Split(',');
collection.Add(new SubFund {ID = int.Parse(arr[0]), Name = arr[1] }); Read the whole entry...
Posted In: Tips
Comments:  Comments

Documentation in an Agile Environment

Posted By: Tara Coulson on September 8, 2010

Fellowship Technologies’ Product Development group has been developing features and functionality for Fellowship One using Agile Software Development for two years. The methodologies involved with Agile:

  • encourage frequent review and adaptation
  • promote teamwork, self-organization and accountability
  • promote rapid delivery of quality software
  • focuses efforts on customer needs and company goals

Scrum teams form to work on particular user stories requested by a product owner during a two or three week sprint. Each scrum team is typically made up of developers, quality assurance and documentation specialists. The goal for the end of each sprint is to, as a team, work to produce working software.

How Does Documentation Fit? Lessons Learned

The very first lesson I had in this subject is that there are two types of documentation and they are completely different things! The first type of documentation is project related or, in other words, what must go into the…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Drowning in Debt

Posted By: Michael Eisworth on August 31, 2010

In Software Development, much like in Finance, having too much debt can be a real burden.  In developing software there are trade-offs and reprioritization so that you can deliver the most business value in the shortest amount of time. When a feature, fix, or enhancement is deemed necessary but not urgent, and is thus delayed, there is a future liability created. Likewise when functionality is implemented in a way that will have to be refactored in the future an expense is incurred. This expense is called technical debt and refers to the eventual, additional development that has to be done at some point in the future to finish a particular piece of software.

It is easy to draw parallels between technical debt and financial debt. Most people understand the concept once explained even though the actual technical debt can be difficult to identify since shareholders may have different opinions as…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Intro to Ruby on Rails

Posted By: Jas Singh on August 24, 2010

Ruby on Rails, often shortened to Rails or RoR, is an open source web application framework for the Ruby programming language that makes it easier to develop, deploy and maintain web apps. Rails uses the Model-View-Controller (MVC) architecture pattern to organize application programming.
It includes tools that make common development tasks easier “out of the box”, such as scaffolding that can automatically construct some of the models and views needed for a basic website. Also included are WEBrick, a simple ruby web server, and Rake, which is a build system.

Together with Rails these tools provide a basic development environment. One of Rails’ biggest strengths is metaprogramming, Rails introduces the Active Record framework, a design pattern by Martin Fowler. The rails version of Active Record discovers the columns in a database schema and automatically attaches them to your domain objects using metaprogramming. Rails also relies on convention over…

Read the whole entry...
Posted In: News, Tips
Comments:  Comments

Android & OAuth

Posted By: Kelly Klein on August 10, 2010

If your Android application needs to implement OAuth there are many options available. The one that I’ve used that I like the best is signpost. It’s simplicity allows it to stay out of your way while you focus on implementing your applications functionality instead of worrying about how OAuth works.

Getting Started

The first thing you’ll have to do is download the signpost library. You’ll need both signpost-commonshttp4 as well as signpost-core. Save these to your hard drive in the lib folder of your project. Now add both libraries to the build path of your project and your ready to go.

Here We Go

We need a class that will implement the signpost library to make calls to the API to retrieve our data. The way this is implemented in Fellowship One…

Read the whole entry...
Posted In: Tips
Comments:  Comments

F1 API Static Library with Objective-c

Posted By: Chad Meyer on August 3, 2010

At Dynamic Church 10 Conference I had the opportunity to collaborate with some awesome developers / peeps from around the globe in the church market. Our conversations focused on using objective-c to communicate with the FellowshipOne API in order to build native iPhone applications.

Building an OAuth wrapper no matter what language is not trivial. Remembering all the business rules and connecting all parts together to make properly signed requests can take some time to perfect. Other avenues would be integrating with other third party libraries in hopes that everything their code does works for all scenarios and that it will pass Apples submission tests. Not to mention the fact that iPhone does not take advantage of memory management so the developer is responsible for properly allocating and releasing objects.

After some thought and research, we at Fellowship Technologies decided it would be slick to…

Read the whole entry...
Posted In: Tips
Comments:  Comments

SaaS & BI - The History & Future

Posted By: cutter on June 29, 2010

The concept of Software as a Service, or SaaS was first introduced in 2001 to describe the delivery method of a then-emerging concept, the Application Service Provider, or ASP. An ASP is a company who provides on-demand licensing and access for an application, usually using the internet as a delivery mechanism. As web browsers continue to evolve and become more ubiquitous in the workplace, SaaS solutions are on the rise. Since 2001 the Software as a Service (SaaS) model has matured into a reliable, cost-effective method of delivering software. Once limited to small and medium size businesses, SaaS solutions are increasingly used by large enterprise organizations. SaaS solutions are being offered by an expanding range of software development companies. Even large development organizations who have traditionally used an installed license model are embracing the SaaS model as either a primary or alternative delivery model.

The SaaS model offers ease of…

Read the whole entry...
Posted In: Tips
Comments:  Comments

Getting Started with Android

Posted By: Kelly Klein on June 22, 2010

Do you have an idea for the next revolutionary or “magical” mobile application that will change the world? Do you want this application to run on the premier open mobile operating system, Google® Android™? Are you not sure where to start or what tools you need? Do you want your application compatible with all the various Android handsets on the market?

If you answered yes to those questions, you are in the right place! This blog post will give you some basic information and point you towards sources to help you in designing your application.

Tools

Android is all about openness. So it should be no surprise that the tools needed to create Android applications are open source and available for the 3 main desktop operating systems, allowing you the freedom to develop your application in the environment that works best for you. Google has come up with a Read the whole entry...
Posted In: Tips
Comments:  Comments

Variables in PHP

Posted By: Jas Singh on June 1, 2010

This is the second post of a series of PHP Introduction posts. Be sure to check out the first post, An Introduction to PHP and check back for additional posts in the future to learn all about PHP!

Variable Declaration

A variable always begins with a dollar sign, $, which is then followed by the variable name. eg: $color Variables do not have to be explicitly declared in PHP. Rather, variables can be declared and assigned values simultaneously.

Value Assignment

Assignment by value simply involves copying the value of the assigned expression to the variable assignee. This is the most common type of assignment. A few examples follow:

$color = "red"; $number = 12; 

Reference Assignment

Reference Assignment means that you can create a variable that refers to the same content as another variable does. Therefore, a change to any variable…

Read the whole entry...
Posted In: API, Tips
Comments:  Comments

F1 Check-in on the iPad

Posted By: Nick Floyd on May 26, 2010

We just recently heard that someone had found an app that would allow them to run Fellowship One Check-in on their iPad! After hearing this, we couldn’t resist trying it out on our own to see how it worked, and that’s what we did. The overview of how this is happening is through a Remote Desktop Connection. This means that the iPad is acting as a viewer, showing you what is happening on your full PC. That means this process still requires a computer capable of running check-in, but now you can view/use it on your iPad! So, let’s walk through how we set it up and got it working!

1. Enable remote connections to your Windows Check-in PC
-Go to your Start button and right click on “Computer” and then click on Properties

-Make a note of your computer’s name, you’ll need this…

Read the whole entry...
Posted In: News, Tips
Comments:  Comments

Be the first to get the news & tips!

Posted By: Nick Floyd on May 25, 2010

We think you should subscribe to this blog!



It’s true that one of the reasons we want you to subscribe is because seeing that subscription number grow is just plain fun…it makes us feel good! But we’ve got a lot of reasons why we think it will benefit you too! Here are just a few reasons…

  • There are a lot of smart, full time developers sharing their knowledge here
  • If you want to learn about the API, we talk about it here
  • We talk about things coming up in our product, which is always fun to be the first to know
  • You can learn web development by reading this blog
  • We have fun and even occasionally give things away
  • You get to read our posts in your favorite RSS reader
  • and many, many more! (don’t you always…

    Read the whole entry...
    Posted In: News, Tips
    Comments:  Comments

    An Introduction to PHP

    Posted By: Jas Singh on May 19, 2010

    PHP is a widely used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. This blog post is an attempt to give an overview of the PHP language and it’s various features.  This blog post assumes that you already have a web server (eg: apache) and PHP installed on your box. You can also use some easy to install Apache distributions containing MySQL and PHP such as XAMPP  and MAMP.
    So let’s get started!

    The default delimiter syntax (recommended) opens with <?php and concludes with ?>, like this:

     <?php echo "Hello World!!"; ?> 

    The other alternative syntax requires enabling PHP’s short_open_tag directive, like this:

     <? print "Hello World!!"; ?> 

    When short-tags syntax is enabled and you want to quickly escape to and from PHP to output a…

    Read the whole entry...
    Posted In: API, Tips
    Comments:  Comments

    Working with Pop Up Windows in Selenium

    Posted By: Matthew Sneeden on May 11, 2010

    Like many applications, users commonly interact with popup windows in the normal use of Fellowship One.  Creating test scripts that interact with popup windows posed an interesting problem due to Selenium’s handling of popup windows.  If the popup in question exists as a child browser window (and not a simple alert prompt), Selenium commonly loses its association with the main application window after clicking on a control on a popup window.  As a result, an error occurs when the user attempts a WaitForPageToLoad command after returning to the main window.

    This will result in an error stating that the current frame or window is closed…

    selenium.WaitForPopUp("psuedoModal", "30000"); selenium.SelectWindow("name=psuedoModal"); selenium.Click("btnYes"); selenium.SelectWindow(""); selenium.WaitForPageToLoad("30000"); 

    Instead of interacting with the controls on the popup menu via a Click command use a KeyPress command specifying a JavaScript keycode for Enter (\\13).

    This details the workaround allowing the user to complete the same interaction avoiding…

    Read the whole entry...
    Posted In: Tips
    Comments:  Comments

    List Comprehension

    Posted By: Jingyi on April 20, 2010

    I have decided to take a look at Erlang to see if we can use it in our products to create scalable, fault-tolerant software.  I am reading the book “Programming Erlang: Software for a Concurrent World”.  Here is an example in the book that uses list comprehension to find all the permutation for a list.

     -module(perm). -export([perm/1]). perm([]) -> [[]]; perm(L) -> [[H | T] || H <- L, T <- perm(L -- [H])]. 

    If you have Erlang installed, you can start the shell and run the following test:

     c(perm). %% compile the module perm A = [1, 2, 3]. perm:perm(A). %% will find all the permutation [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 

    Now let’s look at the code. Only two lines of code to find…

    Read the whole entry...
    Posted In: Tips
    Comments:  Comments