Altabel Group's Blog

Posts Tagged ‘Swift

Mobile technology and apps development are trendsetters of the whole generation of business-related innovations. Tools techniques are changing rapidly. Still, there are vivid trends in mobile development. Let’s see what the year 2017 has prepared.
 
Small business now in a race

Having a web presence has shifted to mobile activity for small businesses. Now it is a very efficient marketing tool that every entrepreneur should focus on. With the rise in mobile usage throughout the world mobile apps have become brand-building means for small and medium-sized businesses.

Getting an app is no longer expensive and difficult. It does not require technical background as the process of building mobile apps is getting simplified and cheap. The community which creates and tests mobile apps is rising very fast and provides a number of benefits for a few bucks.
 
Hackers are still ahead

Apps in the majority are still not able to pass security tests. The development community ensures safe e-commerce transactions with the help of encryption tools. But when it comes to privacy of ordinary users, there pops a danger.

Too many gaps in mobile app development are going to let hackers steal our confidentiality. That is what experts predict. But the trend is gradually changing. The aim of developers is predicted to be shifted to privacy enforcement. In other words, sensitive and confidential information which depicts the identity of a user needs to be maintained.
 
Android apps are getting Instant

After a year of probation and testing, Google Android Instant apps are available for developers. This changes a pattern that lies within the app market. Now a user can download a lightweight version of an app without actually installing it.

The feature is going mainstream for developers, because it allows accessing a wider range of apps seamlessly. Potentially, Instant apps may become a powerful tool for customer acquisition.
 
Apps with Augmented Reality (AR)

This year a great number of apps have started integrating AR into use. The success of Pokemon Go proves the trend is influential for many developers. AR helps to interact with customers thus boosting sales and promotion.

This year it is incorporated into cinemas and other entertainment forms such as games. Experts claim that AR will be found in apps for education, marketing and instant messaging.
 
IOT Connected homes, vehicles, lives

IOT devices are set to build a niche in mobile development for years ahead of 2017. Connected devices are functional, time–saving and thus highly popular. While most of IOT devices are controlled by smartphones, the need to build and maintain mobile apps is urgent for Android and Apple OS. Another strong benefit on IOT devices is their connection to a cloud-based technology. The reigning power of “things” is predicted to be growing fast this year.
 
M-commerce is the new future

Rising smartphone penetration will probably help out beat PC-shopping and replace it with m-commerce. But is it safe to utilize Microsoft Wallets, Apple Pay and Samsung Pay? There is much fear on the security gaps in the new-emerging paying methods. But their popularity ensures that there will be much effort put on security. Hence, the mobile app trends of m-commerce are going to stay strong in 2017 as well.
 
Swift in the lead

Developers of 2017 are gradually paying attention to Swift in their startups. This language still retains its fresh and fashionable character. The advanced programming features of this language may outperform competitives. That is why Apple iOS mobile apps are still in the trend in 2017.

These are the main trends believed will be trending for mobile app development in 2017. What are your predictions? Please feel free to share your thoughts.
 

Yuliya Tolkach

Yuliya Tolkach

Business Development Manager

E-mail: Yulia.Tolkach@altabel.com
Skype: yuliya_tolkach
LI Profile: Yuliya Tolkach

 

altabel

Altabel Group

Professional Software Development

E-mail: contact@altabel.com
www.altabel.com

cog

If you are a techie person, you, of course, know the tradition to write a little program to print the text “Hello, world!” to the screen when learning a new language. So today I would like to say “Hello, Rust!” to relatively new system programming language that runs blazingly fast, prevents segmentation faults, and guarantees thread safety.

Rust gives many of the same benefits as traditional systems languages while being highly reliable, more approachable, safer and often more productive.

Although Rust development is sponsored by Mozilla, it is an open community project that strives to be a warm, welcoming and inclusive network of people, who act together to build something awesome. Today, Rust has a worldwide audience with its users in Europe, Japan and Australia. And what is more, Rust jumped to the first place in Stack Overflow annual survey for being Most Loved Programming Language of 2016.

Now we’ll go a little bit deeper into Rust and find out why this programming language grows in popularity and stays focused on three main goals: safety, speed and concurrency.

History

Mozilla employee Graydon Hoare started developing Rust as a personal project in 2006. In 2009 Mozilla began sponsoring the project. In 2010 Rust was officially announced on Mozilla Summit 2010. After several years of active development the first stable version (Rust 1.0) was released on May 15, 2015. Thereafter the release of new version is available every six weeks.

Nowadays we see more companies dealing with Rust. Each one has its own reason to do this.

  • Mozilla. The company has developed Rust code to replace the C++ code that currently handles complex media formats.
  • Dropbox. While much of Dropbox’s back-end infrastructure is historically written in Go, some key components were rewrote in Rust.

Aside from above mentioned tech giants, the other companies that use Rust in production are Skylight, Terminal and MaidSafe.

Peculiarities

Let’s review how Rust can solve the problems and what type of solutions best flow from it.

  • The goal of Rust is to be a safe language that means ‘doesn’t do anything unsafe’.
  • Rust lets us control the costs and guarantees of a program. Rust is a compiled language. Its compiler adheres to strict safety rules, thanks to which additional costs for code execution are missed. As a result of that it’s needed minimum time for implementation or in some cases this time isn’t required at all. So Rust can be used in a real time mode or as an add-in project.
  • There are only two kinds of statements in Rust: ‘declaration statements’ and ‘expression statements’ and everything else is an expression. So Rust is primarily an expression-based language.
  • It is also important to have a well-defined interface, so that some of your functionality is private, and some is public. To facilitate these kinds of things, Rust has a module system.
  • Like most programming languages, Rust encourages the programmer to handle errors in a particular way. That’s why return values are responsible for error handling here.
  • If you know C, C++ or even Java, you will become familiar with the language without any problems.
  • The Rust project uses a concept called ‘release channels’ to manage releases. It’s important to understand this process to choose which version of Rust (Nightly, Beta or Stable) your project should use. New ‘Nightly’ releases are created once a day. Every six weeks, the latest ‘Nightly’ release is promoted to ‘Beta’. Six weeks later, the ‘Beta’ is promoted to ‘Stable’, and becomes the next release of 1.x. Generally speaking, unless you have a specific reason, you should use the stable release channel. These releases are intended for a general audience.
  • Rust is a good solution for: middle and large-size developers team; long-term usage in production; a code with regular support and/or refactor; a great number of existed unit-tests.

Rust was developed with aim to work on various programming platforms. And now it operates on Linux, Mac OS X, Windows, FreeBSD, Android, и iOS. Thanks to Rust wide functionality this language can be used for diverse tasks, such as:

  • front-end applications and interfaces;
  • device driver, games and signal handlers;
  • server-side applications;
  • real-time mode systems (e.g. operating system kernel);
  • embedded systems;
  • robotechnics;
  • web-frameworks;
  • large-scale, highly-productive, resource-intensive and complex software systems.

What’s the difference between Rust programming language and the other ones?

1) Rust is a safe alternative to C++ to make systems programmers more productive, mission-critical software less prone to memory exploits, and parallel algorithms more tractable.
2) The syntax of Rust is similar to C and C++. But despite the syntactic similarity, Rust is semantically very different from C and C++.
3) Rust object orientation isn’t as obvious and advanced as in Java, C#, and Python. Since Rust has no classes.
4) Rust’s more sophisticated than Go. In comparison with Go, Rust gives you larger control over memory and resources. This equates to writing code on a lower level.
5) Swift and Rust are both considered as substitution of C, C++ and ObjectiveC. Swift developers spend more time to make the code readable adding majority of syntactic sugar into the language. While Rust is more distant, it deals with minimum things.

Let’s observe how the competition of mentioned above languages can improve technical picture in the future. And we hope it will do a power of good.

Minuses

It’s impossible to imagine any programming language without drawbacks. If it was so, we’d live in an ideal world. So, let’s back to reality and quickly determine the gaps in Rust.

  • Rust cannot prevent all kinds of software problems. Buggy code can and will be written in Rust. These things aren’t great, but they don’t qualify as unsafe specifically.
  • As a systems language, Rust operates at a low level. If you’re coming from a high-level language, there are some aspects of systems programming that you may not be familiar with.
  • It’s a pretty new language. So using it in development still brings the risk that Rust won’t survive for long and in a few years you need to rewrite it.
  • Considering the previous point, Rust tutorials are quite poor. But Rust’s still a comprehensive language. You can’t become familiar with it quickly and start writing professional code in just several weeks. It’s often needed to peruse RFC, blogs and even GitHub comments to find out necessary information. And still there is no dead certainty in it.
  • Rust isn’t as fast from the beginning as it is often told to be. You can write a fast code, but this still needs good optimization of your algorithms and program structure.
  • Rust compiler is rather strict. People call it a disciplinary language. Everything that isn’t obvious for Rust compiler you should specify on your own. Interestingly enough, when start coding with Rust you can be not aware of your intentions at all. So this learning barrier (altogether with the other ones) leads to the fact that the first Rust impression turns out to be frustrating.

Updates

And yet Rust itself hasn’t been standing still. So I’m pleased to mark an important milestone: with Firefox 48, Mozilla’s shipped its first Rust component to all desktop platforms in August, 2. Ralph Giles and Matthew Gregan implemented the component. For the Rust community as well, this is a real achievement: Rust code shipping to hundreds of millions of Firefox users. Seeing Rust code ships in production at Mozilla feels like the culmination of a long journey. But this is only the first step for Mozilla. For instance, Android support’s coming soon. And more to come! The latest ‘Stable’ version of Rust, 1.11 was announced in August 18, 2016.

There’s a lot more to say about what’s happened and what’s coming up in the Rust world. I however tried to dwell on the most essential and valuable details.

Now that you have Rust introduced, Altabel Group will help you start your first Rust project. And I personally would encourage you to play with this programming language. It’s a great time to get started, and increasingly, to get involved with something safe, speed and concurrent.

So are you ready to give Rust a try? We’d love to hear your comments!

 

Victoria Sazonchik

Victoria Sazonchik

Business Development Manager

E-mail: victoria.sazonchik@altabel.com
Skype: victoria_sazonchik
LI Profile: Victoria Sazonchik

 

altabel

Altabel Group

Professional Software Development

E-mail: contact@altabel.com
www.altabel.com

For almost 15 years ASP.NET has been one of the best web development technologies and many developers consider it to be the best offering from Microsoft. ASP.Net evolves to bring in better features and functionality, which helps businesses scale better. Each year developers see few new trends that enhances development and shortens the time-to-market the solution. Here we will discuss a few trends that will benefit both developers and businesses indulging in ASP.Net.

React

React.js is a JavaScript library for building user interfaces, built by top engineers at Facebook. Facebook’s dev team built React to solve one problem: building large applications with data that changes over time. React lets you express how your app should look at any given point, and can automatically manage all UI updates when your underlying data changes. React.js is declarative, which means that React conceptually hits the “refresh” button any time data changes, and knows to only update the changed parts. React was used in-house at Facebook before being released as an open-source project to the public, so you can be certain it knows how to handle an astronomical amount of data. React was created by Facebook in 2013, and then released as an open-source project. This means that Facebook’s developers solved React’s major problems first, and then made the code available to the world.

Let’s have a glimpse at it benefits.

Data Flow in One Direction – Properties are passed to component to render HTML tags. Component itself cannot change the property; instead, it requires a callback function to modify the property values.

Virtual DOM – is a JavaScript tree of React elements and components. React renders the virtual DOM to the browser to make the user interface visible. React observes the virtual DOM for changes and automatically mutates browser DOM to match the virtual DOM.

JSX – is a Javascript XML syntax transform, which helps in using HTML and rendering its sub-components. It is a preprocessor step that adds XML syntax to JavaScript. You can definitely use React without JSX but JSX makes React a lot more elegant. Just like XML, JSX tags have a tag name, attributes, and children. If an attribute value is enclosed in quotes, the value is a string. Otherwise, wrap the value in braces and the value is the enclosed JavaScript expression.

Easy to Integrate – React can be simply integrated with other tools or frameworks like Jest, Angular.js or Backbone.js.

Xamarin

Xamarin is highly popular mobile development framework with the rule write-once-run-everywhere coding for three leading mobile platforms: Windows, Android and iOS. It empowers developers to write in a single language on a single code base for their app to reach over billions of smart devices irrespective of the platform. Xamarin delivers perfect look and feel of any given platform’s native UI with power-packed functionality and native app performance. Xamarin eliminates the need to manage separate development teams or having to choose one platform over another.

Following are few more benefits of Xamarin:

Xamarin uses the C# programming language
C# is capable of doing anything you could do in Java, Objective-C, and Swift – and it works on platforms that use any of these. Most applications can share 75% or more of their coding, helping to make development on multiple platforms easier than ever before. Many functions unique to each device are mapped at runtime to correspond to that specific device, resulting in an end-user experience that works the way they expect it to work.

Xamarin can import and convert existing code
Do you have existing Objective-C or Java code? Xamarin uses an automatic binding generator to match code like custom controls and frameworks to your new app, and a little bit of testing is usually enough to fix any glitches that occur. By importing your existing code, you can hit the ground running and reduce the time it will take to roll out your improved app.

Xamarin offers same-day support for new OS releases
One of the biggest problems with apps is updating them when a new operating system comes out. These changes can cause major disruptions in the way some functions work, but this particular developer has been able to offer same-day updates that allow you to start taking advantage of new features and capabilities. These updates also mean that you can deal with any major disruptions to your app and get it back up and running if anyone was broken – your business can’t afford to have its tools stuck in limbo, and working with a company offering active support is one of the best ways of ensuring your investment won’t be lost at a crucial time.

Elasticsearch

Elasticsearch is the most popular enterprise search engine followed by Apache Solr based on Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. Elastic search was first released in February 2010, and is a free and open source distributed inverted index created by Shay Banon. It is developed in Java, so it is a cross-platform.

Below you can find major highlights of Elastic Search:

Real-Time Data Analysis – All data is immediately made available for search and analytics.

Distributed approach – Indices can be divided into shards, with each shard able to have any number of replicas. Routing and rebalancing operations are done automatically when new documents are added.

Multi-Tenancy – Multiple indices can be maintained by single cluster and can execute queries individually or as a group. Also, maintain alias of indices and keep them updated.

Full-Text Search – Elastic Search implements a lot of features: customized splitting text into words, customized stemming, facetted search, and more. Powerful, developer-friendly query API supports multilingual search, geolocation, contextual did-you-mean suggestions, autocomplete, and result snippets.

Easy-To-Use RESTful API – Elastic Search is API driven; actions can be performed using a simple Restful API.

Open Source – Elasticsearch is available freely, under the most adoptable and trusted open source license of Apache 2.

In addition, the Microservices, Azure, and AngularJS are also trending in Asp .Net. Nowadays, enterprise applications are in high demand, and these tools are playing a key role to hit the ground and running.

Thanks for reading!

Want to know more about Xamarin and React? Feel free to explore Altabel’s blog and find more information about the hottest trends in IT world!

 

Svetlana Pozdnyakova

Business Development Manager

 

altabel

Altabel Group

Professional Software Development

E-mail: contact@altabel.com
www.altabel.com

mobile

Can you spend a day without your smartphone? I can hardly imagine it.
Could we imagine about 10 years ago that we would use smartphones and tablets every day, everywhere for almost everything: playing games, ordering taxi, watching tv, ordering food, etc? Possibly, not.
The mobile application industry is growing increasingly fast. It`s almost beginning of 2016 and it`s time to speak about top mobile app development trends that will rock this year.

Cloud driven apps will be on top

Cloud is going to play a leading role for a number of mobile apps in 2016. The cloud gives the possibility to sync apps across multiple devices. As the number of people using multiple mobile devices ( smartphones, tablets, wearables) is on the rise, the cloud approach makes it easy for them to access any data from any channel. Also, thanks to the cloud, app developers can retain the small size of mobile apps.
Gartner.com predicts that by 2018 at least 30% of service-centric companies will move the majority of their ERP applications to the cloud.

Focus on Mobile apps security

We witnessed a great increase in information leaks and hacker attacks in 2015 that affected a lot of organizations from small companies to industry giants and government organizations. Reports just prove this fact, more than 75% of mobile applications would fail basic security tests in 2015.
This is horrible as many mobile applications store sensitive and personal information. Gartner predicts that by the end of 2016, more than 50% of global 1000 companies will have stored customer-sensitive data in the public cloud.
So security is a key principle mobile developers should focus on in 2016.
IOS has proved itself as the most secure platform. Android has always been claimed as a non-secure platform, however developers paid more attention to security issue in the latest Android versions.

Shift towards enterprise mobile applications

This trend of the year 2015 will continue to boost in 2016.
According to a survey conducted by Vision Mobile in the beginning of 2015 43% of developers working on enterprise apps were making more than $10,000 per month. In comparison, only 19% of the app developers focusing on consumer apps were making a similar income. The percentage of successful enterprise apps developers is double the percentage of consumer apps developers.
So it`s not a secret that mobile apps developers will focus more on enterprise applications development to generate more revenues

Internet of Things / IoT and wearables

We have seen a big increase in usage of wearable devices in 2015 and this trend will continue to boost in 2016 as well. Certainly, IoT is still in its infancy and it`s mostly consumer based at the moment, but it`ll be adopted for commercial as well as industrial use.
Wearable tech devices, such as Google Glass and iWatch, have already created a huge buzz in the market and are becoming more and more popular.
Analysts predict that IoT will be the next big technological breakthrough and more and more people will be connected to “Things” in the nearest future.
It means that mobile developers and entrepreneurs should be prepared for this trend and consider IoT and wearable technology while developing new applications.

Focus on swift programming

Swift, a relatively new programming language from Apple, has already gained quite a substantial popularity. Apple’s CEO, Tim Cook, claimed that this set of tools was downloaded more than 11 million times in the first month alone. Now, these numbers are bigger.
Swift is designed as both an application language and a systems language and gives the possibility to develop apps for iOS, OS X, watchOS, tvOS, and so on.
I`m sure we will hear more about Swift in 2016.

Vaster adoption of location based technology/ Beacon

Another great trend for mobile developers is beacon technology.
This technology has already revolutionized the shopping experience and is expected to be adopted by other domains other than retail for its location tracking benefits.

New cross platform tools

With the rise of wearable devices, smart TVs, mobile applications need to suit the requirement of multiple platforms and devices. Cross platform tools may be a good solution. Sencha, Titanium, Unity 3D, Cocos2D, PhoneGap, are already playing a big role in the mobile app development market. In 2016 we may see the emergence of new cross platform development tools.
So, this was a short list of mobile app development trends that will be on their rise in 2016. I`ll be happy to hear you opinion on the future of mobile industry. What trends would you like to add to our list?

 

Anna Kozik

Business Development Manager

E-mail: Anna.Kozik@altabel.com
Skype: kozik_anna
LI Profile: Anna Kozik

 

altabel

Altabel Group

Professional Software Development

E-mail: contact@altabel.com
www.altabel.com

Last year Apple introduced Swift, its own programming language, which was focused on making it easier to build apps. Many reviews have praised Swift as the strong alternative of Objective C and even it will replace ‘C’ for embedded coding on entire Apple platform including Mac, iOS handheld devices, and wearable devices in near future. There must be some valid reasons behind. Let’s explore that why Swift is praised more.

1

  1. Ease in Code and Comprehend

Swift isn’t built on C so it is free from all C class languages related warts:

  • If you want to introduce new Objective C type or object-related keyword in Objective C, you have to use @ symbol in each case. Swift is capable to unify all keywords by removing extra @ symbols to de-clutter the code documents.
  • Swift doesn’t follow legacy conventions therefore programmers can easily avoid excessive semicolons that need to indicate end of line.
  • You can avoid use of parenthesis to surround conditional expressions particularly inside if/else statements.
  • Swift uses industry standard comma-separated list of parameters within parenthesis.
  • Swift is a natural type language so its readability resembles to the English so modern programmers certainly love it.
  1. Ease in Maintenance
  • Swift fundamentally avoid double file creation in order to improve the build time and programming efficiencies.
  • Xcode and the LLVM compiler are capable to figure out dependencies as well as perform incremental builds automatically for Swift programming
  • Swift programmers don’t have to follow C paradigm to create two files by separating table of content and body because (.swift) combines both (.h) and (.m).
  • In Swift, you don’t need to synchronize method names and comments between files.
  • Xcode and the LLVM compiler can reduce the work load of programmers behind the scene because it demand less bookkeeping to cuts out boilerplate work and improves the quality of Swift code along with productivity.
  1. Swift requires less code 
  • Swift reduces the amount of code that is required for repetitive statements and string manipulation. In Objective-C, working with text strings requires many steps to combine two pieces of information. Swift adopts modern programming language features like adding two strings together with a “+” operator. Support for combining characters and strings like this is fundamental for any programming language that displays text to a user on a screen.
  • The type system in Swift reduces the complexity of code statements — as the compiler can figure out types. As an example, Objective-C requires programmers to memorize special string tokens (%s, %d, %@) and provide a comma-separated list of variables to replace each token. Swift supports string interpolation, which eliminates the need to memorize tokens and allows programmers to insert variables directly inline to a user-facing string, such as a label or button title. The type inferencing system and string interpolation mitigate a common source of crashes that are common in Objective-C.
  • Swift relieves you from bookkeeping work, translating into less code to write (code that is now less error prone) because of its inline support for manipulating text strings and data.
  1. Ease in Memory Management

Memory management is quick and without memory leakage:

  • Swift unifies the language in a way that Objective-C never has. The support for Automatic Reference Counting (ARC) is complete across the procedural and object-oriented code paths. In Objective-C, ARC is supported within the Cocoa APIs and object-oriented code; it isn’t available, for procedural C code and APIs like Core Graphics. This means it becomes the programmer’s responsibility to handle memory management when working with the Core Graphics APIs and other low-level APIs available on iOS. The huge memory leaks that a programmer can have in Objective-C are impossible in Swift.
  • Because ARC handles all memory management at compile time, the brainpower that would have gone toward memory management can instead be focused on core app logic and new features. Because ARC in Swift works across both procedural and object-oriented code, it requires no more mental context switches for programmers, even as they write code that touches lower-level APIs – a problem with the current version of Objective-C.
  1. Ease in Debugging
  • Debugging process is instant and rapid, because Swift allows generating a compiler error along with ongoing writing of the code in document.
  1. Fast Performance

Swift has memory-bound GEMM algorithm with sequential access of large arrays. Therefore, along with FFT and Mandelbrot algorithm, it improves overall performance many folds:

  • According to Primate Labs (GeekBench performance tool), Swift was approaching the performance characteristics of C++ for compute-bound tasks in December 2014 using the Mandelbrot algorithm.
  • In February 2015 the Xcode 6.3 Beta improved Swift’s performance of the GEMM algorithm – a memory-bound algorithm with sequential access of large arrays – by a factor of 1.4. The initial FFT implementation – a memory-bound algorithm with random access of large arrays – had a 2.6-fold performance improvement.
  • Further improvements were observed in Swift by applying best practices, resulting in an 8.5-fold boost for FFT algorithm performance (leaving C++ with only a 1.1-time performance gain). The enhancements also enabled Swift to outperform C++ for the Mandelbrot algorithm by a factor of a mere 1.03.
  • Swift is nearly on par with C++ for both the FFT and Mandelbrot algorithms. According to Primate Labs, the GEMM algorithm performance suggests the Swift compiler cannot vectorize code the C++ compiler can – an easy performance gain that could be achieved in the next version of Swift.
  1. Encouraging Interactive Coding
  • Swift has highly interactive tool for seasoned /experienced programmers in form of Playground so programmers can write an algorithm while instantly obtaining feedback.
  • The Playgrounds were partially inspired by the work of former Apple employee Brett Victor. Playgrounds enable programmers to test out a new algorithm or graphics routine, say 5 to 20 lines of code, without having to create an entire iPhone app.
  • Apple has added inline code execution to Playgrounds to help programmers create a chunk of code or write an algorithm while getting feedback along the way. This feedback loop can improve the speed at which code can be written because the mental model that a traditional programmer needs can be replaced with data visualizations in Playgrounds. Programming is an iterative process, and any strain that can be reduced or used to complement the creative process will make programmers more productive and free them to solve bigger problems, rather than focusing on boring details that traditional compilers have imposed on programmers.

To draw the conclusion, one can say that, Swift is full-featured and  highly approachable  programming language to allow iPhone developers to create next generation iPhone apps as well as iPhone apps that supporting solely the Apple Watch and other wearable devices applications in cost-effective  and with ease ways. If you have any app idea for such next generation iPhone application developmentAltabel Group has solid team of iPhone app developers with expertise in Swift and other latest modern iOS development techniques, tools and technologies.

 

Svetlana Pozdnyakova

Business Development Manager

 

altabel

Altabel Group

Professional Software Development

E-mail: contact@altabel.com
www.altabel.com


%d bloggers like this: