Blog
Insights and Technology
Our story, vision and perspectives on technology, design and business solutions.

Featured Articles

News
5 min read
Announcement : Spiria is certified SOC 2 Type 2
<div><h2>What is the certification SOC 2 ?</h2><p>SOC 2 (Service Organization Control 2) certification is a standard developed by the American Institute of Certified Public Accountants (AICPA) that assesses an organization's ability to manage the risks associated with the security, availability, processing integrity, confidentiality and privacy of the data it processes on behalf of its customers.</p><p>SOC 2 certification is based on five principles, known as trust criteria, which define the minimum requirements an organization must meet to ensure the security and quality of its services. These criteria are as follows:</p><ul> <li><strong>Security</strong>: the organization protects data against unauthorized access, modification, disclosure, damage or loss.</li> <li><strong>Availability</strong>: the organization ensures the availability and continuous operation of its services in accordance with customer agreements.</li> <li><strong>Integrity of processing</strong>: the organization processes data in a complete, valid, accurate, timely and authorized manner.</li> <li><strong>Confidentiality</strong>: the organization respects confidentiality commitments and obligations towards its customers and third parties concerning the data it processes.</li> <li><strong>Privacy protection</strong>: the organization respects the privacy principles defined by the AICPA and the laws in application concerning the collection, use, storage, disclosure and disposal of personal data.</li></ul><p>« Obtaining and maintaining the SOC 2 certification is to me like an ultramarathon, rather than a 100-meter sprint. It's a first step in a long and continuously evolving process. Cybersecurity, as a whole, requires rigour and constant attention to detail, which our team is ready to invest in. »</p><p>– Vincent Huard, Vice President of Data Management and Analytics</p><p>To receive the SOC 2 certification, an organization must undergo an independent audit by a qualified accounting firm to ensure that it complies with the trust criteria applicable to its services. The audit covers the conception and effectiveness of the controls put in place by the organization to ensure compliance with the five trust criteria.</p><h2>What is the difference between SOC 2 Type 1 and Type 2 ?</h2><p>There are two types of SOC 2 certification. Among other things, it is the duration of the audit that distinguishes them. SOC 2 Type 2 is covered by a more extensive and rigorous audit.</p><ul> <li>SOC 2 Type 1 certification attests that the organization complies with trust criteria on a given date. It assesses the conception of controls, but not their effectiveness over time.</li> <li>SOC 2 Type 2 certification attests that the organization meets the trust criteria over a defined period of time, generally from three to twelve months. It assesses not only the conception but also the effectiveness of controls, taking into account their actual use and evolution.</li></ul><p>In other words, SOC 2 Type 2 certification meets more demanding and rigorous criteria, as it involves continuous monitoring and regular verification of controls. It offers greater assurance of the quality and security of the services provided by the organization.</p><h2>What are the benefits for our clients ?</h2><p>By obtaining the SOC 2 Type 2 certification, Spiria reaffirms its position as a trusted partner in the development of digital solutions for its customers.</p><p>Here are some of the main benefits that enable our customers to undertake large-scale projects with peace of mind:</p><ul> <li>The guarantee that we uphold the highest standards of data security.</li> <li>The guarantee that we protect our customers' data against internal and external threats.</li> <li>The confidence that we ensure the availability and performance of our services.</li> <li>The confidence that we are able to react quickly and effectively in the case of an incident.</li> <li>The certainty that we treat your data with integrity, while complying with validation, accuracy, traceability and authorization rules.</li> <li>The peace of mind that we respect your confidentiality obligations and do not disclose your data to unauthorized third parties.</li> <li>The security of knowing that we respect privacy principles and comply with applicable laws on personal data.</li></ul><p>SOC 2 Type 2 certification is a guarantee of trust and security for our clients, testifying to our commitment to delivering quality services and upholding industry best practices. It represents excellence in data security across industries, and is becoming increasingly sought after for software development projects. It was therefore only natural for Spiria to be one of the few expert firms in North America to be certified.</p><p>We are proud to be certified and to guarantee the excellence, reliability and rigor of our business practices.</p><p>Start a project with confidence : <a href="mailto:NewProject@spiria.com">NewProject@spiria.com</a>.</p></div>

Strategy
5 min read
Choosing Between a Time-and-Materials or a Fixed-Price Contract
<div><p>Spiria teams have thorough and extensive experience with both types of projects. In this blog, we’ll share what we have learned on the subject over the years and what criteria contribute to the success of each option.</p><p>But first, let’s go over those two types of projects:</p><h3>Time & Materials projects</h3><p>These are projects whose scope (activities, deliverables, inclusions and exclusions, etc.) are moderately well defined. The initial proposal provides an estimated price range for completing the project, after which costs are billed based on actual hours worked plus the required hardware and resource expenses (such as software licenses or cloud services). This approach is more flexible, as it allows both parties to adjust or change the specifications throughout the development process. This encourages agility and puts an emphasis on project management controls.</p><h3>Fixed-price contracts</h3><p>In contrast, the scope of this kind of project is usually well or very well defined. The initial cost estimate can be stated with confidence because it is based on more reliable information than in the T&M project. As the name suggests, costs are established at the outset, regardless of the actual hours worked and the materials and other resources expenses. Therefore, risk and profitability are critical considerations in opting with this type of contract. Any change to the initial specifications is policed by a change-request process and is billed as additional work.</p><p>Let’s imagine a first scenario in which a project has been previously defined. The client would opt for T&M or Fixed-price, a decision sometimes dictated by the organization’s internal requirements or even by industry regulations. This is often the case with calls-for-tender, which are mostly Fixed-price. Whenever possible, Spiria suggests an approach that leads to a better understanding of the project’s scope, thus mitigating risk. Spiria could recommend that the client invest in an initial discovery phase, whether in T&M or in Fixed-price mode, then propose the actual development and deployment phases as Fixed-cost. This helps the client assess whether it needs to change priorities or modify the scope as a result of the discovery phase. This flexibility allows us to negotiate the defined scope while amending the inclusions/exclusions, in order to remain within the agreed contractual Fixed-cost budget.</p><p style="text-align: center;"><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/process-en.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/process-en.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/process-en.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/11800/process-en.webp" style="width: 60%; border: none;" alt="A Typical Project Cycle." title="A Typical Project Cycle."></source></source></source></picture></p><p style="text-align: center; font-style: italic;">Figure 1. A Typical Project Cycle.</p><p>In a second case where the type of contract is not predetermined, we have more latitude to choose our strategy. A client schedules meetings with various suppliers for a Q&A session, followed by internal discussions to evaluate the factors leading to the best strategy. To help the teams decide, the table below presents a non-exhaustive list of criteria that are quantifiable (easily identifiable and measurable) or qualitative. The answers will depend on the information provided during the initial meetings and in the specifications, and on information obtained by asking the client directly. The symbols in the two right-hand columns suggest ways to weigh the answers relative to the two types of projects.</p><table cellpadding="0" cellspacing="0" style="width:100%"> <tbody> <tr> <td style="width:76%"><strong>Points</strong></td> <td style="width:12%"><strong>Fixed</strong></td> <td style="width:12%"><strong>T&M</strong></td> </tr> <tr> <td>The business plan, requirements, needs and expectations are clear.</td> <td>➕➕</td> <td>➕</td> </tr> <tr> <td>The business rules and processes are numerous and complex.</td> <td>➕</td> <td>➕➕</td> </tr> <tr> <td>The client’s budget is defined and budget planning is set.</td> <td>➕</td> <td>➖</td> </tr> <tr> <td>The schedule is tight or critical due to the client’s circumstances or business context.</td> <td>➕</td> <td>➖</td> </tr> <tr> <td>The required expertise is clearly defined.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>The organizational and decision-making structure is large and complex.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>The legal aspects are complex.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>A past relationship already exists, or a mutual contact recommended us.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>The risk, uncertainties and contingencies are high.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>There is a high likelihood of scope-creep.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>The client has staff or other internal capacity<br> (designer, development team, QA, etc).</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>The technological environment is familiar.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>There are significant technological constraints (e.g. legacy system).</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>There are many and complex challenges to integrating the solution.</td> <td>➖</td> <td>➕</td> </tr> <tr> <td>The choice of technology is pre-established.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>Data is available to reliably do quality assurance.</td> <td>➕</td> <td>➕</td> </tr> <tr> <td>The solution is subject to special certifications.</td> <td>➖</td> <td>➕</td> </tr> </tbody></table><p><br>This reflection can lead to different approaches, represented in the following diagram:</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/strategies-en.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/strategies-en.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/11800/strategies-en.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/11800/strategies-en.png" style="width: 100%; border-style:solid; border-width:1px;" alt=" Possible strategies or approaches." title=" Possible strategies or approaches."></source></source></source></picture></p><p style="text-align: center; font-style: italic;">Figure 2. Possible strategies or approaches (click to enlarge).</p><p>The strategy selected dictates how the contract agreement is concluded and has implications for the entire life of the project and its final success. The relationship will start out on the right foot if our process is transparent and we can explain our reasoning to the client. Our ultimate objective is to deliver a project that respects our Spirian values and that provides the expected value to the client.</p></div>
All Articles
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Strategy
5 min read
Too successful to innovate?
<div><div><h2>What is innovation? Why innovate? </h2><p>The Collins English dictionary defines innovate (verb) <a href="https://www.collinsdictionary.com/dictionary/english/innovate">as follows</a>: “… to introduce changes and new ideas in the way something is done or made”.</p><p>That’s interesting… but why innovate? Why is innovation so important? </p><p>Innovation is above all a way of thinking; a way of being that compels us to constantly recast ourselves in light of new knowledge. New knowledge gets us rethinking what already exists to improve upon it, or to invent something entirely new.</p><p>The goal of innovation should be to meet a need more efficiently than the way it is already being met. Innovation is pointless without a set purpose or goal. For example, within companies, innovation should serve operational or business needs.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/too-busy-to-innovate.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/too-busy-to-innovate.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/too-busy-to-innovate.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2064/too-busy-to-innovate.webp" alt="Too occupied to innovate." title="Too occupied to innovate."></source></source></source></picture></p><p>Too occupied to innovate. © DR.</p><p>Companies that understand the importance of innovation, or continuous improvement, enjoy the following benefits:</p><ul><li>They become or remain competitive.</li><li>They provide value for their clients.</li><li>They differentiate and enhance their offer.</li><li>They increase profitability by cutting costs.</li><li>They improve their operational efficiency.</li><li>They enhance the quality and image of their company.</li><li>But especially… they stay alive and have fun into the bargain.</li></ul><p>In order to achieve this, companies must ask the right questions from the outset, as soon as they take their first step on the road to innovation:</p><ul><li>What is the goal of the project? What will the innovation do, and for whom?</li><li>What internal and external solutions and resources already exist to meet the need?</li><li>How feasible is the proposed solution?</li><li>What kind of investment is required to implement the solution or innovation? </li><li>What will be the project’s return on investment? </li><li>How long will it take for the solution to pay for itself? </li><li>What are the short, medium and long-term benefits of the solution?</li></ul><p>Innovation comes easier in companies that make it part and parcel of a continuous improvement process, as opposed to a one-time, radical change. Companies that don’t innovate are vulnerable to competition that finds a way of standing out through innovation.</p><p>In other words, innovation isn’t just important… it’s vital. Innovation must be an integral part of a company’s culture and values. Innovation is what allows companies, and humans, not just to survive, but to thrive.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/maurice-lacroix-square-wheel-v.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/maurice-lacroix-square-wheel-v.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2064/maurice-lacroix-square-wheel-v.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2064/maurice-lacroix-square-wheel-v.webp" alt="Montre Maurice Lacroix." title="Montre Maurice Lacroix."></source></source></source></picture></p><p>Watch with a square seconds wheel, as invented by Michel Vermot, Microtechnical Engineer. © Montres Maurice Lacroix.</p></div>

Strategy
5 min read
Technical debt: what it is, and how to control it
<div><div><p>At a time when more and more companies base their business model on creating or implementing a software platform, the issue of how durable your investment in development is will be is crucial. To optimize the durability of your investment, keep in mind the concept of “technical debt” when planning your software platform.</p><p><a href="https://www.agilealliance.org/introduction-to-the-technical-debt-concept">Technical debt</a> is a metaphor coined by Ward Cunningham, inventor of wiki, father of extreme programming and one of the signatories of the famous Agile Manifesto. Technical debt means that shortcuts or compromises at the development stage, whether due to time or budgetary constraints, sloppiness or even ignorance, rack up a “debt” that will have to be paid off at some point in the future. This takes into account the idea that the value of code tends to evolves over time according to a downward trend. While some technical debt is inevitable, it can be controlled to minimize its financial impact over the life of the platform.</p><p>The consequences of accumulating heavy technical debt can be disastrous, making it impossible to upgrade a solution or adapt it to a new platform. The use of technologies or versions that are no longer supported can make the solution vulnerable to security threats. Technical debt is always bad, since it raises development costs, handicaps a company’s growth, complicates administration, stretches liquidity and causes headaches for managers. Code quality is an important factor in platform value, and often has an impact on a company’s performance.</p> <p>For example, code that is poorly documented or that doesn’t follow industry best practices is all but impossible to migrate when taking over development or switching to a new development partner. These transfers can happen at any time and repeatedly over the life of a software system, carrying a hefty price tag. Hence the importance of asking questions about best practices when choosing your development partner.</p><h2>What if your project hasn’t aged well?</h2><p>If your software platform was developed in-house, you’ll need to hire a development company to perform an audit on the code. Then, you’ll probably have to prioritize and plan changes to your code based on their findings and recommendations. In order to do this, you’ll have to gain a thorough understanding of the problems found and the impact of outdated or poor-quality code. Obviously, just like financial debt, fixing code is worthwhile only if the benefits outweigh the cost, and if that cost can be amortized over time. </p><h2>How can you avoid the problem altogether?</h2> <p>In most cases, you’re better off spending a little more up front to ensure lasting development. Here are four recommendations:</p><ol><li>Choose a professional team or company that will take pains to gain a good understanding of your short, medium and long-term vision and business objectives from the outset, in order to select the technologies that will support this evolution.</li><li>Make sure your code is properly documented to reduce maintenance and support costs while ensuring its transferability.</li><li>Automated testing can help you detect any losses in the integrity and accuracy of your software features. </li><li>Finally, continuous bug management and the implementation of DevOps techniques will allow you to keep tabs on your software system’s health and act according to your strategic priorities</li></ol><h2>In conclusion</h2><p>Technical debt management is part and parcel of durability and responsible investment. There are many solutions to help lower debt and plan out a more durable technological ecosystem. Perhaps the most important thing is to choose your team or development partner according to their ability to manage this challenge.</p></div>

News
5 min read
Has it really been 15 years?
<div><div><p>Who could have predicted, back in 2003, that a tiny business made up of two people would, 15 years later, become a significant player in the software development industry, with almost 150 employees across four large North American cities?</p><p>Out of humble beginnings, Spiria quickly grew and cemented strong business relationships based on trust, more akin to full-fledged partnerships than the classic client-provider relationship model. This has allowed us to manage our growth, and ensured our company’s longevity. And it paid off: global companies like Autodesk, which publishes 2D and 3D creation software, or the American sales and marketing services firm Acosta, with over 35,000 employees, have worked continuously with Spiria for over a decade.</p><p>In addition to our focus on lasting business relationships, Spiria’s success is also in large part based on the breadth of our knowledge base as well as our multiple locations, which allow us to provide locally-based services to a growing number of businesses all over the map. After 10 years of local growth and development in Montreal, the company decided to branch out geographically. This started in Ottawa-Gatineau in 2014, followed by Boston in 2017, then Toronto in early 2018. This phase of growth, which is far from over, was rolled out without ever compromising quality of service, and with the utmost respect for our corporate values.</p><p>This period of accelerated growth has not gone unnoticed: for the past six years we’ve earned a spot on the PROFIT 500 list of fastest-growing Canadian businesses.</p><p>Spiria’s success is also due in a very large part to the talent and passion of those who make up our team, because above all it’s an adventure predicated on people. “Spirians” are the ambassadors of a culture that’s based on innovation, flexibility and teamwork: a culture that is crucial to the success of each and every one of our software development projects.</p><p>We’re definitely going to celebrate our 15<sup>th</sup> birthday in style, but as always, we’ve got our eye to the future to see where we’ll be in 2023, for our 20<sup>th</sup>!</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2239/spiria-15.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2239/spiria-15.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2239/spiria-15.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2239/spiria-15.png" alt="Spiria, 15th." title="Spiria, 15th."></source></source></source></picture></p></div>

Custom Development
5 min read
Things to consider before investing in the Cloud
<div><div><p>The greatest advantage of Cloud services is their interoperability and flexibility, allowing individuals to access their data, files and applications anywhere, anytime, and from any device. The Cloud benefits companies too, allowing them to externalize aspects of their operations that would require considerable initial outlays and cumbersome management, yet are essential to their smooth functioning (software, servers). </p><p>Following is a quick overview of what to consider before deciding whether to adopt Cloud technologies.</p><h2>Services offered</h2><p>Cloud technologies offer three main types of service.</p> <p>1. <b>Infrastructure as a Service</b> (IaaS).</p><p>This allows enterprises that are unable or unwilling to make massive investments in hardware and related maintenance to rent servers or space to store their data. </p><p>2. <b>Software as a Service</b> (SaaS).</p><p>This is by far the fastest-growing and most popular service. It follows the subscription model, with users paying per amount of time used, per data volume used, or for one-off use.</p><p>3. <b>Platform as a Service</b> (PaaS).</p><p>This variation of Cloud computing adds a preconfigured software environment to the infrastructure service. For example, for a virtual server, the server provider supplies, installs and maintains the operating system.</p><h2>Long-term costs</h2><p>Cloud technologies allow users to amortize their IT investment: the huge initial outlay to purchase hardware and software is replaced by a recurrent, fixed and predictable cost per user or per volume of use.</p><p>Besides saving on acquisition costs, companies also save on labour, since installation is no longer required and the Cloud services provider takes care of updates and other routine tasks.</p><p>But do your math; over the medium term, Cloud solutions may not be the most economical for you.</p><h2>Security</h2><p>At a time when IT security is crucial, how can you be positive that your data on the Cloud is actually protected? After all, threats abound, and hackers’ “exploits” are all over the news.</p><p>Your Cloud technology provider must be completely trustworthy. Make sure that potential providers follow best-practice standards, and check out Cloud technology assessment sites like Chekkt, which lists over 3,000 business technology tools and ranks them by level of user satisfaction, along with their comments.</p><h2>Support</h2><p>Since support and maintenance are no longer provided in-house, you must obtain the best support plan possible, ideally 24/7. Total time during which the service is unavailable should be as low as possible and should be guaranteed not to exceed 0.01%.</p><h2>Trial periods</h2><p>Before signing on with any given Cloud service provider, get a free trial or test their service through a pilot project. This trial period allows you not only to try out the tool, but also to better identify your needs and the level of service you require.</p><h2>Exporting capabilities</h2><p>Worst-case scenario, the Cloud solution may simply not work. This is why potential suppliers should provide an easy way to export data to an off-Cloud location. This feature could also be a life-saver in the event that the provider closes shop.</p><p>All in all, exceptional circumstances notwithstanding, the advantages of migrating to Cloud technologies usually outweigh the downsides. But as always, when dealing with data and business processes, due diligence is a must!</p></div>

Design
5 min read
Design News, March 2018
<h2>Are microframes the future of wireframing?</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-1.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-1.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-1.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="Are microframes the future of wireframing?" src="https://mirror.spiria.com/site/assets/files/2249/1803-design-1.webp" alt="Are microframes the future of wireframing?" /></picture></p> <p>Microframes are the bonzai version of wireframe mock-ups. This article addresses the new prototyping approach that provides a high-level treatment of interfaces and their use.</p> <p lang="fr" xml:lang="fr">⇨ <em>Creative Bloq</em>, “<a href="https://www.creativebloq.com/features/are-microframes-the-future-of-wireframing">Are microframes the future of wireframing?</a>.”</p> <p> </p> <h2>The future of the Web is… Email</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-2.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-2.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-2.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="The future of the Web is… Email." src="https://mirror.spiria.com/site/assets/files/2249/1803-design-2.webp" alt="The future of the Web is… Email." /></picture></p> <p>Google believes that the future of the Web is Email. According to them, smartphones will be all about this communication tool which was born way back at the Big Bang of the Internet.</p> <p lang="fr" xml:lang="fr">⇨ <em>Co.design</em>, “<a href="https://www.fastcodesign.com/90160460/google-thinks-the-future-of-the-web-is-email">Google thinks the future of the Web is… Email</a>.”</p> <p> </p> <h2>CommArts winners of Interactive Design</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-3.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-3.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-3.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="CommArts winners of Interactive Design." src="https://mirror.spiria.com/site/assets/files/2249/1803-design-3.webp" alt="CommArts winners of Interactive Design." /></picture></p> <p>See the winners of the Interactive Design category of Communication Arts magazine’s yearly competition. And while you’re at it, have a peek at the winners in the other categories.</p> <p lang="fr" xml:lang="fr">⇨ <em>Communication Arts</em>, “<a href="https://www.fastcodesign.com/90160460/google-thinks-the-future-of-the-web-is-email">Interactive Gallery</a>.”</p> <p> </p> <h2>Google Flutter in beta mode</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-4.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-4.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-4.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="Google Flutter in beta mode." src="https://mirror.spiria.com/site/assets/files/2249/1803-design-4.webp" alt="Google Flutter in beta mode." /></picture></p> <p>At the last World Mobile Congress, Google announced that <a href="https://flutter.io">Flutter</a>, its new UI framework for developing native interfaces for iOS and Android applications, is now available in beta mode. Free and open-source.</p> <div></div> <p lang="fr" xml:lang="fr">⇨ <em>YouTube</em>, “<a href="https://www.youtube.com/watch?v=fq4N0hgOWzU">Google Developers, Introducing Flutter</a>.”</p> <p> </p> <h2>Moqups: prototypes and site-maps</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-5.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-5.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-5.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="Moqups: prototypes and site-maps." src="https://mirror.spiria.com/site/assets/files/2249/1803-design-5.webp" alt="Moqups: prototypes and site-maps." /></picture></p> <p>Moqups is an on-line tool that’s not exactly new on the prototyping application market. But this solution offers a “Plan” function, to create a project’s structure and hierarchy in flowchart/site-map mode.</p> <p lang="fr" xml:lang="fr">⇨ <em><a href="https://moqups.com">Moqups</a></em>.</p> <p> </p> <h2>An entire library dedicated to interactive design and usability</h2> <p><picture><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-6.400x0.webp" type="image/webp" media="(max-width: 599px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-6.760x0.webp" type="image/webp" media="(max-width: 999px)" /><source srcset="https://mirror.spiria.com/site/assets/files/2249/1803-design-6.1039x0.webp" type="image/webp" media="(min-width: 1000px)" /><img title="Interaction Design Foundation." src="https://mirror.spiria.com/site/assets/files/2249/1803-design-6.jpg" alt="Interaction Design Foundation." /></picture></p> <p>The Interaction Design Foundation has dedicated an entire, rich section of its Web site to the history, features and principles of interactive design, usability and what is now called “user experience”.</p> <p lang="fr" xml:lang="fr">⇨ <em>Interaction Design Foundation</em>, “<a href="https://www.interaction-design.org/literature">Literature</a>.”</p>

Design
5 min read
Design News, February 2018
<div><div><h2>PowerPoint—it’s a complicated relationship</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-1.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-1.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-1.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-1.webp" alt="decorative"></source></source></source></picture></p><p>Originally developed for Mac in 1987, Microsoft PowerPoint is a bit of a software dinosaur which firmly divides opinions, with both ardent fans and detractors. In any case, it has heroically survived the years, despite challenges from alternative, much more up to date applications, for example Apple’s Keynote. Now that we’re in 2018, maybe the time has come to move on?</p><p lang="fr" xml:lang="fr">⇨ <i>BBC Capital</i>, “<a href="http://www.bbc.com/capital/story/20180125-our-love-hate-relationship-with-powerpoint">Our love-hate relationship with PowerPoint</a>.”</p><h2>Will AI replace designers?</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-2.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-2.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-2.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-2.webp" alt="decorative"></source></source></source></picture></p><p>This article tries to ease the fears of those who work in the design field and who worry about the takeover of artificial intelligence in professional environments, which seems likely.</p><p lang="fr" xml:lang="fr">⇨ <i>Webdesigner Depot</i>, “<a href="https://www.webdesignerdepot.com/2018/02/will-ai-really-replace-designers-by-2022/">Will AI really replace designers by 2022?</a>”</p><h2>The 18 “best” wireframe tools</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-3.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-3.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-3.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-3.webp" alt="decorative"></source></source></source></picture></p><p>In response to the proliferation of user interface design applications, the author of this article has come up with a list of what he deems are the top 18 wireframe tools on the market.</p><p lang="fr" xml:lang="fr">⇨ <i>Creative Bloq</i>, “<a href="https://www.creativebloq.com/wireframes/top-wireframing-tools-11121302?ref=webdesignernews.com">The 18 best wireframe tools</a>.”</p><h2>Bye bye, Material Design</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-4.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-4.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-4.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-4.webp" alt="decorative"></source></source></source></picture></p><p>Emin Durak, the author of this article, writes an in-depth critique of Material Design, and doesn’t hesitate to criticize this famous library and its uses, on several different levels. What’s more, and what’s interesting, is that he offers alternative solutions.</p><p lang="fr" xml:lang="fr">⇨ <i>Techtrument</i>, “<a href="https://medium.com/techtrument/bye-bye-material-design-acaebcc7c6b4">Bye bye Material Design</a>.”</p><h2>Snappykit: websites for mobile apps</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-5.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-5.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-5.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-5.webp" alt="decorative"></source></source></source></picture></p><p>This online tool enables you to easily create websites to promote mobile apps in the App Store or Google Play.</p><p lang="fr" xml:lang="fr">⇨ <a href="https://snappykit.com"><i>Snappykit</i></a>.</p><h2>Open Source Design</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-6.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-6.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2248/1802-design-6.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2248/1802-design-6.webp" alt=" " title=" "></source></source></source></picture></p><p>With Open Source Design, developers and designers work together on… Open Source projects. On this site, developers post requests for help from designers with their projects. The collaboration opportunities can be free or paid.</p><p lang="fr" xml:lang="fr">⇨ <a href="http://opensourcedesign.net"><i>Open Source Design</i></a>.</p></div>

Design
5 min read
Design News, January 2018
<div><div><h2>2018 Design Trends</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-1.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-1.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-1.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-1.webp" alt="2018 Design Trends." title="2018 Design Trends."></source></source></source></picture></p><p>Each year begins and ends with a host of lists popping up online, predicting trends and patterns in visual design for the year to come. Joining the crowd, Webdesigner Depot has published its list of “6 Design Predictions for 2018.”</p><p lang="fr" xml:lang="fr">⇨ <i>Webdesigner Depot</i>, “<a href="https://www.webdesignerdepot.com/2018/01/6-design-predictions-for-2018-that-might-actually-happen/">6 design predictions for 2018 (that might actually happen)</a>.”</p><h2>Best of Design From Google</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-2.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-2.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-2.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-2.webp" alt="Google Design." title="Google Design."></source></source></source></picture></p><p>Google is very proud of these 10 design projects that they developed in 2017. Some of these have flown under the radar and aren’t widely known, while others have achieved success in the interactive design field.</p><p lang="fr" xml:lang="fr">⇨ <i>Google Design</i>, “<a href="https://design.google/library/2017-design-google/">Google Design’s Best of 2017</a>.”</p><h2>GazMétro is Now Énergir</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-3.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-3.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-3.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-3.webp" alt="Énergir." title="Énergir."></source></source></source></picture></p><p>GazMétro has recently undergone a change, with a new name, branding and positioning to highlight a new mission and vision; the company is now known as Énergir. Opinion is divided on the change. (Thanks Martine).</p><p lang="fr" xml:lang="fr">⇨ <i>Brand New</i>, “<a href="https://www.underconsideration.com/brandnew/archives/new_name_logo_and_identity_for_energir_by_cossette.php">To Energe or Not to Energe, That is the Verb</a>.”</p><h2>IBM Plex: New Corporate Typeface</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-4.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-4.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-4.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-4.webp" alt="IBM Plex." title="IBM Plex."></source></source></source></picture></p><p>IBM Plex is the company’s new collection of fonts; it is now available for free as an open source under a “SIL Open Font License.”</p><p lang="fr" xml:lang="fr">⇨ <i>Bold Monday</i>, “<a href="https://www.boldmonday.com/custom/ibm/">IBM Plex</a>.”</p><h2>Humanscale Design Tool—What’s Old is New Again</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-5.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-5.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-5.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-5.webp" alt="Humanscale." title="Humanscale."></source></source></source></picture></p><p>Humanscale is a brilliant tool, which was widely embraced by object designers and industrial designers, including those working at Apple, in days gone by. It’s made up of a series of brochures and disks which provide data sets for different human measurements and are used to develop objects and tools that are as ergonomic as possible. Humanscale has been re-released, and is now available in its traditional, hard-copy, paper format.</p><p lang="fr" xml:lang="fr">⇨ <i>Wired</i>, “<a href="https://www.wired.com/story/humanscale-the-classic-design-tool-gets-a-second-life/">Humanscale, the classic design tool, gets a second life</a>.”</p><h2>Generative AI and Art</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-6.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-6.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2233/1801-design-6.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2233/1801-design-6.webp" alt="Generative AI." title="Generative AI."></source></source></source></picture></p><p>Stories abound that attest to the prodigious development of artificial intelligence in many different areas of application. AI is now also influencing design—by generating concepts and patterns, doing touch-ups, and adjusting and combining visual elements. And it often surpasses the creativity, imagination and reasoning abilities of an actual human working in the design field.</p><p lang="fr" xml:lang="fr">⇨ <i>Digital Arts</i>, “<a href="https://www.digitalartsonline.co.uk/features/illustration/how-generative-ai-is-changing-art-design/">How generative AI is changing art and design</a>.”</p></div>

Design
5 min read
Design News, April 2018
<div><div><h2>Information architecture vs user experience</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-1.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-1.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-1.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-1.webp" alt="." title="."></source></source></source></picture></p><p>In the early days of Web-based e-commerce, the term “information architect” was as pervasive as “UX designer” is today. This is a great little article on user experience as it relates to information architecture.</p><p lang="fr" xml:lang="fr">⇨ <i>UX Booth</i>, Darren Northcott, “<a href="https://www.creativebloq.com/features/are-microframes-the-future-of-wireframing">The difference between Information Architecture and UX Design</a>.”</p><h2>Google “Web Designer” Beta 3.0</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-2.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-2.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-2.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-2.webp" alt="." title="."></source></source></source></picture></p><p>Google just released the 3.0 beta version of its Web Designer application. Contrary to what the product’s name would have you believe, the application is designed specifically for creating animated and interactive HTML5 content, and especially ads.</p><p lang="fr" xml:lang="fr">⇨ <i>WebdesignerDepot</i>, Ezequiel Bruni, “<a href="https://www.webdesignerdepot.com/2018/03/google-web-designer-reaches-3-0-beta/">Google Web Designer reaches 3.0 Beta</a>.”</p><h2>9 tricks to optimize a mobile app interface</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-3.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-3.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-3.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-3.webp" alt="." title="."></source></source></source></picture></p><p>In this article, the author shares 9 tricks to effectively optimize the interface of your mobile applications. Presumably, these tricks also work for Web-based applications.</p><p lang="fr" xml:lang="fr">⇨ <i>Fluid Blog</i>, Harnil Oza, “<a href="https://www.webdesignerdepot.com/2018/03/google-web-designer-reaches-3-0-beta/">9 tips to optimize the UI of mobile apps</a>.”</p><h2>PineGrow, an editor for responsive sites</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-4.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-4.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-4.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-4.webp" alt="." title="."></source></source></source></picture></p><p>Pinegrow is a visual editing tool that works with regular HTML and CSS files. It has unique capabilities, like multi-page editing, a complete suite of components for Bootstrap and Foundation, live CSS styling with SASS and LESS support, a WordPress theme builder, Atom integration, and more. Take advantage of the 7-day trial version to try it out!</p><p lang="fr" xml:lang="fr">⇨ <i><a href="https://pinegrow.com">PineGrow</a>.</i></p><h2>The return of skeuomorphic interfaces?</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-5.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-5.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-5.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-5.webp" alt="." title="."></source></source></source></picture></p><p>A fascinating article that argues that after years of cold, minimalistic design, skeuomorphism is back. Skeuomorphism had been overused by Apple in its early iOS, but now, it is back in the middle ground of good, wholesome fun.</p><p lang="fr" xml:lang="fr">⇨ <i>Prototypr</i>, Michael Flarup, “<a href="https://blog.prototypr.io/bringing-back-skeuomorphic-design-d211cc1c22d2">Bringing back skeuomorphic design</a>.”</p><h2>This is Lunacy: .sketch files in Windows</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-6.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-6.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2269/1804-design-6.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2269/1804-design-6.webp" alt="." title="."></source></source></source></picture></p><p>Lunacy is a software tool that allows you to open and edit “.sketch” files in Windows. Sketch is a rather powerful tool for user interface design, but it only works on Apple platforms. The best part? Lunacy is free!</p><p lang="fr" xml:lang="fr">⇨ “<a href="https://icons8.com/lunacy">Lunacy, Sketch for Windows</a>.”</p></div>

Dev's Corner
5 min read
Connected Washing Machine With A Raspberry Pi
<div><div><h2>Research</h2><p>I did a bit of research on the Internet to get better acquainted with what the Raspberry Pi could do. As I looked at similar projects, I saw that various people had approached the same problem from various angles:</p><ol> <li>Some had used a vibration-detection system.</li> <li>Some had used a light-detection system to monitor the machine’s “On” indicator.</li> <li>Some had plugged right into the machine’s electronics.</li></ol><p>There was no way I was going to risk breaking my washing machine by messing with its electronics; option 3 was therefore ruled out. Those who had gone with option 2 had stuck their light-detection system on the front of the machine, which seemed awkward to me. So I was down to option 1, the vibration-detection system.</p><h3>Vibration Detector</h3><p>Once again, I had a choice of various possibilities. There are several types of vibration-detection technologies: electromechanical, piezoelectrical, optical…</p><p>I randomly chose an electromechanical vibration detector, whose main component is a SW-18010P vibration sensor switch.</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/sw18010p.png" alt=""></p><p>This is a very simple device consisting of a metal pin inside a spring. Vibrations cause the spring to touch the pin, closing the circuit. In order to match the signal generated from the device with the required input levels of the Raspberry Pi, I chose to use a little conditioning circuit to do the job.</p><p>Since I hadn’t worked on electrical circuits since university, I once again turned to the Internet to learn how to make use of this component with the Raspberry Pi. I found a five-dollar module on Amazon which combined the SW-18010P vibration sensor switch with a LM393 voltage comparator.</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/vibration_sensor_module_1.png" alt=""><img src="https://mirror.spiria.com/site/assets/files/1932/vibration_sensor_module_schema_0.jpg" alt=""></p><p>This module can be hooked up directly to the Raspberry Pi (3.3 volts) and its signal can also be input directly, which is exactly what I needed.</p><h3>“Push” Notifications</h3><p>Since the whole point of this project was to receive a remote notification at the end of the wash cycle, I had to find a relatively simple way for my Raspberry Pi to send notifications to my phone. Since I had already used a push notification system called <a href="https://pushover.net">Pushover</a> for a previous project, and was familiar with it, I decided to use my existing account for this project.</p><p>There are many other competing systems, some of which charge monthly fees in exchange for a certain number of push notifications. But the Pushover service is based on a one-time payment for an application (for smartphone/tablet or desktop), in exchange for a certain number of notifications per month. This solution seemed appropriate for my non-commercial needs.</p><p>When I originally set up my account on the Pushover site, I received a user key which enabled me to receive notifications on my devices. I then had to create a new application key for each notification-sending application or script that I created. So I just had to create a new application key for this project. Here is a look at my Pushover account page:</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/pushover.png" alt=""></p><p>Delivering push notifications from Python consist in sending an POST (HTTP) message containing the user key, the application key and the message to be sent.</p><h2>System Design</h2><p>Once I received my vibration detector, I had to think of the features I’d need for a complete solution. I wanted:</p><ol> <li>To be able to tell the Raspberry Pi when a washing cycle started (to keep it from interpreting environmental vibrations as a wash cycle).</li> <li>To have a visual indicator confirming the proper functioning of my system (since the Raspberry Pi is not connected to a screen).</li> <li>To receive a notification on my mobile phone at the end of the wash cyle.</li></ol><p>Rummaging through my Raspberry Pi components, I found what I needed: a push-button to indicate the start of the wash cycle and a LED to confirm that the Raspberry Pi was actually monitoring machine vibrations. Since the components I received with my Raspberry Pi included a WiFi adaptor, I would have no problem sending my notifications over the Internet.</p><h3>Familiarizing Myself with the Raspberry Pi</h3><p>The first order of business was to install an operating system on the Raspberry Pi’s Micro SD card. This was very easy: raspberrypi.org provides everything you need to create a Micro SD card with the NOOBS installer, which allows you to choose which operating system to install on the card. I decided to use the Raspbian operating system, since it is Linux-based and seemed to provide most of what I needed for my project.</p><p>Once Raspbian was installed, I checked out all of its features to get an idea of its capabilities. I quickly saw that Python came pre-installed, which seemed to be the ideal platform for my system. A quick search on the Web led me to the RPi.GPIO library, which allowed me to control the various digital inputs and outputs of the Raspberry Pi.</p><p>To familiarize myself with the library, I started by trying to control the lighting of the LED. In order to do this, I connected the LED to the Raspberry Pi with a series resistor circuit in order to provide it with the appropriate current. This is what the circuit looked like:</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/led-control.png" alt=""></p><p>The RPi.GPIO library was very easy to use; I was able to make my prototype work with minimal code:</p><pre><code>try: # import necessary libraries import RPi.GPIO as GPIO import timeexcept RuntimeError: print("Error loading RPi.GPIO")# define exit pin connected to LEDLED = 37def main(): try: # configure GPIO pins GPIO.setmode(GPIO.BOARD) GPIO.setup(LED, GPIO.OUT) while True: # after 2 seconds, light LED (providing GND) time.sleep(2) GPIO.output(LED, False) # after 2 seconds, shut off LED (providing 3.3V) time.sleep(2) GPIO.output(LED, True) except: print(“Quit on exception”) finally: GPIO.cleanup()if __name__ == '__main__' : main()</code></pre><p>Bolstered by this success, I was able to move on to the meat of the matter.</p><h3>Final Circuit</h3><p>Now that I knew how to control the RPi.GPIO library, I just had to plug my push-button into the circuit to indicate the start of a wash, then the vibration detector to indicate the end of the cycle.</p><p>The push-button connection is open by default, and pressing on it makes the connection and closes the circuit. One of the terminals must be connected to a power source (3.3 volts from the RPi), and the other to one of the RPi’s GPIO pins (I chose pin 33 — GPIO 13). This way, pressing on the push-button sends a 3.3-volt signal to the RPi. However, this alone does not guarantee the proper functioning of the system. The problem is that when the system is used as is, with the push-button in default position (that is, with the circuit open), pin 33, which is configured as an input, is no longer connected to anything. It is in a floating state, neither connected to the 3.3v (high level), nor to the GND (low level). There is a physical solution to the problem, i.e. connecting a “pull-down” resistor between pin 33 and the GND. However, the Raspberry Pi already implicitly provides “pull-down” and “pull-up” resistors on each of the GPIO pins. Therefore, you can configure the pins with the software to connect them to the internal RPi resistor, as demonstrated lower down.</p><p>As to the vibration detector, its functioning is super-simple. All you have to do is to connect it directly to the Raspberry Pi, then plug its output pin to one of the RPi’s GPIO pins configured as an input pin.</p><p>This is what the final circuit looks like:</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/circuit-final.png" alt=""><img src="https://mirror.spiria.com/site/assets/files/1932/circuit-final-schema.png" alt=""></p><p>And here is the code:</p><pre><code>try: # Import necessary libraries import RPi.GPIO as GPIO import time import http.client, urllib # for push notifications import logging # for debuggingexcept RuntimeError: print("Error loading RPi.GPIO")DELAYINSECS = 180 # Time in seconds before declaring end of cycle# Define RPi input/output pinsBUTTON = 33LED = 37VIBRATION = 31# Function to send push notification with pushover.netdef pushdone(): conn = http.client.HTTPSConnection("api.pushover.net:443") conn.request("POST", "/1/messages.json", urllib.parse.urlencode({ "token": "", "user": "", "message": "Laundry is done", }), { "Content-type": "application/x-www-form-urlencoded" }) conn.getresponse()def main(): try: # Configure GPIO pins GPIO.setmode(GPIO.BOARD) GPIO.setup(VIBRATION, GPIO.IN) GPIO.setup(LED, GPIO.OUT) # "Pull-down" resistor must be added to input # push-button to avoid floating value at # RPi input when button not in closed circuit. GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Start of sensing of upwards or downwards front on # pin connected to vibration detector. # "Bouncetime" argument ignores effect of bouncing caused by # sudden state changes. GPIO.add_event_detect(VIBRATION, GPIO.BOTH, bouncetime=200) # Configure debugging journal file on RPi logging.basicConfig(filename='/home/pi/washer.log', level=logging.INFO, format='%(asctime)s %(levelname)s:%(message)s') logging.info("****************************") stop = False logging.info("Entering main loop") # Main loop, waits for push-button to be # pressed to indicate beginning of cycle, then # periodically checks vibration. while not stop: logging.info("Main loop iteration") GPIO.output(LED, True) # LED off GPIO.wait_for_edge(BUTTON, GPIO.RISING) # wait for signal # from push-button logging.info(" Started") going = True GPIO.output(LED, False) # LED on # Secondary program circuit, checks every 3 # minutes for vibrations during this time. # If no vibration for the last 3 # minutes, cycle considered done. while going: logging.info(" Inner loop iteration") time.sleep(DELAYINSECS) logging.info(" Just slept %ds", DELAYINSECS) # Manual override to stop the current cycle; # keep push-button # pressed during check. if GPIO.input(BUTTON): stop = True going = False # End of cycle if no vibration detected. if not GPIO.event_detected(VIBRATION): logging.info(" Stopped vibrating") pushdone() going = False logging.debug(" End of iteration") except: logging.warning("Quit on exception") finally: logging.info("Cleaning up") GPIO.remove_event_detect(VIBRATION) GPIO.cleanup()if __name__ == '__main__': main()</code></pre><p>Once the code is written in a text document (/home/pi/washer_cycle.py), all you need to do is to add some instructions to the Raspbian start-up script (/etc/rc.local) to launch the script in superuser mode at system launch (the RPi.GPIO library does have a few compatibility issues running in regular user mode, hence the need to execute the command with sudo).</p><ul> <li>At the end of /etc/rc.local :</li></ul><pre><code>/home/pi/script_auto_run</code></pre><ul> <li>In /home/pi/script_auto_run :</li></ul><pre><code>#!/bin/bashecho "Autorun washer script"sudo /usr/bin/python3 /home/pi/washer_cycle.py</code></pre><h2>Final Test</h2><p>Time to go live! I installed my system on top of the machine, started a wash and pressed the push-button. The LED lit up, confirming the proper functioning of the script.</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/laveuse.png" alt=""></p><p>About an hour later, I received the following notification on my phone:</p><p><img src="https://mirror.spiria.com/site/assets/files/1932/push.png" alt=""></p></div>

Dev's Corner
5 min read
Building a Shower Timer with an ESP8266
<div><h2>Working Principle</h2><p>An electrically operated ball valve is installed on the supply side of my hot water tank and paired with a water flowmeter. A small microcontroller device monitors the amount of time during which the water is passing through the tank. When the allotted time is reached, the valve is temporarily cycled off and on for a few seconds to warn the person taking a shower that her time is up.</p><h2>Required Materials</h2><p>For this project, I selected an Adafruit HUZZAH ESP8266 board, which is both cheap and packed with features that make it interesting to play with. First, it has WiFi capability, which allows it to be controlled remotely. This means that it can be initialized as an access point, which allows me to configure it to join a home network. Second, it can run a Web server to allow over-the-air updates: once the original wiring plan is installed, there is no further need to connect it through the USB port for updates. Third, it comes with a built-in voltage regulator, converting the 5V current from the power supply that drives the valve’s motor to a voltage that can be handled by the GPIO pins.</p><ul> <li><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-01.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-01.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-01.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-01.jpg" alt="Adafruit HUZZAH ESP8266." title="Adafruit HUZZAH ESP8266."></source></source></source></picture> <a href="https://www.adafruit.com/product/2471">Adafruit HUZZAH ESP8266</a>.</li> <li style="clear: both;"><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-02.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-02.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-02.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-02.jpg" alt="USB to TTL Serial Cable." title="USB to TTL Serial Cable."></source></source></source></picture> <a href="https://www.adafruit.com/products/954">USB to TTL Serial Cable</a>.</li> <li style="clear: both;"><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-03.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-03.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-03.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-03.webp" alt="MISOL 3/4” DN20 Electronic Flow Meter." title="MISOL 3/4” DN20 Electronic Flow Meter."></source></source></source></picture><a href="https://www.aliexpress.com/popular/electronic-flow-meter.html">3/4" Electronic Flow Meter</a> (AliExpress).</li> <li style="clear: both;"><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-04.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-04.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-04.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-04.webp" alt="Motorized Ball Valve - CR02 wiring." title="Motorized Ball Valve - CR02 wiring."></source></source></source></picture><a href="https://www.aliexpress.com/popular/motorized-ball-valve.html">5 Volts, 3/4" Motorized Ball Valve</a> (AliExpress).</li> <li style="clear: both;"><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-05b.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-05b.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-05b.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-05b.webp" alt="5V 2A DC Power Supply." title="5V 2A DC Power Supply."></source></source></source></picture>Une <a href="https://www.amazon.ca/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=5+Volt+Power+Supply" rel="nofollow">5V Power Supply</a> (Amazon).</li> <li style="clear: both; padding-top: 2em;">Breadboard, electrical wire and project box.</li></ul><h2>Wiring Diagram</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-06.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-06.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-06.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-06.webp" alt="Wiring Diagram." title="Wiring Diagram."></source></source></source></picture></p><h2>Installation</h2><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-07.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-07.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-07.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-07.webp" alt="Installation." title="Installation."></source></source></source></picture></p><h2>Program</h2><p>The logic is quite simple. An interrupt routine monitors the impulses generated by the flowmeter device. These impulses are accumulated while, every minute, a timer calls a callback routine that stores the accumulated impulses in an array which can hold up to 15 minutes of data. When all the cells in the array contain a value other than 0, the controller cycles the valve off and on</p><h2>Source Code</h2><pre><code>// MrShower// Created by Patrick Walsh.//// Hot Water monitoring system installed at the intake of a hot water tank.// When hot water has been running for 15 minutes an electrical ball valve will cycle off and on every minute until usage ends.( Shower ) an elc//#include <esp8266httpupdateserver.h>#include <esp8266mdns.h>#include <esp8266wifi.h>#include <ticker.h> #include "WiFiManager.h"#define SKETCH_VERSION 1.0#define HAL_SENSOR_PIN 15 // Flowmeter Hal sensor is connected to this pin #define MONITOR_MINS 15 // Showers can last a maximum of 15 mins before warning kicks in#define SHOWER_SHUTOFF_WARNING_TIME 5.0 // Duration valve will be closed to warn time is up#define TIMER_PERIOD 60.0 // Period required to calculate RPM of Hal effect sensor#define VALVE_CLOSE_CTRL_PIN 12 // Relay connected to the electrical valve Open Wire #define VALVE_OPEN_CTRL_PIN 14 // Relay connected to the electrical valve Close Wire #define VALVE_TRANSIT_DELAY 2.0 // Time taken for valve to move from closed state ot open state//// Global variables//const char* g_HostName = "MrShower"; // DuhESP8266WebServer g_HttpServer(80); // Http server we will be providingESP8266HTTPUpdateServer g_HttpUpdater(false); // A OverTheAir update service. Http://MrShower.local/updateTicker g_MonitoringTimer; // Interupt timer used for counting minutesunsigned g_Rpms[MONITOR_MINS]; // History of rpms in the last "n" minutes// global variables accessed from ISR that need to be protectedvolatile bool g_FlashWater = false; // True if valve needs to be closed temporarilyvolatile unsigned g_HallSensorPulses = 0; // FlowMeter pulses that have occurred in the current minutevolatile bool g_WaterOn = false; // State of Valve //// Forward Declarations//void closeWaterValve();void openWaterValve();void onHallEffect();void onTimerTick();void webServerHandleRoot();void webServerHandleNotFound();void webServerHandleOpenCmd();void webServerHandleCloseCmd();void webServerHandleResetCmd();void webServerHandleCycleCmd();/////////////////////////////////////////////////////////////////////// Setup is called at initialization///////////////////////////////////////////////////////////////////////void setup(){ // Initialize Relay control pinMode(VALVE_CLOSE_CTRL_PIN, OUTPUT); pinMode(VALVE_OPEN_CTRL_PIN, OUTPUT); // Make sure the water valve is open. openWaterValve(); g_HallSensorPulses = 0; // Setup an Access point in order to allow network setup WiFiManager wifiManager; wifiManager.autoConnect( g_HostName ); WiFi.mode( WIFI_STA ); WiFi.softAPdisconnect( true ); // Establish a connection with our configured access point while( WiFi.waitForConnectResult() != WL_CONNECTED ) { WiFi.begin(); } // install web serv handlers. g_HttpServer.on("/", webServerHandleRoot ); g_HttpServer.onNotFound( webServerHandleNotFound ); g_HttpServer.on("/open", webServerHandleOpenCmd); g_HttpServer.on("/close", webServerHandleCloseCmd ); g_HttpServer.on("/reset", webServerHandleResetCmd ); g_HttpServer.on("/cycle", webServerHandleCycleCmd ); // Add OTA update service provided by library "/update" command g_HttpUpdater.setup( &g_HttpServer ); g_HttpServer.begin( ); // Register web services we expose with Bonjour MDNS.begin( g_HostName ); MDNS.addService( "http", "tcp", 80 ); // Clear the array of rpms memset( g_Rpms, 0, sizeof( g_Rpms ) ); // Attach Hall Sensor to HAL_SENSOR_PIN. // ISR called when voltage rises to match one // revolution of the flowmeter turbine attachInterrupt( HAL_SENSOR_PIN, onHallEffect, RISING ); // Start a timer which will treat the reading of the hall sensor and calculate RPM g_MonitoringTimer.attach( TIMER_PERIOD, onTimerTick );}/////////////////////////////////////////////////////////////////////// Code in the loop method will be run repeatedly/////////////////////////////////////////////////////////////////////void loop() { // Allow webserver to process queue of requests sent to it. g_HttpServer.handleClient(); if( g_FlashWater ) { // Need to cycle the hot water valve closeWaterValve( ); delay( SHOWER_SHUTOFF_WARNING_TIME * 1000 ); openWaterValve( ); g_FlashWater = false; }}/////////////////////////////////////////////////////////////////////// Close water valve by controlling 2 relays connected// to ball valve motor/////////////////////////////////////////////////////////////////////void closeWaterValve(){ digitalWrite( VALVE_OPEN_CTRL_PIN, HIGH ); digitalWrite( VALVE_CLOSE_CTRL_PIN, LOW ); delay( VALVE_TRANSIT_DELAY * 1000 ); digitalWrite(VALVE_CLOSE_CTRL_PIN, HIGH ); g_WaterOn = false;}/////////////////////////////////////////////////////////////////////// Open water valve by controlling 2 relays connected// to ball valve motor/////////////////////////////////////////////////////////////////////void openWaterValve(){ digitalWrite( VALVE_CLOSE_CTRL_PIN, HIGH ); digitalWrite( VALVE_OPEN_CTRL_PIN, LOW ); delay( VALVE_TRANSIT_DELAY * 1000 ); digitalWrite( VALVE_OPEN_CTRL_PIN, HIGH ); g_WaterOn = true;}/////////////////////////////////////////////////////////////////////// Interrupt routine called when FlowMeter is generating Hal Effect pulses./////////////////////////////////////////////////////////////////////void onHallEffect(){ // Increase the number of pulses detected by the HallEffect sensor // of the water flowmeter g_HallSensorPulses++;}/////////////////////////////////////////////////////////////////////// Timer-driven callback routine called every minute./////////////////////////////////////////////////////////////////////void onTimerTick(){ // At every clock tick, once per minute, interrupts temporarily disabled while // accumulated pulses generated by flowmeter sensor are read and reset. This gives us a rpm value. cli( ); // disable interupts long l_rpm = g_HallSensorPulses; // copy rpm value locally g_HallSensorPulses = 0; // sensor reading done for this minute sei( ); // reenable interrupts // shift the content of the array to the right 1 memmove( &g_Rpms[1], &g_Rpms[0], sizeof( g_Rpms ) - sizeof( g_Rpms[0] ) ); // Set the latest reading in array g_Rpms[0] = l_rpm; int l_numUsedTicks = 0; for( int idx = 0; idx < MONITOR_MINS; idx++ ) { if( g_Rpms[idx] ) { l_numUsedTicks++; } } // Do we need to flash hot water if( l_numUsedTicks >= MONITOR_MINS && !g_FlashWater ) { g_FlashWater = true; // Set last element of array to 0 to delay next hot water valve cycle by one minute g_Rpms[ MONITOR_MINS - 1 ] = 0; }}/////////////////////////////////////////////////////////////////////// Web Server section/////////////////////////////////////////////////////////////////////void webServerHandleRoot() { String message; message += g_HostName; message += "Version "; message += SKETCH_VERSION; message += " \n"; message += "FlowMeter revolutions this minute "; message += g_HallSensorPulses; message += " \n"; message += g_WaterOn == true ? "Valve is Opened" : "Valve is Closed"; message += " : "; for(int idx = 0; idx < MONITOR_MINS; idx++) { message += g_Rpms[idx]; message += " "; } message += " \n"; message += "Commands : /open /close /update /cycle /reset\n"; g_HttpServer.send(200, "text/plain", message ); }/////////////////////////////////////////////////////////////////////// Unknown page requested/////////////////////////////////////////////////////////////////////void webServerHandleNotFound() { String message = "File Not Found\n\n"; message += "URI: "; message += g_HttpServer.uri(); message += "\nMethod: "; message += (g_HttpServer.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += g_HttpServer.args(); message += "\n"; for (uint8_t i = 0; i < g_HttpServer.args(); i++) { message += " " + g_HttpServer.argName(i) + ": " + g_HttpServer.arg(i) + "\n"; } g_HttpServer.send(404, "text/plain", message);}/////////////////////////////////////////////////////////////////////// Open requested/////////////////////////////////////////////////////////////////////void webServerHandleOpenCmd(){ g_HttpServer.send(200, "text/plain", "Opening Valve"); openWaterValve();} /////////////////////////////////////////////////////////////////////// Close requested/////////////////////////////////////////////////////////////////////void webServerHandleCloseCmd(){ g_HttpServer.send(200, "text/plain", "Closing Valve"); closeWaterValve();}/////////////////////////////////////////////////////////////////////// Reset requested/////////////////////////////////////////////////////////////////////void webServerHandleResetCmd(){ memset( g_Rpms, 0, sizeof( g_Rpms ) ); openWaterValve(); g_HttpServer.send(200, "text/plain", "System was reset" );}/////////////////////////////////////////////////////////////////////// Cycle the valve off and on/////////////////////////////////////////////////////////////////////void webServerHandleCycleCmd(){ g_HttpServer.send(200, "text/plain", "Cycling water valve" ); // Set the Flash water variable to true. // The loop routine, when true, will cycle the water valve, g_FlashWater = true;}</ticker.h></esp8266wifi.h></esp8266mdns.h></esp8266httpupdateserver.h></code></pre><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-08.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-08.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2016/mrshower-08.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2016/mrshower-08.png" alt="Web Server." title="Web Server."></source></source></source></picture></p><p style="display: block;padding: 0.5em 2em 0.7em 2em;margin: 1em 0 2em 0;background-color: #fff;border-radius:4px;box-shadow: 1px 7px 15px 0 rgba(47,57,64,0.2);text-align: center;"><b><i>Did you know that?</i></b><br>Spiria’s teams have a long experience in the development of complex <a href="https://www.spiria.com/en/services/purpose-built-development/custom-software-development/">custom applications</a> and can help you on any large-scale project.</p><h2>Ideas for improvements</h2><ul> <li>Collecting and reporting hot water consumption per month or year.</li> <li>Providing UI to help configure the valve cycling time and monitoring period.</li> <li>Adding water sensor on floor to detect accidental flooding due to water heater tank failure.</li> <li>Support for Apple Homekit or other home automation network.</li></ul></div>

Culture
5 min read
Spiria’s “Great Fair”
<div><div><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-01.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-01.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-01.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-01.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><p>At Spiria, at any given time, different teams are working on different projects using different technologies. To provide our people with an overall vision of our company’s work, and to allow them to share their knowledge and experience, we organize an internal event several times a year: the Great Fair.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-03.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-03.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-03.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-03.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><h2>Goals</h2><p>The Great Fair is a way for our people to find out what their colleagues are working on and to get better acquainted with clients and projects they may have only heard of. This is also a chance to share experiences in relation to the various technologies used, strategies chosen, challenges encountered, and solutions found. Anyone and everyone can join in: project managers, developers, integrators, designers, etc. Better yet, the Fair is also a chance for employees to get to know each other, see each other and understand each other, and to gain a better understanding of the company as a whole.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-04.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-04.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-04.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-04.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><h2>How does it work?</h2><p>The Great Fair takes place in the basement, in a room normally reserved for important employee activities such as ping-pong, foosball, pool, etc. It takes place at lunchtime, over a complimentary meal provided by the company. This makes the event all about information, exchanging and relaxation, rather than a formal, didactic and boring experience. Attendance is voluntary and informal. The success of the event is a function of participants’ innate curiosity and appetite to learn and discover.</p><p>Usually, six projects that are either underway or have just been completed are selected in consultation with the teams, and a booth is set up for each of the projects. Each booth consists of a presentation table and a poster summarizing the project and listing the participants. Attendees walk around the booths at random, getting a short, very informal presentation of each project, or just engaging in questions and answers, depending on their level of interest and expertise.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-05b.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-05b.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-05b.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-05b.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><h2>Assessment</h2><p>After each event, we send out an anonymous, on-line survey to all employees to get their feedback in order to adjust and improve the event for next time. Thanks to this survey, we have been able to enhance the overall organization of the event, fine-tune the number of projects presented per event, and improve the placement of the booths in the room. But we are constantly improving future experiences based on past experiences.</p><p>Presenters are also asked for feedback on their experience, how they felt about it, and whether they would volunteer to present another project. Thanks to this feedback, we realized that it is better to team up presenters in twos rather than have just one per booth.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-06.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-06.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-06.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-06.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><h2>Success</h2><p>Employees’ responses show that the Great Fair is a worthwhile event, since, according to the survey, all responders learned more about at least one or two projects, and over half of responders learned more about at least three projects out of six. These figures are the result of time spent at the event as well as time spent on the actual projects. Qualitative feedback is also positive, praising the event’s organization and the interest it generates. And if that doesn’t sound convincing enough, attendance figures are the surest sign of success: most employees attend most Fairs voluntarily, just because they find them interesting.</p><p>The Great Fair allows our people to meet up in a different context and to chat with people they wouldn’t normally interact with because, for example, they work on different projects or in different fields. The Fair is also a source of inspiration and cross-pollination of knowledge: people pick up ideas and learn new techniques that they can apply to current or future projects. And if someone’s interest is piqued by a project in particular, they can make a date for a more in-depth discussion with the team in charge of the project.</p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-02.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-02.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-02.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-02.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p><p><picture><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-00.400x0.webp" media="(max-width: 599px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-00.760x0.webp" media="(max-width: 999px)"><source type="image/webp" srcset="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-00.1039x0.webp" media="(min-width: 1000px)"><img src="https://mirror.spiria.com/site/assets/files/2014/foire-savoir-00.webp" style="width:800px; border-style:solid; border-width:1px;" alt="Grande foire, Spiria." title="Grande foire, Spiria."></source></source></source></picture></p></div>

Culture
5 min read
What You Need to Know Before You Become a Software Developer
<div><div><p>Nowadays, it is possible to make a living as a software developer without a university degree. Though you’ll need advanced skills and knowledge, you don’t necessarily need to obtain any particular accreditation or sit exams. Of course, programmers with degrees have an easier time getting a job, since they seem less risky to companies. However, the key skills discussed in this article can help you market yourself, be it as a staff programmer or as a freelancer.</p><h2>1. Ability to Work as Part of a Team</h2><p>You may think it odd to put “teamwork” at the top of our list. In fact, teamwork is crucial. Very few programmers actually work alone; in fact, the traditional work environment requires programmers to work together to complete complex tasks by taking on important, often shared, responsibilities. Being able to work with others and to provide both technical and social added value to the team is a considerable asset to any developer.</p><h2>2. Broad Knowledge of Various Programming Languages</h2><p>You should know at least one programming language per major development model. But you’ll attract even more attention if you know at least one other type of language: procedural, object-oriented, functional, declarative or multimodel languages like Python or Java can round out your skills and help you stand out from the crowd.</p><h2>3. Expertise in Software Security</h2><p>The ability to develop a powerful program is essential, but not sufficient. What about security? Indeed, security is becoming an increasingly pressing issue in software development. You can develop your skills in software security through the not-for-profit charitable organisation OWASP (Open Web Application Security Project), which focuses on improving software security.</p><h2>4. Expertise in Data Structure and Algorhythms</h2><p>Software developers are often asked to correct code or to create individual solutions to meet specific client needs. The ability to analyze code will give you flexibility and versatility, two highly prized assets in the field. The book Coders at Work is a good starting point to enhance your knowledge and provide you with a clear vision of the programming universe, and of your future profession.</p><h2>5. Ability to Understand your Client</h2><p>Sounds simple, doesn’t it? But you’d be surprised at the number of developers who don’t make it because they just don’t understand their clients’ needs. How can you develop and implement helpful software without a thorough understanding of its intended use, or of your client’s goals? Taking the time to understand every aspect of your client’s company will allow you to develop powerful, high-quality software, designs, tests and implementations.</p><p>Yes, you can become a self-taught software developer, provided you have the qualities and motivation necessary to put in the time and effort required to truly master your craft.</p></div>