This document provides an overview of key topics for Android development including Gradle, libraries, networking, image loading, ORM, testing, Git, and continuous integration (CI). It discusses Gradle build files and configurations, popular Android libraries for networking, images, and databases. It also covers unit testing tools and strategies in Android including JUnit, Espresso, and Monkey. Finally, it summarizes Git, CI workflows, and additional CI tools.
How we use fastlene for android at ookami, Inc.
We use fastlane to
1. Build using gradle
2. Beta Distribution
3. Upload builds and metadata to Google Play
See more about fastlane.
https://github.com/fastlane/fastlane
Supply - Command line tool for updating Android apps and their metadata on the Google Play Store.
https://github.com/fastlane/supply
Understanding Pseudo-Versions Moving to Go 1.13 What is in Go 1.14+ for ModulesMitali Bisht
Explaining pseudo-version, how restrictions have been enforced for pseudo-version in Go 1.13 along with go sumdb, resolving them , features in Go 1.14+ related to modules
Presented Thursday - June 21st, 2018
I presented a 45-minute version of my "TypeScript 101" talk that serves as a short introduction to TypeScript and the benefits it provides to large-scale projects.
How we use fastlene for android at ookami, Inc.
We use fastlane to
1. Build using gradle
2. Beta Distribution
3. Upload builds and metadata to Google Play
See more about fastlane.
https://github.com/fastlane/fastlane
Supply - Command line tool for updating Android apps and their metadata on the Google Play Store.
https://github.com/fastlane/supply
Understanding Pseudo-Versions Moving to Go 1.13 What is in Go 1.14+ for ModulesMitali Bisht
Explaining pseudo-version, how restrictions have been enforced for pseudo-version in Go 1.13 along with go sumdb, resolving them , features in Go 1.14+ related to modules
Presented Thursday - June 21st, 2018
I presented a 45-minute version of my "TypeScript 101" talk that serves as a short introduction to TypeScript and the benefits it provides to large-scale projects.
Cross Platform Mobile Development for Business ApplicationsDavid Karlsson
Mobility is becoming increasingly important for many companies. The markets for mobile
applications have been growing tremendously the last decade. It is therefore of great
interest to reduce the costs of development and maintenance of these applications.
When developing native applications for multiple platforms some parts of the code will
likely implement the same functionality. This functionality is then implemented in dierent
programming languages, for dierent platforms. Functionalities that are typically the
same on all platforms are network communication, data parsing and business logic. These
functionalities can account for a large part of the code when developing large and complex
applications. Duplication of the code, for these functionalities, could be avoided if common
functionality could be extracted from the applications and put in a shared code base.
The aim of this project is to investigate possible solutions to the problem of code duplication
in the case of a specic business application, developed for iOS and Android. It consists
of a mobile client which performs some transformation of data acquired from a business
system and presents it in the native UIs.
This thesis rst discusses the requirements and constraints which are inferred from the application
type and the company wishing to apply cross-platform development. It also maps
existing cross-platform development methods for this type of application and investigates
to which extent the dierent cross-platform development methods full the requirements.
Finally the most suitable method is used in a practical context.
The objectives of this project are to provide the company with a recommendation of a
method as well as a prototype proving the concept of this method. This project will focus on possible solutions for mobile business applications with native
UIs.
The conclusion of the project is that native C++ is the most suitable method for this
type of application. It fulls all requirements, but further research is needed regarding
performance.
179/5000
Introducing some possibilities of working with Go on Desktop, be it Windows, Mac or Linux.
I also covered the possibility of working with Terminal with a rich interface.
Automated prometheus benchmarking pushing it to its limits until it breaksHarsh Agarwal
Speakers:
https://github.com/krasi-georgiev
https://github.com/sipian
We will show you how we are trying to make Prometheus more stable by running automated benchmarking for risky PRs and before every release. In other words, let's try to break it in our tests so it doesn't break in your production.
We will cover why we decided to use Prow and how it is integrated with GitHub.
We will also cover the current progress, the project roadmap and of course do a short demo.
¿Cansado de pelear por el control del mando del aire acondicionado? ¿Discusiones interminables para subir o bajar un grado de temperatura? Alguien ya no está en la empresa ¿cambiamos la cerradura de la puerta? En esta sesión veremos cómo con Windows 10 y una simple Raspberry Pi podemos otorgar permisos a través de Azure Active Directory para abrir y cerrar la puerta de la oficina y otros automatismos, llevando un log de operaciones y así calmar a los demonios que llevamos dentro.
Principales aspectos:
- Desplegar una app en Raspberry Pi en Windows 10 for IoT desde Visual Studio 2015,
- Conectar a colas de Azure desde Raspberry Pi en Windows 10
- Usar Azure Active Directory como control de acceso para iniciar automatismos
(Live) build and run golang web server on android.aviSeongJae Park
Presented from gdg devfair 2014 and gdg korea golang seoul meetup 2015.
Added explanation about go 1.4 official android support a little from gdg korea golang seoul meetup presentation.
I talked this presentation in GopherCon 2016.
Go Mobile (golang.org/x/mobile) is a project which shows new possibilities for mobile apps development.
Especially, for mobile games which requires high performance processing, Go can be expected to be an alternative to C and C++.
This session explains how to develop game apps using some packages such as app, event and sprite provided by Go Mobile project.
Furthermore the session introduces a way to call Android API from Go codes, and solutions for some problems which occurs when we distribute apps on Google Play.
I would like to show current capabilities and future potentials of Go Mobile.
Cross Platform Mobile Development for Business ApplicationsDavid Karlsson
Mobility is becoming increasingly important for many companies. The markets for mobile
applications have been growing tremendously the last decade. It is therefore of great
interest to reduce the costs of development and maintenance of these applications.
When developing native applications for multiple platforms some parts of the code will
likely implement the same functionality. This functionality is then implemented in dierent
programming languages, for dierent platforms. Functionalities that are typically the
same on all platforms are network communication, data parsing and business logic. These
functionalities can account for a large part of the code when developing large and complex
applications. Duplication of the code, for these functionalities, could be avoided if common
functionality could be extracted from the applications and put in a shared code base.
The aim of this project is to investigate possible solutions to the problem of code duplication
in the case of a specic business application, developed for iOS and Android. It consists
of a mobile client which performs some transformation of data acquired from a business
system and presents it in the native UIs.
This thesis rst discusses the requirements and constraints which are inferred from the application
type and the company wishing to apply cross-platform development. It also maps
existing cross-platform development methods for this type of application and investigates
to which extent the dierent cross-platform development methods full the requirements.
Finally the most suitable method is used in a practical context.
The objectives of this project are to provide the company with a recommendation of a
method as well as a prototype proving the concept of this method. This project will focus on possible solutions for mobile business applications with native
UIs.
The conclusion of the project is that native C++ is the most suitable method for this
type of application. It fulls all requirements, but further research is needed regarding
performance.
179/5000
Introducing some possibilities of working with Go on Desktop, be it Windows, Mac or Linux.
I also covered the possibility of working with Terminal with a rich interface.
Automated prometheus benchmarking pushing it to its limits until it breaksHarsh Agarwal
Speakers:
https://github.com/krasi-georgiev
https://github.com/sipian
We will show you how we are trying to make Prometheus more stable by running automated benchmarking for risky PRs and before every release. In other words, let's try to break it in our tests so it doesn't break in your production.
We will cover why we decided to use Prow and how it is integrated with GitHub.
We will also cover the current progress, the project roadmap and of course do a short demo.
¿Cansado de pelear por el control del mando del aire acondicionado? ¿Discusiones interminables para subir o bajar un grado de temperatura? Alguien ya no está en la empresa ¿cambiamos la cerradura de la puerta? En esta sesión veremos cómo con Windows 10 y una simple Raspberry Pi podemos otorgar permisos a través de Azure Active Directory para abrir y cerrar la puerta de la oficina y otros automatismos, llevando un log de operaciones y así calmar a los demonios que llevamos dentro.
Principales aspectos:
- Desplegar una app en Raspberry Pi en Windows 10 for IoT desde Visual Studio 2015,
- Conectar a colas de Azure desde Raspberry Pi en Windows 10
- Usar Azure Active Directory como control de acceso para iniciar automatismos
(Live) build and run golang web server on android.aviSeongJae Park
Presented from gdg devfair 2014 and gdg korea golang seoul meetup 2015.
Added explanation about go 1.4 official android support a little from gdg korea golang seoul meetup presentation.
I talked this presentation in GopherCon 2016.
Go Mobile (golang.org/x/mobile) is a project which shows new possibilities for mobile apps development.
Especially, for mobile games which requires high performance processing, Go can be expected to be an alternative to C and C++.
This session explains how to develop game apps using some packages such as app, event and sprite provided by Go Mobile project.
Furthermore the session introduces a way to call Android API from Go codes, and solutions for some problems which occurs when we distribute apps on Google Play.
I would like to show current capabilities and future potentials of Go Mobile.
Titanium London Lightning Talk - Building Titanium from the sourceAngus Fox
The project is Open Source. https://github.com/appcelerator/titanium_mobile. The prebuilt GA release is available only as part of the Appcelerator Platform. But you can live on the edge and build it yourself
Front End Development for Back End Java Developers - Jfokus 2020Matt Raible
Are you a backend Java developer that's being pushed into front-end development? Are you frustrated with all the JavaScript frameworks and build tools you have to learn to be a good UI developer? If so, this session is for you! We'll explore the landscape of UI development, including web standards, frameworks, and what’s on the horizon (e.g., micro frontends).
Web technologies are evolving blazingly fast and so it is AWS. Part of this evolution is GraphQL and the AWS team already took notice. In March 2019 AWS joined the GraphQL Foundation, double betting on the technology as an ingredient for great applications.
Designing GraphQL API's for scale on AWS is a challenging and exciting process, in this talk, we will talk about some key learnings from my past two years and how to overcome several challenges of this process.
Front End Development for Back End Developers - vJUG24 2017Matt Raible
Are you a backend developer that’s being pushed into front-end development? Are you frustrated with all JavaScript frameworks and build tools you have to learn to be a good UI developer? If so, this session is for you! We’ll explore the tools for frontend development and frameworks too!
Streamed live at 8pm MST on Oct 25, 2017! https://virtualjug.com/vjug24/
The Web Performance Testing Toolbox (Jfokus 2013)Tobias Järlund
Slides from my Jfokus 2013 presentation. (Demos not included.)
So, your web application is slow. You read all the books, follow all advices, but users are still complaining. What now? It turns out that there are really good tools out there to help you, whether your problem is slow loading third party widgets, badly performing javascript or heavy paint times for DOM elements. But which one is right for you?
This hands on session will give guide help you assemble your own toolbox with the the different (mostly free) tools available for analyzing and troubleshooting web performance. You'll learn what you can expect from high level tools that measure page load time through synthetic or real user monitoring, down to low level javascript profiling and graphic rendering. We'll dive straight into the advanced parts of WebPagetest, Chrome Dev Tools, Dynatrace Ajax Edition and others, and you'll also get to know how to do most of this on actual mobile devices.
"Will Git Be Around Forever? A List of Possible Successors" at UtrechtJUG🎤 Hanno Embregts 🎸
What source control software did you use in 2010? Possibly Git, if you were an early adopter or a Linux kernel committer. But chances are you were using Subversion, as this was the product of choice for the majority of the software developers. Ten years later, Git is the most popular product. Which makes me wonder: what will we use another ten years from now?
In this talk we will think about what features we want from our source control software in 2030. More speed? Better collaboration support? No merge conflicts ever?
I’ll also discuss a few products that have been published after Git emerged, including Plastic, Fossil and Pijul. I’ll talk about the extent to which they contain the features we so dearly desire and I’ll demonstrate a few typical use cases. To conclude, I’ll try to predict which one will be ‘the top dog’ in 2030 (all information is provided “as is”, no guarantees etc. etc.).
So attend this session if you’re excited about the future of version control and if you want to have a shot at beating even (!) the early adopters. Now if it turns out I was right, remember that you heard it here first.
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentJustin James
It has never been easier to build hybrid applications by using the Ionic Framework with technology that you already know and love such as AngularJS and Html 5. You will learn to love mobile development again.
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
Accelerate Enterprise Software Engineering with PlatformlessWSO2
Key takeaways:
Challenges of building platforms and the benefits of platformless.
Key principles of platformless, including API-first, cloud-native middleware, platform engineering, and developer experience.
How Choreo enables the platformless experience.
How key concepts like application architecture, domain-driven design, zero trust, and cell-based architecture are inherently a part of Choreo.
Demo of an end-to-end app built and deployed on Choreo.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Mind IT Systems
Healthcare providers often struggle with the complexities of chronic conditions and remote patient monitoring, as each patient requires personalized care and ongoing monitoring. Off-the-shelf solutions may not meet these diverse needs, leading to inefficiencies and gaps in care. It’s here, custom healthcare software offers a tailored solution, ensuring improved care and effectiveness.
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
top nidhi software solution freedownloadvrstrong314
This presentation emphasizes the importance of data security and legal compliance for Nidhi companies in India. It highlights how online Nidhi software solutions, like Vector Nidhi Software, offer advanced features tailored to these needs. Key aspects include encryption, access controls, and audit trails to ensure data security. The software complies with regulatory guidelines from the MCA and RBI and adheres to Nidhi Rules, 2014. With customizable, user-friendly interfaces and real-time features, these Nidhi software solutions enhance efficiency, support growth, and provide exceptional member services. The presentation concludes with contact information for further inquiries.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
How to Position Your Globus Data Portal for Success Ten Good PracticesGlobus
Science gateways allow science and engineering communities to access shared data, software, computing services, and instruments. Science gateways have gained a lot of traction in the last twenty years, as evidenced by projects such as the Science Gateways Community Institute (SGCI) and the Center of Excellence on Science Gateways (SGX3) in the US, The Australian Research Data Commons (ARDC) and its platforms in Australia, and the projects around Virtual Research Environments in Europe. A few mature frameworks have evolved with their different strengths and foci and have been taken up by a larger community such as the Globus Data Portal, Hubzero, Tapis, and Galaxy. However, even when gateways are built on successful frameworks, they continue to face the challenges of ongoing maintenance costs and how to meet the ever-expanding needs of the community they serve with enhanced features. It is not uncommon that gateways with compelling use cases are nonetheless unable to get past the prototype phase and become a full production service, or if they do, they don't survive more than a couple of years. While there is no guaranteed pathway to success, it seems likely that for any gateway there is a need for a strong community and/or solid funding streams to create and sustain its success. With over twenty years of examples to draw from, this presentation goes into detail for ten factors common to successful and enduring gateways that effectively serve as best practices for any new or developing gateway.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
39. Review
Android Unit Testing
Why Unit testing?
The Cost of Unit Testing
Fast Dive Unit Testing
How It is work
Android Unit Tools
Monkey
Additional Android Testing Tools
چه برنامه ای داشتم واسه اینکه بیام اینجام
بهترین تایتلی که تونستم مناسب این ارائه پیدا کنم، این بود که چطوری یه توسعه دهنده خفن بشیم
من چیکار میکنم؟ چی بلدم؟ چی دوس دارم؟ ( این زبانهارو بلم، فلت این لاو روبی هستم. )
کجای میتونید منو پیدا کنید؟ سایتو توییترو تلگرامو فلان
کی میشناسه این فیل کیه؟
بله گریدل که همتون باهاش کار کردیم احتمالا
گردل چیست؟ یه نگاه گذرا به خود گردل بندازیم
گردل یه بیلد آتوماشین سیستمه، سوال؟ این چیه؟ ( یک ابزاریه که فرآیند تست، بیلد، پکیجینگ، پراجکت دیپندنسی و دلیوری رو اتوماتیک میکنه)
گردل از این زبانها درست شده. groovy چیه؟ گرووی یه Domain-Specific Language هست. اما DSL چیه؟ زبان خاص دامنه یا دیاِساِل (به انگلیسی: DSL) به زبان برنامهنویسیای گفته میشود که ارتباط تنگاتنگی با مسائل یک دامنهٔ بخصوص داشته باشد. این مفهوم در برابر زبانهای برنامهنویسی همهمنظوره مطرح میشود. زبانهای خاص دامنه ممکن است گرافیکی یا متنی باشند و به گونهای طراحی شدهاند که بتوانند، نسبت به زبانهای برنامهنویسی همهمنظوره، دستهای بخصوص از مسائل را سادهتر حل کنند. غالب این زبانها سطح بالا هستند و باید پیش از کاربردی شدن به یک شکل دیگر تبدیل شوند، برای نمونه یک مدل را تبدیل به کد و کد را تبدیل به یک پروندهٔ اجراپذیر کنند.
گردل با جمع آوری نقاط قوت و افزودن ویژگی های قدرتمندتری وارد میدان شد.
در فلان سال هم تولید شد
اما بگذارید یه نگاهی بندازیم به گردل و اینکه چه چیزهایی داره
این یه نمای کلی از گردل هست. احتمالا همتون این صفحه رو هرروز تو کد نویسیتون مشاهده کردین.
گریدل یک ماهیت توصیفی دارد که شما تنها لازم است اعمالی را برای آن توصیف کنید تا بقیه کارها را انجام دهد. گریدل در پشت صحنه از یک "گراف جهت دار بدون دور" Directed Acycllic Graph یا به اختصار DAG استفاده میکند و طبق آن ترتیب وظایف یا taskها را دانسته و آنها را اجرا میکند. گریدل با این DAG، سه فاز آماده سازی، پیکربندی و اجرا را انجام میدهد.
Build Scripts که فایلهای مربوط به گردل رو در اینجا مشاهده میکنید
Test files فایلهای مربوط به تست
Build Gradle تسک ها و روندهارو تعیین میکنیم
در مرحله آماده سازی ما به گریدل میگوییم چه پروژه یا پروژههایی نیاز به بیلد شدن دارند. در اندروید استادیو، این مرحله در فایل settings.gradle انجام میشود؛ شما در این فایل مشخص میکنید چه پروژههای نیاز به بیلد شدن توسط گریدل دارند.
در این فایل سه پروژه برای گریدل مشخص شدهاند. البته از نگاه Intellij سه ماژول معرفی شدهاند و این فایل برای یک پروژه اختیاری است. گریدل برای پیدا کردن این فایل، از الگوریتمهای متفاوتی استفاده میکند.
در اولین مرحله انتظار دارد که فایل settings در دایرکتوری جاری باشد و اگر آن را پیدا کرد آن را مورد استفاده قرار میدهد؛ در غیر اینصورت مرحله بعدی را آغاز میکند.
در مرحله دوم، در این دایرکتوری به دنبال دایرکتوری به نام master میگردد و اگر در آن هم یافت نکرد مرحله سوم را آغاز میکند.
در مرحله سوم، جست و جو در دایرکتوری والد انجام میشود
چنانچه این فایل را در هیچ یک از احتمالات بالا نیابد، همین پروژه جاری را تشخیص خواهد داد.
هر پروژه آندروید استودیو حداقل دارای دو فایل build.gradle هست:
۱- Top Level Build File
تنظیمات اصلی که مربوط به کل پروژه است در این فایل قرار میگیرد. ما نیازی به تغییر و دستکاری این فایل نداریم.
۲- Module Level Build File
هر ماژول، دارای یک build.gradle جداگانه است که تنظیمات مربوط به ماژول مخصوص خودش داخل آن قرار میگیرد. میتوان گفت در اینجا ماژول به معنای پروژههای زیرمجموعه پروژه اصلیست. ما در طول مدت برنامهنویسی در اندروید استودیو همیشه با این فایل سر و کار داریم.
محتویات این فایل همیشه ثابت هست و به هیچ عنوان نیازی به تغییر دادن داخل این فایل نیست. تنها نکته قابل ذکر اینه که خط ۸ معرفی کننده نسخه پلاگ-این گریدل آندرویداستودیو به پروژه است.
در پروژه ای برای استفاده از یه سری سرویس ها خاص گوگل من اینجا به ClassPath از Google Service معرفی کرده بودم
هر ماژول، دارای یک build.gradle جداگانه است که تنظیمات مربوط به ماژول مخصوص خودش داخل آن قرار میگیرد. میتوان گفت در اینجا ماژول به معنای پروژههای زیرمجموعه پروژه اصلیست. ما در طول مدت برنامهنویسی در اندروید استودیو همیشه با این فایل سر و کار داریم.
defaultConfig از اسمش که پیداست، میایم تنظیمات دیفلات رو وارد میکنیم. مواردی مثل مینمیم وتارگت SDK و بعد ورژن نیم و ورژن کد رو. بزارید یه توضیح راجع به نحوه این بدم که چجوری نامگذاری میشه. در ادامه هم تنظیمات دیگری مثل MultiDex و ساپرت کردن VectorDesignAssets رو هم اینجا ذکر کردم. درواقع پیشنیاز ها و یکسری مواردی که نیاز هست در پروژه لحاظ بشه اینجا آورده میشه
productFlavors ممکنه شما احتیاج باشه که مالتی پکیج کار کنید، و برای یه اپ چندتا پکیج خروجی بگیرین. برای مثال ما تو پروژه خودمون ۲تا سرویس پکیچ داشتیم که یکی رو استیج و تست بود و دیگری Real و روی هسته اصلی کار میکرد.
buildTypes هم شما میاید میگید که این بیلدی که میخواید داشته باشید لازمه چه خصوصیاتی داشته باشه؟ مثلا ما Minify رو براش true میزاریم. بعد هم پروگارد رو بهش معرفی میکنیم. درواقع تظیمات بیلد فایل رو ما توی پروگارد انجام میدیم، مواردی مثل هش کردن کدها یا ایگنور کردن بعضی از فایلها. (توضیح بده راجع به مشکل minify کردن برای بعضی از Library ها)
Dependencies یا همون وابستگی های پروژمون درواقع اونچیزاییه که ما بهش نیاز دارم و پروژمون بهش وابستس. بقول معروف آقااااا، لازم نیست چرخ رو از اول اختراع کنیم که. میتونیم از ابزارهایی که دوستانمون در اختیار ما قرار دادن استفاده کنیم.
اگه قرار باشه همه چیز رو خودمون از صفر تولید کنیم پروژه ۳ ماهه ممکنه ۳ سال طول بکشه با کلی نقض و باگ ( و ماجرای کلا اوپن سورس بودن و فوایدش رو توضیح بده )
Volley از این لایبرری برای ارتباط برقرار کردن از REST API استفاده میکنم. کار کردن باهاش راحته. به راحتی میتونید مدیریتش کنید. توجه کنید که این لایبرری روی گیتهاب Depricate شده و اومده جزو لایبرری های رسمی خود اندروید و اونجا پرزنت میشه.
Retrofit این روزها میگن همه از رتروفیت استفاده میکنن. حتما این ابزار رو تست کنین. امکانات جالبی داره
OkHttp هم بسیار لایبرری خوبیه چیزی از دوتای بالا از لحاظ کارایی و سرعت کم نداره، اما خوب چیزی که من بیشتر شنیدم اینه که تو پروژه های JAVA پیشنهاد میشه که از OkHttp استفاده کنند.
مدل کش کردن:
پیکاسو فایل رو کلا با سایز اصلیش دانلود میکنه، مثلا من یه عکس ۱۱۶۰ در ۷۵۰ داشتم، اون رو کامل تو کش ذخیره میکرد. و بعد هرجا که میخواستم استفاده کنم میرفت تو کش دیسک و عکس رو میگرفت، ریسازش میکرد و بعد دیکد میکرد میزاشتش تو ایمیج ویوو.
اما جیلاید روشش فرق داره، جیلاید عکس رو دانلود میکنه، و همونجا اول ریسازش میکنه به اندازه ایمیج ویووتون بعد اون رو کش میکنه، سری بعد که بهش احتیاج داشتین همون ریسایز شدشو میده بهتون.دو تا آپشنی که جیلاید داره اما پیکاسو نداره:
Animated Gif در جیلاید ساپورت میشه. و فقط کافیه شما به همون صورتی که عکس رو لود میکنید این رو هم لود کنید. و جالب اینجاست که لایف سایکل هم داره.
Thumbnail هم هست. اگه مثلا یه عکس خیلی بزرگ دارید میتونید به جیلاید بگید یه Thumbnail ازش بهتون نشون بده و بعد تو دستور بعدی مثلا بعد کلیک، عکس با سایز اصلیشو نشون بده بهتون.
عکس ها در دیکد فرمت ARGB_8888 لود شدند
ORM (object relational mapper)
برای استفاده کردن از این لایبرری ها احتیاج نیست برید دیتابیس بسازید هزارتا متد واسش پیاده کنید، مصرف رمتون بره بالا کرش کنید وسطاش و هزارتا دردسر دیگه
با استفاده از قابلیت ها OOP شما با تعریف کردن چندتا کلاس و متد ساده میتونید یه دیتابیس خفن بسازید و کلی پرفرمنس کارتون رو ببرید بالا. (الالخصوص Sugar ORM تو پرفرمنس خیلی قوی و سبکه )
RxJava بهتون کمک میکنه تا بتونید متد های Async بنویسید و درواقع متد هایی که شمارو در بک گراند پراسسینگ کم میکنه.
EventBus اگه روزی قرار شد سوکت پروگرمینگ بکنید، این لایبرری به شدت میتونه به کارتون بیاد، و مسیج هایی که از طرف سوکت واستون ارسال میشه به متد های که توسط RxJava نوشته شده و در EventBus رجیستر شده برسونه و حالا اون عملیات مورد نظرتون رو انجام بدید
RetroLambada بسیار بسیار بسیار لایبرری خوبیه در رابطه با قابلیت های Java8 . و شما میونید با استفاده از این لایبرری بسیاری از خصوصیات Java8 رو تو پروژتون پیاده کنید. یادم میاد تو یه بخشی ما میخواستیم یه لیستی از پروداکتامون رو مپ کنیم، که درحالت معمولی جیزی نزدیک به 20 25 خط نشوته بودیم و پرفرمنس به شدت پایین اومده بود، اما با افزودن لامبادا و بکارگیری متدهای جایگزین Java8 این تقریبا تو ۶ ۷ خط خلاصه شد.
Socket iO هم یه ابزار بسسسیییاااار خوب و عالی برای سوکت پروگرمینکه و درواقعا اینکه شما اپتون رو حقیقتا لایو کنید
مطالب و لایبرری ها زیاده نمیخوام این دپس شم تو اینا و الان درگریتون کنم چون جلوتر چیزای کاربردی خواهیم داشت و وقت هم کمه
بزارید ماجرای گیت رو اینجوری شروع کنم. حتما براتون پیش اومده اون خیلی خیلی خیلی خیلی قبلها که با اینچیزها آشنا نبودین، اون موقع ها که هنوز با دایناسورا زندگی میکردیم صبحونه تخم دایناسور نیمرو میکردیم :)))) که یه پروژه رو که میخواستیم تقییرات بدیم یه کپی ازش میگرفتیم میزاشتیم تو یه پوشه به اسم بک آپ ۱، بعد میرفتیم جلوتر خلاصه همه چی اوکی بود یهو میومدن میگتن ممد، فلان چیزو به پروژه اضافه کن، بعد دوباره شما یه بک آپ ۲ درست میکردین میریختین اونتو و ادامه میدادین به توسعه. تازه این آخرش نبود. توسعه انجام میشد نسخه بیلد شده رو میدادین به مدیر پروژه بعد مدیر پروژه میگفت ا، ممد این چرا دایناسورش دو چشمه؟ من مثل اونی که تو کارخونه هیولاست میخوام ۶۰تا چش داشته باشه! شما میرفتین میزدن کد رو ، بعد بیلد میکردین که اسمشو میزاشتین دایناسور ۲. دایناسور ۳ داایناسور فینال، دایناسور دیگه فینال، دایناسور این دیگه خداییش آخریشه. تو بمیری این دیگه فلان. من فلانم اگه این آخری نباشه.
گیت اومده که مارو نجات بده. اما چطوری؟ تازه همه چی وقتی بدتر میشد که دیوایس شما میسوخت یا سیستم عاملتون میپرید و مجبور بدید یه گلی به سر خودتون بگیری و پروژه! فرت!
حتما همتون یه روزی به این مورد برخودین که ا، چرا این داره کار میکنه؟؟؟ قائدتا نباید کار میکرد ؟؟؟ :)))) و شاید برعکس، باید کار میکردو اما نمیکنه :((((((
یا حتا به این مشکل برخوردین که اپ رو دادین بیرون دست کاربر. و کاربر میگه که این کار نمیکنه! اما شما میگی نهه!!! من الان تست گرفتم رو دستگاه من که کار میکنه!!!
اینا همشون نشون دهنده اینه که ما قبل از توسعه باید کدهامون رو تست کنیم، برنامه رو تست کنیم و از چیزی که مطمئن هستیم بدیمش به کاربر
Reduce bugs اولین و مهمترین دلیل، یونیت تست حقیقتا بهتون کمک میکنه که باگ ها برنامه و متدهاتون رو تا جایی که میتونید بیارید پایین، یعنی از لحاظ برنامه نویسی شما دقیقا میزان باگتون باید صفر باشه! مگر اینکه مشکل بیزنس لاجیک داشته باشید یا اینکه از جاهایی باگ برنامه آب بخوره که براش تست ننوشتین.
Good documentation یکی از مهمترین بدبختی ما برنامه نویسا همین داکیومنت نویسیه، وقتی که مدیر پروژه میگه صدرا، داکیومنت کن فلانچیزو، صدرا غمش میگیره شدیییید! :) اما شما وقتی تست نویسی میکنید درواقع دارید شرح میدید که این متد اصن برای چی استفاده میشه، چه پارامتر های ورودی داره و چه چیزهایی خارج میکنه. پس شما یه بار کد میزنین هم برنامتون رو تست کردین هم داکیومنتتون رو آماده.
Improve code quality حقیقا تست نویسی باعث بالا رفتن کیفیت کدهاتون میشه، به ۲ دلیل، ۱- شما مجبورید متدهاتون رو استاندارد بنویسید که اصن بدرد کد نویسی بخوره و بتونید ازش نتیجه بگیرید، در نتیجه کدهای تمیزی خواهید داشت و ۲- اینکه وقتی کدهاتون تست بشه اونوقت یه سری متد دارین که تمیز و استاندارد نوشته شده و هیچ باگی نداره همین یعنی کیفیت کارتون میره بالا. بقول مارتین فالور، کدها بود دارن، کدهای که تمیزا اصولا خوش بوان و شما حقیقا میتونید کدهاتون رو بو بکشید، پس سعی کنید کداتون رو طوری بنویسید که بوی کوکوی سه شب مانده نده :)))))
Reduce cost to change کد نویسی هزینه تغییر کد رو میاره پایین. یادون باشه گفتم تست که مینویسید یعنی کدهاتون رو داکیومنت میکنید و این داکیومنت کردن کمکتون میکنه بعدا بدونید چه متدی چیکار میکرد و چی میخواستون میداد. وقتی یکی میخواد ریفکتور کنه میاد تستتون رو نگاه میکنه ببینه که چیکار باید بکنه. جدا از اون وقتی شما یا هر فردی متدی اضافه میکنه یا تغییر میده تستها باید هشمون پاس بشن، اونوقته که دیگه نمیتونه متد های نوشته بشن که باگ دارن و برنامه رو از کار بندازن. در نتیجه تست نویسه هزینه برنامنه نویسی و دردسرهای بعدیش تا نهایت ممکن میاره پایین.
و حالا این قضیه توی اندروید و کلا توسعه اپلیکیشن های موبایلی بیش از پیش خودش رو نشون میده. میدونید نزدیک به ۱۰۰هزار نوع دیوایس اندروید داریم که در اندازه صفحه نمایش، نوع و قدرت CPU ها، تفاوت سیستم های گرافیکی، و ورژن سیستم عاملشون زمین تا آسمون تفاوت دارن و شما باید برنامه ای بنویسید که روی همه اینها کار کنه! اینجاست که یونیت تست میاد و حقانیتشو ثابت میکنه!اییینهمه نشانه. ایمان نمیآورید؟ :))))))
مثل کد نویسی، تست نویسی هم احتیاج به مهارت داره. اینکه شما بلد باشید چطوری یه تست بنویسید، چطوری اونو استاندارد کنید، چطوری در حین نوشتن تست واسش کامنت بنویسید، از چه نوع تستی چه موقع استفاده کنید و ازینجور چیزها. همه اینها وقت میخواد تا شما یاد بگیرید
و خوب وقت گذاشتن برای این قضیه اینکه تیمتون رو به این مهارت مسلح کنید نیاز به وقت و هزینه کردن داره،که ابزارهارو آماده کنید اگه نیازه تیم رو به کلاس بفرستید و غیره
اینکه بتونید تایم پروژه رو هم مدیریت کنید از سختی های دیگه تست نویسیه شما به مدیر پروژه اعلام میکنید که من یک هفته ای این رو تحویل میدم اما خب درفرآیند تست میبینید که ا یه مشکلی هست که تستهارو فیل میکنه و باید وقت بیشتری رو بگذارید
و در نهایت وقتی که شما روی نوشتن تست، اعمال روند تست و دیباگ کردن تستها میگذارید از دیگر هزینه هایی هست که شما واسه تست نویسی میدید. بطور معمول تست نویسی سرعت توسعه رو یک و نیم تا ۲ برابر کندتر میکنه. اما در ریفکتور کردن دقیقا قضیه بعکس ضبدر دو میشه. یعنی ۳ تا ۴ برابر سرعت ریفکتور و دیباگتون بالاتر میره.
شما قتی یه پروژه ایجاد میکنید بصورت پیشفرض دوتا فایل براتون ایجاد میشه که در تصویر هم میبینید. ما در اندروید ۲جور تست نویسی داریم، یکی Instrumneted و این یکی Local تست هست.
Instrumneted Test به تست هایی گفته میشه که مبتنی بر UI نوشته میشه. و این تست ها روی امولاتور اجرا میشن، مثلا روی فلان دکمه کلیک بشه و فلان متد اجرا بشه و بعدش فلان ویو بسته بشه یا بره فلا اکتیویتی. بزارین راحتش کنم، اینسترومنتها تستهایین که توش ما از Android API ها استفاده میکنیم، حالا میخواد UI باشه یا میخواد سخت افزار ها او نرم افزارهای مختص به اندروید باشه.
Local test اما لوکال تست هایی هستن که مربوط به خود متدهان، متد هایی که بطور Native زبان Java هستن، این تست هایی هستن که به هیچ وجه ربطی به اندروید و API اون ندارن. مثلا اینکه شما یه متدی دارین که میخوا حاصلظب ۲تا عدد رو محاسبه کنه. این تست ها روی JVM اجرا میشن مستقیما و اونجا کامپایل میشن. (java virtual machine)
شما قتی یه پروژه ایجاد میکنید بصورت پیشفرض دوتا فایل براتون ایجاد میشه که در تصویر هم میبینید. ما در اندروید ۲جور تست نویسی داریم، یکی Instrumneted و این یکی Local تست هست.
Instrumneted Test به تست هایی گفته میشه که مبتنی بر UI نوشته میشه. و این تست ها روی امولاتور اجرا میشن، مثلا روی فلان دکمه کلیک بشه و فلان متد اجرا بشه و بعدش فلان ویو بسته بشه یا بره فلا اکتیویتی. بزارین راحتش کنم، اینسترومنتها تستهایین که توش ما از Android API ها استفاده میکنیم، حالا میخواد UI باشه یا میخواد سخت افزار ها او نرم افزارهای مختص به اندروید باشه.
Local test اما لوکال تست هایی هستن که مربوط به خود متدهان، متد هایی که بطور Native زبان Java هستن، این تست هایی هستن که به هیچ وجه ربطی به اندروید و API اون ندارن. مثلا اینکه شما یه متدی دارین که میخوا حاصلظب ۲تا عدد رو محاسبه کنه. این تست ها روی JVM اجرا میشن مستقیما و اونجا کامپایل میشن. (java virtual machine)
Junit لایبرری نیتو و رسمی تست نویسی برای جاواست، و در اندروید Junit وظیفه اعمال تست و رولز ها رو بر عهده داره
Android JUnit Runner برای اینکه JUNIT کار کنه، Unit Runner بالاتر از همه وظیفه مدیریت و انجام تست و دلویر کردن تنیجه تست رو بر عهده داره. درواقع کاملا از اسمش مشخصه که چیکار میکنه.
Espresso کارش محیا کردن محیط برای نوشتن تستهای Instrumneted هست، همون تست های که از Api اندروید بهره میگرفت.
UI Automtor و درنهایت این هم کار راه اندازی تست Instrumnted رو بالاتر از همه انجام میده و درواقع کار اصلی رو این انجام میده که میره کلیک میکنه، نمیدونم فلانکارو میکنه اینا
monkey همونجور که از رو اسمش پیداست یه میمونه که شما گوشیتون رو در اختیار این میزارید و این میاد دیواستون رو میترکونه :)))))))
جدا از شوخی، مانکی میاد در سرعت بالا تمامی کارهایی که میشه با یه گوشی انردوید کرد رو انجام میده، رندوم همه جا کلیک میکنه،تاچ میکنه،میکشه، مچرخونه، خاموش روشن یکنه و هزراتا کار دیگه
البته شما میتونید مدیریتش کنید که مثلا چه حرکاتی رو انجام بده، یه چه کتگوری حرکتی رو بیشتر انجام بده. و یا چه مدت این تست ادامه داشته باشه.
این تست کمک میکنه به شما تا اگر جایی خطایی دارید اون رو پیدا کنید. این سرویس به شما کم میکنه تا پرفورمنس اپتون رو مورد بررسی قرار بدید. و قبل از اینکه اپتون دست یه آدم مریض بیفته، شما از اتفاقات ناگوارش پیشگیری کنید :)
Monkey Runner بر خلاف اسمش هیچ ربطی به Monkey قبلی نداره، یه ابزار کاملا جداست و تقریبا مثا UI Automator کار میکنه و شما میتونید اتفاقت کاربرانه ای که ممکنه بیافته رو با استفاده از این ابزار انجام بدید. این ابزار با پایتون نوشته شده.
Robolectric یکی از معروفترین ابزارهای تست اپلیکیشن اندروید و بسیار هم محبوبه
ابزارهای دیگه هم مثل robotium و Appium فرم ورک های دیگه ای برای تست هستن.
و یه ابزار جالب دیگه Test Droid هست که به شما این امکان رو میده تا اپتون رو روی دیوایس های مختلفی تست کنید. و دیگه نیاز نباشه شما واسه تست گرفتن ۶۰۰ تا گوشی دم دستتون باشه :D
Ci چیه و چرا من اصرار دارم که راجع به ci حرف بزنم؟
تو چندتا اسلاید قبلی راجع به گیت و اینکه چرا لازمه از گیت استفاده کنیم حرف زدم. یکی از قوانین و چیزهایی که شمارو ملاک میکنه به عنوان یه شرکت یه مجموعه یه تیم یا نفر اکسپرت و حرفه ای،اینه که کامیتی نزنین که پروژه رو بهم بریزه. یعنی شما کار میکنین توسعه میدید برنامه رو میرسونید به یه جا کامیت کامیت کامیت. حالا که میخواین اون رو پوش کنید نباید پوشی که میفرستین باعث بشه برنامه بهم بریزه و کل پروژه به غااار بره!
این کار رو ما توی ci انجام میدیم. یعنی پروژه رو مینویسیم، پوش میکنیم، پروژه میره رو شبیه ساز یا VM بعد اگه تست ها پاس شد، بیلد میشه، و تست پاس شده و اطلاع داده میشه که آقا اوکی.
Clean Code: Robert C. Martin
Refactoring: Martin Fowler
Working Effectively with Legacy Code: Micheal C. Feathers
Design Patterns: ORelliy
Head First Design patterns: ORelliy
Java Concurrency In Practice: Brian Goetz & Tim Peierls
97 Things every Programmers Should Know: Orreily, Kelvin Henney
The Programatic Programming: Andrew Hunt, David Thomas