Category

Development

Why Hire Domestic Blog Header

Why You Should Hire a Domestic Development Team

By DevelopmentNo Comments

For both startups and enterprises alike, it is common for companies to outsource their software development needs to teams abroad. The draw of these teams is that they can offer their skills at a lower price. However, is cost-cutting worth losing the multitude of benefits from being in close proximity to your development team? The opportunity to hire a domestic development team is key to future success and growth of your company. 

Look No Further than Your Own Backyard

The United States has spent hundreds of millions of dollars in the past few years promoting STEM programs in public education.  We are dedicated to nurturing the next generation of tech experts, including software developers. Baltimore, specifically, is ranked 5th in the top 10 cities for growing startups in the US by Forbes. When it comes to cost, companies might cite that offshore development shops are more affordable. However, there is data to support the fact that the gap between foreign and domestic development prices is decreasing

Advantages of Domestic Software Development

  1. Reduced Development Time When you work with a domestic developer, it is less likely that you will run into frequent roadblocks or errors in code.  By being able to clearly communicate with your development team on a continual basis, the time to market for your software is decreased significantly.  Both parties are able to easily share ideas and iterations without delay. If you work with Byte.lion, we strive to be reachable any time of day. Using tools such as Slack allows us to constantly engage and address the issues our customers face. We want our customers to be in constant communication with our staff  for them to feel confident in our work.  We also want them to have constant input and understanding of the work being done.Why Hire Domestic Software Blog Embedded Image. Development team with computers around a table.
  2. Hands On Attention When you work with a domestic development team, you areable to put a face to the names.  Rather than feeling disconnected from people that live on the other side of the world, you are able to collaborate with your developers through face to face or online interaction. This allows you to have greater rapport with the team, and can spur more fruitful collaboration. Byte.lion begins projects with a face-to-face on-boarding session to establish priorities, finalize a meeting cadence, and introduce your team to our team. An offshore development group cannot provide the hands-on resources that a domestic company can. 
  3. Higher Quality Work– Domestic software developers are aware that their offshore counterparts are cheaper.  This simple fact drives them to work harder to prove their value. Domestic developers are also groomed in the top software companies and educational programs in the world. This allows them to apply a plethora of skills and knowledge to your project. 

The Choice is Clear

While offshore development may seem great in theory, domestic development can be more effective in practice.  At Byte.lion, we take pride in our US-based staff.  We feel that it sets us apart from competitors and allows us to do our job more effectively.  We are fiercely dedicated to providing superiorly designed products while including the customer in every step of the process.  If you would like to learn more about how we can help you today, please visit our website or contact us here.

 

What is UX?

By DevelopmentNo Comments

The acronym “UX” is frequently thrown around in the design world, but how many people know what it actually means? UX, short for user experience, focuses on the overall experience of the customer on a website or application.  UX isn’t limited to the technology realm, but it applies to a wide variety of industries.  Every time you notice a slight change in the ease of navigation or a more concise message on a site, you can likely thank a UX Designer! So, how can UX help your business?

It’s More Than Design

Aesthetics are important to the appeal of a finished product, but there is so much more to UX than what meets the eye.  In today’s cluttered internet environment, it is not enough to just be visually appealing or innovative. Our goal is to create individualized solutions that meet your needs- even ones you didn’t know you had- through an interactive user experience.  Your site should be a consistent representation of your brand, you have to think beyond what appears on the screen to understand how people will actually use it.

Try to Be Intuitive

Professionals in the industry know that great design doesn’t happen by accident.  It’s the culmination of research, strategy, technology and human innovation, that ultimately hinges on our ability to anticipate users’ needs! At its core, UX is about solving problems and delivering the results to users!

Even if an app or site is created with a flawless user flow, we must anticipate the possibility that some people won’t use it the way we intended. In this scenario, adaptability is key.  We enjoy cultivating a diverse team with varying approaches to UX for that exact reason! Utilizing many unique perspectives allow us to identify the necessary user research, conduct proper usability testing and modify designs accordingly before we even release an app!

Always Ready for Improvement

UX design doesn’t stop once an app becomes available to the public.  Since engagement thrives on good UX, we have to be ready to address any potential user issues that could arise. Regardless if the problem is in regards to coding or user understanding, remember user experience is all about engagement! The app can be incredibly innovative, but if it isn’t user friendly clients will not be impressed.  When you work with a full-service firm like Bytelion, we maintain and improve your interface on an ongoing basis. Therefore, you have one less thing to worry about.

Hopefully, now you understand a little more about why UX is so important in the world of app development. If you’d like to learn more about how we can tailor this concept to your business, please contact us directly!

3 Ways to Keep Your Clients Engaged

By DevelopmentNo Comments

 As a business owner, you recognize the importance of your clients.  Loyal customers are just as important as potential relationships, therefore maintaining their engagement with your company is vital.  There isn’t a master guide for keeping clients engaged, but we have crafted three of our best suggestions for keeping clients coming back for more.

1. Make It Personal

While traditional marketing tools, like emails and promotional products, are typically used to showcase your brand, human connections are what forge long term partnerships.  Adding a personal touch to everything you do encourages clients to identify with your company.

Whether you consider yourself to be a brand ambassador or the face of a certain company initiative, try to foster an individual connection with customers. Introducing yourself is the first step to this process.  Share your personal story on the company website and social media channels, and don’t underestimate the value of personalized messages.  With the help of custom software created by professionals like Bytelion, you can capture your audience’s information online to better adjust your messages. Thank your clients for their engagement with or support of your brand whenever possible.  Lastly, recognize the value of photos that showcase the people behind your brand.  These help customers feel that they are working with an actual team of people rather than an impersonal AI.

2. Share Something Exclusive

Blogs, newsletters, and consistent social media content are great resources for current and potential clients, but you have to offer something more to engage them across platforms. By including exclusive content within your messages, you increase the chance that your customers will not only read, but also engage with your message as well.  Offering something of value in return for their time fosters mutually beneficial relationships.

A great example of this concept would be holding a contest.  Visual platforms, like Instagram, allow you to ask followers to share photos of themselves representing your brand and have them tag your company for a chance to win.  To carry this over to another platform, you could share your favorites on the company’s social media channels or announce the winner on your blog.  The same idea works for exclusive discounts, coupons and advance offers.  The key is to make sure the offer is truly only available to your followers to preserve exclusivity.

3. Use Technology Wisely

There is no way to deny technologies dominating force over our world today.  As a business operating in the 21st century, it is crucial to use this tool to your advantage.  Does your current app allow you to engage with your users? Are you collecting data they provide and using it to improve the users overall experience? If you answered no to any of these questions, you could be missing out on key opportunities.

With our teams help, you can develop an engaging app that learns from customers, creating an essential outgrowth of your brand.  Through features such as interactive location prompts, polls and live support, we are able to tap into what your customers really want! Rather than spreading your efforts across all forms of technology, we can help you concentrate on one sector and offer a truly innovative product to your users. Check out our website at bytelion.com to see how we’re helping our clients engage with their users every day.  Contact us for more information on how we can help your business excel.

SSL Certificate webpage

SSL Certification Installation Tutorial

By Development, Security, SSHNo Comments

Installing an SSL Certificate is something that can benefit all developers. SSL Certificates provide security when passing data back and forth between the user and the server. This specific Tutorial uses AWS for DNS and the server, Nginx as a reverse-proxy engine, and Namecheap for the SSL Certificate itself. Follow the steps and you will have the base knowledge to install an SSL Certificate in no time!

  1. Purchase a domain name from Route 53 on AWS.
    1. If you are following this tutorial for learning purposes only, I recommend choosing a cheap domain and ensuring auto-renew is turned off to avoid extra charges. This tutorial uses a .com domain, so that is recommended to follow the tutorial more precisely.
  2. Purchase an EC2 Server on AWS.
    1. I recommend an Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
    2. For security groups, create or choose one that covers HTTP access (port 80), HTTPS access (port 443), and SSH access (port 22).
    3. Use your own key-pair when setting this up, you will need this later, save it in your .ssh folder.
  3. Connect domain name to server.
    1. You will need the IP address of the server.
    2. Follow this guide.
  4. Install and configure Nginx on server
    1. Add the following lines to your config file

      Host host_name
        Hostname IP_address_of_server
        User ubuntu
        IdentityFile ~/.ssh/.pem_file_from_key-pair_download
    2. SSH on to server using the following command

      $ ssh host_name
    3. Run the following commands.
      # To install Nginx and verify the installation worked
      $ sudo apt-get update
      $ sudo apt-get install nginx
      $ sudo ufw app list
      
      Expected output:
      
      
      Available applications:
        Nginx Full
        Nginx HTTP
        Nginx HTTPS
        OpenSSH
      
      # To allow connections to the server
      $ sudo ufw allow OpenSSH
      $ sudo ufw allow 'Nginx HTTP'
      $ sudo ufw allow 443
      $ sudo ufw allow HTTP
      
      # To enable the firewall and verify it worked
      $ sudo ufw enable
      $ sudo ufw status
      
      Expected output:
      
      Status: active
      
      To                         Action From
      --                         ------ ----
      OpenSSH                    ALLOW Anywhere           
      Nginx HTTP                 ALLOW Anywhere           
      80                         ALLOW Anywhere           
      443                        ALLOW Anywhere           
      OpenSSH (v6)               ALLOW Anywhere (v6)           
      Nginx HTTP (v6)            ALLOW Anywhere (v6)           
      80 (v6)                    ALLOW Anywhere (v6)           
      443 (v6)                   ALLOW Anywhere (v6) 
      
      # To ensure Nginx is running as expected
      $ systemctl status nginx
      
      Expected output: 
      
      nginx.service - A high performance web server and a reverse proxy server
         Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
         Active: active (running) since Thu 2018-05-31 20:58:15 UTC; 1 weeks 4 days ago
       Main PID: 17606 (nginx)
          Tasks: 2
         Memory: 2.1M
            CPU: 842ms
         CGroup: /system.slice/nginx.service
                 ├─17606 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
                 └─17607 nginx: worker process                           
      
      Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
    4. Check this by going to your website, a “Welcome to Nginx” page should appear
  5. Add an index.html file that will appear once Nginx is complete
    1. Run the following commands

      $ ssh host_name
      $ cd /var/www/html
      $ touch index.html
      $ sudo nano index.html
    2. Add the following text to the file
      Hello!
      
    3. Use Control + O to write to the file, click enter, then Control + X to quit nano. 
    4. Purchase and set up SSL from Namecheap
      1. Choose a PositiveSSL
      2. Generate a CSR in your terminal by running

        $ openssl req -new -newkey rsa:2048 -nodes -keyout site_name.key -out site_name.csr
        
        Generating a 2048 bit RSA private key
        ............................+++
        .....................................................................+++
        writing new private key to 'site_name.key'
        -----
        You are about to be asked to enter information that will be incorporated
        into your certificate request.
        What you are about to enter is what is called a Distinguished Name or a DN.
        There are quite a few fields but you can leave some blank
        For some fields there will be a default value,
        If you enter '.', the field will be left blank.
        
        -----
        Country Name (2 letter code) [AU]:US
        State or Province Name (full name) [Some-State]:Maryland
        Locality Name (eg, city) []:Hampstead
        Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bytelion
        Organizational Unit Name (eg, section) []:Bytelion
        Common Name (e.g. server FQDN or YOUR name) []:site_name.com
        Email Address []:your_email@domain.com
        
        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:
        An optional company name []:
      3. Copy the CSR by running
        $ cat site_name.csr
      4. Paste the CSR into Namecheap when asked.
      5. Follow steps in namecheap for domain validation. This can be done 1 of 3 ways, but via email(if yours is listed) or DNS is recommended. For help with this validation, refer to the links in Namecheap.
      6. Once this is complete, the certificate will be emailed to you, but be patient because it can take a while for the email to come through.
    5. Install SSL on server
      1. Download the SSL files from your email and unzip the file. This should leave you with a folder by the name site_name_com containing the files site_name_com.crt and site_name_com.ca-bundle
      2. Open the folder in the terminal and run the following commands

        # To combine the two files into one
        $ cat site_name_com.crt site_name_com.ca-bundle >> site_name-bundle.crt
        
        # To copy the file into the .ssh folder to then put them onto the server
        $ sudo cp site_name-bundle.crt ~/.ssh
      3. Navigate to the site_name.key file that was created with your CSR, then run the following commands

        # To copy the file into the .ssh folder to then put them onto the server 
        $ sudo cp site_name.key ~/.ssh
        
        # To verify the files were successfully moved
        $ cd
        $ cd .ssh
        $ ls
      4. Verify the site_name-bundle.crt and site_name.key files are there.
      5. Run the following commands to put the files on to the server.

        $ scp site_name-bundle.crt ubuntu@IP_address_of_server:
        $ scp site_name.key ubuntu@IP_address_of_server:
      6. SSH onto the server

        $ ssh host_name
        $ ls
        
      7. Verify the site_name-bundle.crt and site_name.key files are there.
      8. Run the following commands to move the files to their appropriate folders.
        $ sudo mv site_name-bundle.crt /etc/ssl/certs/
        $ sudo mv site_name.key /etc/ssl/private/
      9. Run the following commands to begin the set up of the Nginx configurations

        $ cd /etc/nginx/sites-enabled
        $ touch site_name
        $ sudo nano site_name
      10. Edit the file to contain the following.

        error_log /var/log/nginx/error.log;
        
        server {
           listen       80;
           server_name  site_name.com;
           return 301 https://site_name.com$request_uri;
        }
        
        server {                       
           listen       443;
           server_name  site_name.com;
           ssl on;
           ssl_certificate /etc/ssl/certs/site_name-bundle.crt;
           ssl_certificate_key /etc/ssl/private/site_name-server.key;
           ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
           root /var/www/html/;
        }
      11. Use Control + O to write to the file, click enter, then Control + X to quit nano.
      12. Run the following commands to stop and start nginx

        $ sudo systemctl stop nginx
        $ sudo systemctl start nginx
        
        
  6. Go to your website. The site should say “Hello!” and the word Secure with the padlock should be shown. Navigating to site_name.com should now redirect to https://site_name.com. 

 

Pros And Cons Of Building Your Website With WordPress

By Development, Marketing, Mobile, MVP, Security, Startup, Tips & Tutorials, Tools, WordpressNo Comments

WordPress as a web building tool has built its reputation as providing amazing features specifically in the world of CMS, powering over 75 million sites and almost 23% of the World Wide Webs’ sites. However, despite its popularity, WordPress has drawbacks as a website development platform that you should be aware of before jumping on the bandwagon. Being informed is one of the most important factors in deciding where and how to build your site.

 

A few of your options for building and designing your website:

 

Website Editor

(Wix/Squarespace or similar solution)

Website editor, easily learned, drag and drop designs, less customization, small sites

WordPress

Website builder, edit and manage content through admin access, customization limited to WordPress support and technical capabilities, learning curve

App development

Full development team/developer, Fully customizable, Supports large, complex sites with high user traffic

Some Things To Consider

 

Typical WordPress use

WordPress is largely known for its CMS (content management system) capabilities, but it supports models for blogging, eCommerce, and forum websites as well. Sites that differ from this will most likely need customization.

Cost

Building a site can be expensive, you need to make sure you’re getting what you need, rather than trying to opt for the cheapest solution. Custom website development can cost anywhere from $5,000 to upwards of hundreds of thousands of dollars, depending on your needs.

Time

Building a site takes time. How much time do you have? Most web projects take an average from 12 to 16 weeks. However, the time is always dependent on several factors, such as the complexity of the project, scope of work, number of people involved, etc. Always be sure to set a realistic timeline when looking at website building solutions.

Resources

How big is your team? Do you have any technical skills? WordPress maintenance requires a learning curve and dedication to the site after the initial build. To keep your site up to date, make sure you are prepared to learn or are willing pay someone for maintenance.

Security

WordPress is a great resource because of its popularity, but that popularity leaves sites more vulnerable to hackers and information leaks. What type of content are you providing? Does it need to be secure? Developing your own website or mobile app can provide more security.

Mobile

WordPress does not support mobile app development but does allow for you to have a responsive mobile version of your site.

Users

Does your website require a large number of users to log in and out of your site? Depending on your business, WordPress may not be able to support the high volume and data storage that your site requires. Consider building a customized application with a development team.

 

Benefits of WordPress

 

Ease of Use – For non-technical folks

WordPress is great for non-technical users who want to be able to manage their content and make minor adjustments without getting knee deep in code. The content builder enables you to design within a set framework BUT does not allow for much customization. If you are looking for customization, you will have to get your hands dirty and add in some code.

Plugins

WordPress has over 45,000 plugins that you can upload that increases new functionality options. This is great for you, it means you can do more than just make a basic blog! However, they require a lot of updates and may need customization and code to get them working properly with your site.

SEO Friendly – Kind of

WordPress is wonderful because it bumps up your site on web browsers from the built-in SEO(Search Engine Optimization) system, however, if you are a novice with SEO, you may need some coaching. Too much tagging and repetition can kill your SEO rating and send your website to the bottom of the page. Luckily WordPress has a wide range of plugins to help with this, including our favorite, Yoast, which helps by rating your pages on readability, keywords, and more!

Open Source – Faster Development

Open source code is great for speeding up development time. All of the code is shared and used between developers all over the world. This means your developer doesn’t need to make everything from scratch, cutting down on development time. However, this is a catch 22, as open source also means less security. Be sure to you weigh the importance of development time over site security.

Professional Themes

There is an endless source of pre-built design templates from which you may choose to use for the foundation of your site. Themes include one or more demos which you can activate. This provides you with an appealing, pre-designed site that requires minimal effort to get up and running. Keep in mind that these can be pricey and limit your site’s capabilities and customization, as not all plugins work with every theme.

Overall Lower Cost

Typically WordPress is a cheaper option than hiring a software development team. Since it is open source and widely used, you have many options for designers and developers. You also have the option to maintain the site on your own – if you have the resources and time to do so.

Mobile-Friendly

WordPress makes it easy to transition your site from desktop to smaller screens such as tablet or mobile. This may require some customization to make it just right, but it can beat building a mobile app or an entirely new mobile site. Make sure a responsive mobile site is a right option for you as Hackernoon reports that in 2018 mobile users spend about an hour on the mobile web, while almost 3.5 hours on mobile apps.

 

 

WordPress Negatives

 

Open Source – Security

Open source is great for fast development, but it can leave your site vulnerable to attacks from hackers. This can lead to problems down the road, either legally or with development constraints. Are you going to be handling credit card information? What about users’ personal info? If you do, you will need extra security, make sure WordPress can secure your info or pick a developer/development team that is knowledgeable and can successfully secure your data. Have questions? Let us help you feel safe about your site’s security.

Customization Needs Coding

WordPress was built for blogging, CMS, forums, etc. This makes breaking that model to build a restaurant site, for example, with online ordering, slightly more difficult. Most WordPress themes aren’t built for any models besides the typical ones mentioned above, which means more customization and less flexibility for the overall design of the site. This doesn’t mean it’s impossible, but it does mean less access to content without digging into the code base.

Frequent Updates

WordPress is constantly trying to improve and update their structure to better serve their large user base. Because of this, updates occur on a regular basis and could impact your site’s performance. At times, you may need to update plugins, which could result in your plugins no longer functioning correctly or not being supported by the new version of WordPress. It is very important to save a backup of your site before updating, just in case something goes wrong while converting to the new version. As you can imagine, this process requires some technical knowledge and the ability to fix bugs that may occur as you update your site.

 

Pro tip: WordPress doesn’t offer support!

 

Learning Curve

No matter whether you are a coder, a designer, or someone with no technical knowledge, WordPress requires time to learn the ins and outs of building and maintaining a site. If you think building a WordPress site is as easy as dragging and dropping elements on a page, you’ve got it wrong. WordPress is a very robust solution that is constantly updating and changing, it takes time and dedication to keep your site up-to-date.

Slow Speeds

WordPress has a reputation for having slow loading times and speeds for users. This is a big downfall as research from Hobo shows that users quickly get disheartened by slow loads times. Users will leave your site to find what they need elsewhere within 2-10 seconds of waiting on content to load. Even more concerning, eCommerce users will leave only after 2-3 seconds without content loading.

Not Easily Scalable

Unless planned well in advance, WordPress is not the best at scaling businesses. Most models are built with the intention that the site will stay relatively at the same size, volume, and structure. Modifying your WordPress site structure later down the road can lead to some sticky situations with plugins, content, and speed.

No Support Service

Building a WordPress site on your own? You’re Brave! Although WordPress has a massive following and plenty of answers that are just a google away, WordPress does not have an official support service. This means no one can get into your account and help you solve those more difficult, niche questions. Website editors typically have lots of support, but if those solutions don’t serve your needs, consider hiring a developer or development team who will only be a call away to give you unlimited support to solve your issues ASAP.

 

 

Conclusion

WordPress is great for some websites, specifically for smaller sites that don’t require tons of functionality and serve as a source of information rather than supporting large amounts of user data. Making sure you understand the capabilities and constraints of using WordPress will allow you to make the best decision for your business. If WordPress doesn’t seem like the right solution you may be better off using something more accessible like Wix, Squarespace, or even hiring a development team to build a customized solution. Sometimes the answer isn’t clear, and you’ll need to sit down and map out all of the pros and cons of each solution available to you. Feel free to reach out to our team for some expert advice. Good luck!

 

Have questions? Ask an Expert!

Our team of experts is always available to talk through your concerns and guide you in the right direction for your business, even if that option doesn’t mean using our team. Talk now.

Increase Enterprise .NET Development Efficiency By Sharing Code With NuGet

By Development, Mobile, XamarinNo Comments

Reusing code can be a great way to increase efficiency within an organization. If there is an overlap in functionality across multiple development projects it makes sense to collaborate and reuse code across those projects.

Increase Efficiency

An essential tool for any collaborative development environment is a mechanism through which developers can create, share, and consume code. Often such code is bundled into “packages” that contain compiled code (as DLLs) along with other content needed in the projects that consume these packages. Using packages to transmit code facilitates the natural process of integrating updates that improve and add to functionality available to collaborators.

NuGet Packaging

NuGet is a free and open-source package manager designed for the Microsoft development platform. Since its introduction in 2010, NuGet has evolved into a larger ecosystem of tools and services. NuGet is distributed as a Visual Studio extension. Beginning with Visual Studio 2012 and subsequent versions, NuGet is pre-installed with Visual Studio by default. NuGet can also be used from the command line and automated with scripts. NuGet is the standard tool by which package dependencies are managed in Visual Studio projects/solutions.

A NuGet package is a single ZIP file with the .nupkg extension that contains:

  • Compiled code (DLLs)
  • Other support files related to that code
  • Descriptive manifest that can include:
    • Package ID
    • Package Version Number
    • Package Author Info
    • Package Description
    • Other Fields Included: Owner Info, Copyright, Title, Summary, Project URL, Icon URL, License URL, Tags, Release Notes

Creating A Single Cross-Platform NuGet Package For Xamarin Mobile Application Development

Visual Studio library projects can be configured to create a variety of packages with differing levels of compatibility from a single platform to multiple platforms. Most of the time creating NuGet packages with Visual Studio is simple and works well, but I encountered a few build errors while attempting to build a single multi-platform NuGet package for Xamarin mobile application projects using Visual Studio for Mac (VS for Mac). Here are a couple examples:

  • The Target “GetPackageContents GetPackageTargetPath” does not exist in the project. (MSB4057)
  • The “AssignPackagePath” has failed unexpectedly. (MSB4018)

Below is a step-by-step process for VS for Mac to create a cross-platform NuGet package that will run on iOS and Android that leverages Xamarin.Forms. Following this outlined process helps to mitigate and avoid some errors, but even this process is not error proof. It may take a few tries to produce an error-free cross-platform NuGet package with VS for Mac.

  1. Open Visual Studio and click File, and then choose New Solution.
  2. For your project template Select Multiplatform Library (as shown below).
  3. Next configure the solution. Give it a name and a brief description. Select Android and iOS under Target Platforms, then under Implementation select Single for all platforms.
  4. Make sure the project name, solution name, and path are the way you want it, then click Create
  5. To add platform-specific references the next step is to right-click on the project and under Add click Add Platform Implementation.
  6. Select Android, iOS, and Create Shared Project as shown below.
  7. When this process completes you should Build All in order to confirm that your solution is error free. Sometimes the build will fail at this point. This seems to be an expression of an error inherent in the processes executed by the VS for Mac IDE. If Build All fails it may be best to simply start over.
  8. Now is the time to make sure that the References in all the projects are correct. The main project should reference the .Shared project. The .iOS and .Android projects should have references to the main project and Xamarin.iOS or Xamarin.Android respectively. The .NuGet project should reference the main and .Shared projects.
  9. The next step is to add the Xamarin.Forms package to the .Android, .iOS, .NuGet and main projects.
  10. For proof of concept add a Xamarin Forms Page in the .Shared project with a label that says “Hello World.”
  11. Right-click on the main project and then select Options. In the Build section under General confirm that Target Framework is set to .Net Portable with a PCL profile that is compatible with the platforms to which you want to deploy your package. In our case, Profile 111 is correct.
  12. While in Project Options, under the NuGet Package click on MetaData to add or edit the data that will be associated with the package you create.
  13. Under the NuGet Package section Build tab, select “Create a NuGet Package when building the project.”
  14. Now when you Build All the single, multiplatform package will be generated and  saved in the main project’s /bin/ folder (either Debug or Release, depending on configuration). The NuGet package file will be saved with the extension .nupkg

With a little luck at the end of this process you should now have a single NuGet package that will deploy to both Android and iOS with the ability to leverage Xamarin.Forms.

NuGet Package Distribution

NuGet packages can be distributed and consumed in multiple ways. If your package is meant to be shareware it can be published and distributed for public consumption directly on nuget.org. If the packages are meant to be proprietary then a private repository can be created. Something as simple as a folder on a secured network will work. The NuGet Package Manager in VS can then be configured to load or update packages from whatever location your packages are stored. The location can be configured by opening the VS project you want to add the package to and then complete the following steps:

  • If Loading New Package:
    • Right click on “Packages” folder in the target Project and select Add Package
    • Select Configure Source and add local directory in which NuGet Package resides.
    • Set the Package Manager source to the folder that was added
    • Select the Package to be installed
    • Click Add Package (if it is a Shared Project Solution the package will need to be added to each each Project)
  • If Updating Package:
    • Right click on the package to be updated and click Update (updated package should be located in local directory the package was originally loaded from) (if it is a Shared Project Solution the package will need to be updated in each each Project)

The Value of NuGet

Leveraging the power of NuGet is an excellent way to package, transmit, consume, and update shared code across .NET projects. As the default package manager for Visual Studio it is familiar to developers and already integrated into the IDE’s workflow. The example package described here is one of the more complex scenarios, but generally speaking it is relatively simple to create platform specific packages. The distribution and update process are also easy to implement and manage. All of this adds up to saving time and money for your enterprise.

 

Addendum:

If you would like to do some additional reading I have listed below a partial list of resources I used to create this article.

Manually Creating NuGet Packages for Xamarin

https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

Cross-Platform Development with the Portable Class Library

https://docs.microsoft.com/en-us/dotnet/standard/cross-platform/cross-platform-development-with-the-portable-class-library

Creating a New Multiplatform Library for NuGet

https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-multiplatform-libraries/single-codebase

Create .NET Apps Faster With Nuget

https://www.nuget.org

An Introduction to NuGet

https://docs.microsoft.com/en-us/nuget/what-is-nuget

NuGet Documentation

https://docs.microsoft.com/en-us/nuget/

Portable Class Libraries (PCL)

https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/pcl?tabs=macos

 

How to Integrate the Salesforce API into your Rails Project

By DevelopmentOne Comment

Many companies use Salesforce, it’s one of the biggest Customer Relationship Managers (CRMs) available right now. Many companies use Rails as well. Combining the power of Rails with the power of Salesforce can greatly benefit any company. Where do you begin with this process? Let us look into a (not so little) Ruby gem, named Restforce.

Restforce

 

Restforce is a Ruby gem made for the Salesforce REST API. It includes many features that help developers interact with the Salesforce API using REST, and has been downloaded over 9,000,000 times. Installation is simple, just like any Ruby gem, just write

gem ‘restforce’

Into your Gemfile, and then

bundle install

Into your terminal.

Initialization

 

Before you begin sending requests to your Salesforce org, you’ll need to first initialize and authenticate your client inside a model as a method, so you can connect properly. There are many ways to do this, but here, I am going to use the username/password authentication method.

Here we are setting the client. There are many variables involved to get a proper connection, so I will go over each of them.

  • Username and password are, of course, the account’s username and password.
  • The security token you can get by requesting one from Salesforce. In order to see your token, you must go to SETUP > MY PERSONAL INFORMATION > RESET MY SECURITY TOKEN. From here you can simply press the button to get an email from Salesforce, giving you a new security token. Note, that the only way to view your security token, is to change it. So save the token after receiving it, in order to avoid hassle later. Changing the security token will also lead Restforce to return authentication errors until the security token is updated in the codebase or environment variables.
  • To view your client ID and your client secret ID, you must go to SETUP > APPS > CONNECTED APPS > MANAGE CONNECTED APPS. From there you should see a list of apps you have connected. Click on one to see all its information, including the client ID and the client secret ID located in the OAuth section.
  • API version is exactly what is sounds like. It is normally best practice to make this the latest version of the Salesforce API.

It is also a good practice to add the keys, passwords, etc into environment variables. Having access to these keys means you have access to any records and fields in Salesforce! Now that everything is set, let’s begin interacting with the API.

Requests

 

Requests are the main way to interact with any REST API. Restforce makes it incredibly easy to make any request to the Salesforce API.

  • As any software developer knows, GET requests are when you need to pull data from an API. This can be done a number of ways through Restforce. Here are a few of the most common ways to get data.

  • POST requests are the next most important. These let you send information to the Salesforce API.

  • PATCH requests are like POST requests, in that you send information to the Salesforce API. However, this time you are changing an object, rather than creating a new one.

  • Finally DELETE requests will remove objects from the Salesforce API.

With these methods at your disposal, you are ready to integrate the power of the Salesforce API into your Rails project.

Example

 

Model

Controller

You can find the Github repository here.

API Call Limit

 

Note that each Restforce call you make is an API call, each Salesforce account is given a certain amount of API calls per month (depending on your Salesforce contract). Be sure to check your API usage. If you’re interested in updating a massive number of records, then perhaps use dataloader.io or the application “wizard”, where you can upload a csv to massively create, delete, and update records. You can read more about that on our blog here.

Data Sync

 

While being able to connect your Rails application to your organization’s Salesforce account can be an empowering tool, there is the risk having data sync issues if you’re storing records in your own database in addition to creating and updating records in Salesforce. It’s important to note that when you create Salesforce records, the record could change in Salesforce, and your Rails application won’t even know about it. So when using this gem, one thing to think about is where your source of truth is if you’re saving and updating in multiple places. Saving to your own database is still a good practice in case for some reason there is an outage out of your control on the Salesforce side of things.

Conclusion

 

Now you know how to integrate your Salesforce org and your Rails app. Using the Restforce gem, you can easily connect to your org. Making REST requests is also extremely simple. Simple methods allow easy GET, POST, PATCH, and DELETE requests to be made. Now that Rails and Salesforce are connected, interacting with Salesforce through your own app has never been easier.

How to Import Your Rails Data Into Salesforce With CSV

By DatabasesOne Comment

Oftentimes, companies want to move resources into Salesforce. It only makes sense, being that salesforce is one of the top Customer Relationship Managers (CRMs) available right now. There are loads of benefits to storing data in Salesforce, including security, organization, and data recovery. What is the process of moving data to Salesforce like? Let’s talk about CSVs.

Process

 

  • When working in Rails, all your data is stored in a database. First you’ll need to pull the required data from the database and put it inside a CSV file, using the psql command line. CSV stands for comma-separated values, and is a way of storing table-like data in a text format.

user$ psql
user=# \c database
database=# \COPY my_table TO 'filename.csv' CSV HEADER

This will create a CSV file in the chosen directory with the contents of the table from your database.

  • From here, we will begin to upload our CSV file to Salesforce. First you’ll need to go to SETUP > DATA > DATA IMPORT WIZARD. Where you can find and launch the wizard to import data.
  • Once the wizard is launched you will be asked to choose what type of data you are importing. This is basically asking which Salesforce object you are looking to import, whether it be contacts, leads, or a custom object you created. Select which type you are planning to import.

  • Next you will be asked what you want to do. Since we’re importing new data in this tutorial, we will select “Add new records”

  • After that, select the CSV file you would like to import, select the correct Character Code, and locate the option by which the values are separated by. The character code and separator, will more often than not be the default values Salesforce sets. After this step, then just press “Next” at the bottom right of your screen.

  • After pressing “Next”, you will be directed to a new page asking to assign Salesforce objects to the CSV headers.

Some headers will be mapped already, as Salesforce typically knows what some values will be mapped to, saving you time. However in this situation, our contact_name and acctount_name headers are not mapped, so we will have to do it manually, starting by clicking “map” on the left side of the screen.

  • Mapping an object to a header is quite simple, as all you need to do from the pop-up box, is find the related field, or fields, and select them to map.

Now after repeating that for each un-mapped header, you are ready to begin importing.

  • Click the “Next” button at the bottom right corner of the screen for a review of what is being imported. From there, just press “Start Import” to begin putting your data into Salesforce. Note: This can take some time depending on how much data you have.
  • After the import you should now have a list of objects available to you on your Salesforce homepage.

Conclusion

 

Now that you know how to import your data, you have the power of Salesforce on your side. You can create graphs, organize your data, as well as many other ways to improve your business. Data can also be updated and new data can be added at any time, so you can always have Salesforce up to date with the rest of your company. If you are looking to centralize your data in either Salesforce or Rails, rather than both, look here to help you make a decision.

Should You Build Your App From Scratch or Using Salesforce?

By Development, DjangoOne Comment

An important decision that comes to all companies before building out an application, is the decision to use either an app builder like Salesforce, where almost no prior coding experience is required, or a web development framework, like Ruby on Rails, C#, Java, or Django (we will simply refer to rails for now). It’s an important decision that will determine the development path to follow. In this article, I’m going to go over the benefits of both Salesforce and Ruby on Rails in order to help you make an educated decision on what path you would like to follow.

Salesforce

 

Pros:

Streamlined – Salesforce strives to be an end to end software data tool to manage your complete enterprise. You can easily connect all your employees using streamlined tools and applications that come out of the box. This requires fewer resources overall and allows you to manage your business from anywhere.

Mobile First – Salesforce also gives companies and developers an easy way to create your mobile applications. In fact, it’s touted as being built mobile-first. The instant you create an app for your browser, a clean-looking mobile version is generated that can be used by all users.

Simple – As you may be able to tell from the previous benefits of Salesforce, it is built to be straight forward. Salesforce is proud to note that their software can be managed by others who have have less technical experience. This is especially true due to Salesforce’s own Trailhead, which is “The fun way to learn Salesforce”.

Cons:

Limited Customization – There isn’t much customization for how Salesforce apps work and look.  If you purchase a solution that is built on top of Salesforce, you are often limited in your ability to customize how it will work as you now rely on Salesforce updates. For users on Salesforce, some functionality may break after Salesforce update. Updates usually consist of large layout changes to the platform, causing problems to the businesses using it by making some important features now hard to find. This also gives new Salesforce businesses a learning curve around the Salesforce system, not the business.

Expensive – While Salesforce seems inexpensive out of the gate, costs can quickly escalate out of control.  If your ROI (return on investment) isn’t there, Salesforce will be an anchor instead of a rocket boost.  Many times, the rising costs of additional but much needed capability causes subscription creep that the company is saddled with.

Developers Needed – Many companies try and wedge in a java or .net programmer and tell them to code up Salesforce apps or integration only to find that they cannot do the work. To build and operating in Salesforce at a deeper technical level, you need to have experiences certified Salesforce personnel on your team.

Building From Scratch – Ruby on Rails/Django

 

Pros:

Application Flexibility – If you are building a specialized software product, rails is also no doubt one of the best for designing a customized platform.  Rails allows you to customize everything from design, to workflow, to api exposure. In Rails, because developers practically start from the ground up, you can put a very personal touch on your app.

Platform Flexibility – There are no platform limitations.  If you can think of it, you can build it.  You are not limited to restrictions. Building your apps in Rails will also save you from worrying about third parties. With Rails, the only business you need to rely on is your own.

Cost – For smaller companies with developer experience looking to start up a new application can find Rails applications to be more affordable with server usage being the only minimal cost.

Cons:

Experienced Developers – Working on a Ruby on Rails web-app will require one or multiple experienced developers. Connecting your users is also a greater hassle as well, compared to Salesforce.

 

Conclusion

If you are looking for a flexible and cheap way to create a CRM, then building your application from scratch would be your best choice! Especially if you are looking to create a much more personalized CRM that works your way. On the other hand, if you are looking for something simple and streamlined, Salesforce is the choice for you! As anyone can learn Salesforce! In the end, it’s whatever benefits your business the most, for whatever its needs may be. You could even do both, with the ability to integrate the Salesforce API into your Rails project.

GIS Crawling Done Easy Using Python With PostGreSQL

By AWS, Databases, Development, GIS, Python, RDSNo Comments

Problem

Company “Help-i-copter” allows users to rent a ride in a helicopter for a lift in style. However, Help-i-copter is having trouble creating software that find the best flat surface for the helicopter pilots to land to pick up their customers. A perfect solution would be crawling data from sites and to store it on a PostGreSQL database. What steps should they take?

Crawling

Crawling, in software terms, is the act of copying data from a website using a computer program. This data can be saved to a file, printed to your screen, or put into a database. It entirely depends on the project and its scale. On a much greater scale, where data can be overwhelming, a database would be the best option, which is why it’s important to have one. You could have your grocery list stored online, but you don’t want to login every time to see it. You could instead crawl that information off the web with a command like:

soup.find_all('a', attrs={'class': ‘list'})

  • Write a crawling program that collects data from multiple sources, to get the most accurate data. This program would most likely be written in Python as it has access to modules like Requests and BeautifulSoup.

import requests
from bs4 import BeautifulSoup
url = "http://www.placeforyourhelicopter.com"
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
surfaces = soup.find_all('a', attrs={'class': 'surface'})
for d in surfaces:
#getting all the surface information

  • Store the found data on a PostGreSQL database. This allows the data to be stored and sorted. When it’s sorted, this allows the data to be queried quickly and efficiently.

import psycopg2
endpoint = "surfaces.amazonaws.com"
c = psycopg2.connect(host=endpoint ,database="surfaces", user="admin", password="admin")
cursor = c.cursor()
query = "INSERT INTO surfaces (airtraffic,windspeed,date_produced,lat,lon,state) VALUES (%s,%s,%s,%s,%s,%s);"
data = #all info from surfaces in an array
cursor.execute(query, data)

  • Create an app that allows pilots to enter in a variable they want to query and parameters for that variable. Then use Python and the Psycopg2 module to query the data accordingly. This app with allow non-programmers to access the database without having to learn PostGreSQL.

letter = raw_input("Choose a number: ")
cursor.execute("SELECT * FROM surfaces WHERE airtraffic LIKE " + letter)
for row in cursor:
print str(row) + "\n"

 

Databases

So why is it important to store large amounts of data on a database? Simply, it gives you an easy way to find and query data. For example, let’s say you have a list of employees you got from your company’s website, and added it to a PostGreSQL database. In such a database, finding data like “all employees with a first name that begins with an L” would be much simpler, as databases are well organized. Simple commands like:

where employee_name LIKE 'L%'

would return “Larry, Liz, and Lucy” quickly and efficiently.

Bounding Box

 

This data could be used in a lot of ways. Namely, we could use out latitude and longitude coordinates to create a bounding box and get information about the areas within that box. This could help Help-i-copter in a number of ways. Pilots could use a bounding box to find flat areas near them and sort those by air-traffic, location, etc… It will be essentially asking the pilot the maximum and minimum coordinates of the box and then looking through the database for any surface that fit the description. Here’s what that might look like in Python:

xmin = raw_input("What is the minimum latitude? ")
xmax = raw_input("What is the maximum latitude? ")
ymin = raw_input("What is the minimum longitude? ")
ymax = raw_input("What is the maximum longitude? ")
cursor.execute("SELECT * FROM surfaces WHERE GEOMETRY(lat,lon) && ST_MakeEnvelope("
+ ymin + "," + ymin + "," + xmax + "," + ymax + ", 4326)")
for row in cursor:
print str(row) + "\n"

Conclusion

 

As you can see, crawling and databases can work very well together, especially when crawling large amounts of data. It would be otherwise inefficient and a lot slower to just store data on a normal document, or to do a crawl of the page every time you run the program. Help-i-copter able to efficiently crawl a site, upload data to a web page, and query that data back to a pilot quickly. Thanks to the power of PostGreSQL and Python.