Fine-tuning your development environment means more than just getting your editor set up just so -- it means finding and setting up a variety of tools to take care of the mundane housekeeping chores that you have to do -- so you have more time to program, of course! I'll share the benefits of a number of yak shaving expeditions, including using App::GitGot to batch manage _all_ your git repos, App::MiseEnPlace to automate getting things _just_ so in your working environment, and a few others as time allows.
Delivered at OpenWest 2016, 13 July 2016
Acceptance testing plone sites and add ons with robot framework and seleniumAsko Soukka
Acceptance tests are high-level tests to verify the completeness of user stories (end user features) for a developed product. It is said that while lower level unit and integration tests confirm that the product has been made right, only the acceptance tests confirm that the product actually does the right thing.
Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development. The key feature of Robot Framework is its extensible test syntax, which allows to write tests in a business-readable domain-specific language, including BDD (behavior driven development) style for executable acceptance criteria.
Selenium is a browser automation framework. It allows to use real browsers in acceptance testing so that all effects of CSS and JavaScript taken into account, including possible differences between different browsers.
This talk walks through alternative ways for using Robot Framework and Selenium to perform acceptance testing, including
* testing live sites (readonly)
* testing sandboxed Plone sites with live data (beforestorage + demostorage)
* testing sandboxed Plone add-ons (plone.app.testing + plone.app.robotframework)
* testing Sphinx documentation (while generating screenshots)
In this advanced session, we will investigate all the ways that you can automate your testing processes with TestBox and many CI and automation tools. From Jenkins integration, Travis CI, Node runners, Grunt watchers and much more. This session will show you the value of continuous integration and how to apply it with modern tools and technologies.
Main Points
Why we want to automate
Continuous Integration
ANT/CommandBox Test Runner
Setup of a Jenkins CI server
Travis CI integration
Pipelines CI integration
Node TestBox Runners
Grunt Watchers and Browser Live Reloads
A presentation given at DeveloperWeek in San Francisco by Zack Argyle. It goes through important concepts in building out reusable React components, releasing it to Github, and publishing it to NPM. There are best practices and suggestions with an example component.
Continuous Integration Testing in DjangoKevin Harvey
Continuous Integration is like having a robot that cleans up after you: it installs your dependencies, builds your project, run your tests, and reports back to you. This presentation outlines two methods for CI: Travis and Jenkins.
Swift is an exciting new language developed by Apple as a replacement for ObjectiveC. It has a modern clean syntax, strong inferential typing support, and uses automatic reference counting to streamline memory management and prevent numerous types of errors. Swift focuses on providing a "safe" compiled language but manages to have an easy-to-learn scripting language "feel".
The language was originally released in 2014, but after it was released as an Open Source project in late 2015, there has been an explosion of interest and work in the language. It's been ported to multiple non-MacOS platforms (e.g, Linux and Android) and extended to support server-side programming in addition to being able to target MacOS, iOS, watchOS, and tvOS.
This talk will present an overview of the development of Swift, review the basic syntax of the language, and discuss some of the philosophy behind its design. After attending this talk, you'll be poised to dive into Swift coding for yourself!
Delivered at OpenWest 2016, 15 July 2016
Acceptance testing plone sites and add ons with robot framework and seleniumAsko Soukka
Acceptance tests are high-level tests to verify the completeness of user stories (end user features) for a developed product. It is said that while lower level unit and integration tests confirm that the product has been made right, only the acceptance tests confirm that the product actually does the right thing.
Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development. The key feature of Robot Framework is its extensible test syntax, which allows to write tests in a business-readable domain-specific language, including BDD (behavior driven development) style for executable acceptance criteria.
Selenium is a browser automation framework. It allows to use real browsers in acceptance testing so that all effects of CSS and JavaScript taken into account, including possible differences between different browsers.
This talk walks through alternative ways for using Robot Framework and Selenium to perform acceptance testing, including
* testing live sites (readonly)
* testing sandboxed Plone sites with live data (beforestorage + demostorage)
* testing sandboxed Plone add-ons (plone.app.testing + plone.app.robotframework)
* testing Sphinx documentation (while generating screenshots)
In this advanced session, we will investigate all the ways that you can automate your testing processes with TestBox and many CI and automation tools. From Jenkins integration, Travis CI, Node runners, Grunt watchers and much more. This session will show you the value of continuous integration and how to apply it with modern tools and technologies.
Main Points
Why we want to automate
Continuous Integration
ANT/CommandBox Test Runner
Setup of a Jenkins CI server
Travis CI integration
Pipelines CI integration
Node TestBox Runners
Grunt Watchers and Browser Live Reloads
A presentation given at DeveloperWeek in San Francisco by Zack Argyle. It goes through important concepts in building out reusable React components, releasing it to Github, and publishing it to NPM. There are best practices and suggestions with an example component.
Continuous Integration Testing in DjangoKevin Harvey
Continuous Integration is like having a robot that cleans up after you: it installs your dependencies, builds your project, run your tests, and reports back to you. This presentation outlines two methods for CI: Travis and Jenkins.
Swift is an exciting new language developed by Apple as a replacement for ObjectiveC. It has a modern clean syntax, strong inferential typing support, and uses automatic reference counting to streamline memory management and prevent numerous types of errors. Swift focuses on providing a "safe" compiled language but manages to have an easy-to-learn scripting language "feel".
The language was originally released in 2014, but after it was released as an Open Source project in late 2015, there has been an explosion of interest and work in the language. It's been ported to multiple non-MacOS platforms (e.g, Linux and Android) and extended to support server-side programming in addition to being able to target MacOS, iOS, watchOS, and tvOS.
This talk will present an overview of the development of Swift, review the basic syntax of the language, and discuss some of the philosophy behind its design. After attending this talk, you'll be poised to dive into Swift coding for yourself!
Delivered at OpenWest 2016, 15 July 2016
A compare and contrast of Continuous Integration testing tools that can be used for Perl projects and where they all fall short. Also looking at what an ideal solution could look like.
Most projects in CF now involve creating some type of consumable CFC Endpoint or API Service... do you Unit test your API, do you use Integration Tests on your API? How many ways do you test your API? Not all tests are created equal.
We build our CFCs and CF API to be consumed with CF Apps, Mobile Apps, Javascript apps and devices we haven’t even thought about yet. To be smart developers we need to be able to test our CFC endpoints, and the code that uses those endpoints.
We’ll learn how to test your API serverside with Testbox and Clientside with Jasmine.
With Testbox and Jasmine both using BDD, your test code can almost be isomorphic.
Attendees should have some exposure to CFCs as endpoints, or CF API creations, and consuming with other languages/devices, in this case, JavaScript.
Attendees will learn
How to use Testbox to test your CFCs 2 different ways
Different types and ways to test JavaScript
Overview of client/server side testing tools
Building testing into your workflow
You are one of many that are not testing your APIs thoroughly
Php Dependency Management with Composer ZendCon 2016Clark Everetts
A deep-dive for beginners into Composer, the dependency manager for PHP. Learn how Composer helps you obtain the components your applications depend upon, installs them into your project, and controls their update to newer versions.
Package manages and Puppet - PuppetConf 2015ice799
This talk will begin by explaining what a package manager is and how package managers work, at a high level. Next, we'll observe the common patterns seen on the internet of compiling software in a Puppet manifest and discuss why this not ideal. This talk will conclude by showing how you can add package repositories to your infrastructure using Puppet and what settings are important for ensuring secure access to remote package repositories.
CommandBox is the ColdFusion (CFML) CLI and package manager for modern applications. In this session, we will show you how to create, find and even publish packages to our centralized cloud repository, ForgeBox.
Main Points
What is CommandBox + ForgeBox?
How to create packages
Understanding packages and dependencies
How to find packages
Publishing to ForgeBox
ContainerCon - Test Driven InfrastructureYury Tsarev
Great external coverage of this presentation can be found at https://www.cedric-meury.ch/2016/10/test-driven-infrastructure-with-puppet-docker-test-kitchen-and-serverspec-yury-tsarev-gooddata/
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12Puppet
Julien Rottenberg, CityGrid. Presentation of the tools and workflow for our puppet setup. How puppet helps us managing 500+ servers in a hybrid environment O&O Datacenter and EC2, hands free. Watch the video at http://youtu.be/FPwga7HwomM
PuppetCamp LA, May '12.
Programmable Infrastructure is code too - we should probably test it! These are the slides from a talk I've done a few times now, most recently at Agile Cambridge 2017 and at QCon London 2017.
My 6th. revision of my Stackato presentation given at the German Perl Workshop 2013 in Berlin, Germany,
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
A presentation given to Quality Assurance Testers, about Test Driven Development/Design. What it is, where the tests fit in the pipeline and what it means to developers and testers.
A compare and contrast of Continuous Integration testing tools that can be used for Perl projects and where they all fall short. Also looking at what an ideal solution could look like.
Most projects in CF now involve creating some type of consumable CFC Endpoint or API Service... do you Unit test your API, do you use Integration Tests on your API? How many ways do you test your API? Not all tests are created equal.
We build our CFCs and CF API to be consumed with CF Apps, Mobile Apps, Javascript apps and devices we haven’t even thought about yet. To be smart developers we need to be able to test our CFC endpoints, and the code that uses those endpoints.
We’ll learn how to test your API serverside with Testbox and Clientside with Jasmine.
With Testbox and Jasmine both using BDD, your test code can almost be isomorphic.
Attendees should have some exposure to CFCs as endpoints, or CF API creations, and consuming with other languages/devices, in this case, JavaScript.
Attendees will learn
How to use Testbox to test your CFCs 2 different ways
Different types and ways to test JavaScript
Overview of client/server side testing tools
Building testing into your workflow
You are one of many that are not testing your APIs thoroughly
Php Dependency Management with Composer ZendCon 2016Clark Everetts
A deep-dive for beginners into Composer, the dependency manager for PHP. Learn how Composer helps you obtain the components your applications depend upon, installs them into your project, and controls their update to newer versions.
Package manages and Puppet - PuppetConf 2015ice799
This talk will begin by explaining what a package manager is and how package managers work, at a high level. Next, we'll observe the common patterns seen on the internet of compiling software in a Puppet manifest and discuss why this not ideal. This talk will conclude by showing how you can add package repositories to your infrastructure using Puppet and what settings are important for ensuring secure access to remote package repositories.
CommandBox is the ColdFusion (CFML) CLI and package manager for modern applications. In this session, we will show you how to create, find and even publish packages to our centralized cloud repository, ForgeBox.
Main Points
What is CommandBox + ForgeBox?
How to create packages
Understanding packages and dependencies
How to find packages
Publishing to ForgeBox
ContainerCon - Test Driven InfrastructureYury Tsarev
Great external coverage of this presentation can be found at https://www.cedric-meury.ch/2016/10/test-driven-infrastructure-with-puppet-docker-test-kitchen-and-serverspec-yury-tsarev-gooddata/
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12Puppet
Julien Rottenberg, CityGrid. Presentation of the tools and workflow for our puppet setup. How puppet helps us managing 500+ servers in a hybrid environment O&O Datacenter and EC2, hands free. Watch the video at http://youtu.be/FPwga7HwomM
PuppetCamp LA, May '12.
Programmable Infrastructure is code too - we should probably test it! These are the slides from a talk I've done a few times now, most recently at Agile Cambridge 2017 and at QCon London 2017.
My 6th. revision of my Stackato presentation given at the German Perl Workshop 2013 in Berlin, Germany,
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
A presentation given to Quality Assurance Testers, about Test Driven Development/Design. What it is, where the tests fit in the pipeline and what it means to developers and testers.
En este documento biográfico se plasman espacios existenciales de manera objetiva y subjetiva de algunos profesionales que plasman enseñanza y aprendizaje en la facultad de arquitectura de la Universidad Nacional del Centro del Perú.
Why A Press Release Is Not A Blog Post - And Why It MattersSha Menz
Press Releases have been around for ever, but these days the lines have blurred a little too much on exactly what a press release is, how it looks, and most importantly what it does.
In this session at Pubcon Vegas 2016, Sha Menz reveals the negative effects of mistaking your press release for a blog post and what to do if you have those scary press releases still sitting out there attracting Penguin to your website. Drawing on her background as a newspaper editor, Sha also provides insight into the real purpose of those releases and how they fit into your Brand Strategy.
Makefiles in 2020 — Why they still matterSimon Brüggen
Make was created in 1976 by Stuart Feldman at Bell Labs to help build C programs. But how can this 40+ year old piece of software help us develop and maintain our ever-growing amount of cloud-based microservices?
Future proofing design work with Web componentsbtopro
Web components are a W3C standard that's been adopted by all major browsers as of October 2018. The Version 1 specification is a joy to work with and brings the web into a composing context from a raw materials one. That is, we can now directly repurpose and leverage our efforts to build bigger and better experiences (like modern home development practices) instead of constantly reinventing the wheel (like molding bricks out of clay to work on our house).
As of this writing, the ELMS:LN team (4 people) at Penn State has created 433 web components for generalized use. We've built an editor, a CMS, integrated those elements into Drupal (multiple versions), delivered static sites, worked on desktop apps, and done design work entirely, end to end, using web components and a uniform process for creating and deploying them.
Talk structure:
What are web components, can I use them, answering questions of libraries, polyfills, SEO, and accessibility
Examples of who has adopted them and what they doing with them
Community resources like polymer slack, webcomponents, and open-wc.org
Detailed examples of adoption in production, Drupal and non-Drupal environments, lessons learned and unthinkable wins
Our WCFactory tooling that automates much of the workflow of producing a sustainable element portfolio
How teams can leverage web components across projects
Where Drupal 6,7,8,9 fit into the future with web components
Where the future is going with HAXeditor and HAXcms, the future of micro-site generation and management
Our team is in love with web components and we think you will too! Join us and build better, more sustainable design systems of the future (today)!
This talk will try to cover the most important techniques and best practices used when creating Django web application.
Overview of the topics covered:
- development general principles and goals
- python/django project initial setup - project layout, git&venv&pip&shell, settings
- central project shell command - contains all commands to manage project
- "IDE" - editor & shell
- edit/run/test cycle
- deploy/test-remotely cycle
Disclaimer: techniques and practices presented are current AUTHOR'S optimal choice used for usual django project.
Boxen: How to Manage an Army of Laptops and Live to Talk About ItPuppet
Will Farrington of Github talks about Boxen at Puppet Camp Atlanta, 2013. Original slides can be found: https://speakerdeck.com/wfarr/boxen-puppetcamp-atl Learn about upcoming Puppet Camps at http://puppetlabs.com/community/puppet-camp/
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...Alexander Dean
Hadoop is everywhere these days, but it can seem like a complex, intimidating ecosystem to those who have yet to jump in.
In this hands-on workshop, Alex Dean, co-founder of Snowplow Analytics, will take you "from zero to Hadoop", showing you how to run a variety of simple (but powerful) Hadoop jobs on Elastic MapReduce, Amazon's hosted Hadoop service. Alex will start with a no-nonsense overview of what Hadoop is, explaining its strengths and weaknesses and why it's such a powerful platform for data warehouse practitioners. Then Alex will help get you setup with EMR and Amazon S3, before leading you through a very simple job in Pig, a simple language for writing Hadoop jobs. After this we will move onto writing a more advanced job in Scalding, Twitter's Scala API for writing Hadoop jobs. For our final job, we will consolidate everything we have learnt by building a more sophisticated job in Scalding.
The author is managing editor of http://scalacourses.com, which offers self-paced online courses that teach Introductory and Intermediate Scala and Play Framework.
Given at TechMaine's Java Users Group on Feb 26 2008
Why do we need another build tool when we already have Ant? By focusing on convention over configuration, Maven allows you to declaratively define how your project is built, which reduces a lot of the procedural code that you'd need to implement in every build file if you were using Ant. This, along with Maven's built-in management of repositories for project dependencies, allows you to streamline your build process. Ultimately Maven can reduce the amount of time that would otherwise be wasted hunting down jar files and fiddling with boilerplate build scripts.
This presentation covers Maven's core concepts. It introduces the Plugin architecture, and explain how the most popular plugins are used. It also covers the POM concept and how it relates to dependency tracking and repositories.
Dev Ops is hard and can seem like another language. This talk given at WordCamp Belfast hopes to help new developers, project managers and agency owners a chance to improve the WordPress Dev Ops Workflow
CoffeeScript: A beginner's presentation for beginners copyPatrick Devins
A short presentation on CoffeeScript for people who may not have much, or any, experience with it. It is a great way to learn JavaScript, as well as a fantastic syntactic sugar fro those who already know JavaScript.
https://www.facebook.com/groups/InfraEngineer
GIF pack include version
https://docs.google.com/presentation/d/1BTwGPUG6KGwc3xoW1_vU7CmloHXW-ardytNWomPdSy4/edit?usp=sharing
Pilot Tech Talk #10 — Practical automation by Kamil CholewińskiPilot
See how Kamil Cholewiński talks about Practical automation in Tech Talk episode 10
Visit pilot.co — World’s best engineering and design talent on demand.
YouTube: https://youtu.be/x0eQ7x7xN8o
People are frequently encouraged to get into public speaking to advance their careers -- and public speaking can be great for that. But it can also be hard to figure out how to get started. This talk gives you the inside scoop on the speaker life.
Introduction to Git (even for non-developers)John Anderson
Git is a revision control system that is used for many Open Source projects. Having a basic understanding of Git is essential being able to join an Open Source project and become a contributor. It's also super useful for many other activities! This talk will explore the basics of Git, assuming no existing background experience. Via analogies to other, familiar technolgies, the basic principles of using Git will be explained in an approachable, understandable fashion. People who attend this talk should come away ready to make an initial contribution to an Open Source project, and will leave with a list of additional resources to explore to learn more.
Git is a powerful, critical, yet poorly understood tool that virtually all Open Source developers use. One of the key features that git provides is a powerful and comprehensive log that displays the history of all the changes that have happened in a project, including potential developments that weren't ever merged, details about former versions of software that can inform future development, and even such mundane details as whether development on feature A started before or after development of bugfix B.
Despite the power and utility of git's log, few developers take full advantage of it. Worse, some common practices that developers have adopted in the name of convenience (or just plain cargo culting) can actually destroy this useful information. Moreover, if developers are following the common exhortation to "commit often", they may end up with logs full of uninteresting noise, as all the details of debugging attempts and experiments are inadvertently recorded.
This talk will:
* detail the potential benefits of having informative and well structured logs
* discuss common developer habits that can make logs less useful
* explain techniques to preserve informative development history
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
Git is a powerful, critical, yet poorly understood tool that virtually all Open Source developers use. One of the key features that git provides is a powerful and comprehensive log that displays the history of all the changes that have happened in a project, including potential developments that weren't ever merged, details about former versions of software that can inform future development, and even such mundane details as whether development on feature A started before or after development of bugfix B.
Despite the power and utility of git's log, few developers take full advantage of it. Worse, some common practices that developers have adopted in the name of convenience (or just plain cargo culting) can actually destroy this useful information. Moreover, if developers are following the common exhortation to "commit often", they may end up with logs full of uninteresting noise, as all the details of debugging attempts and experiments are inadvertently recorded.
This talk will:
* detail the potential benefits of having informative and well structured logs
* discuss common developer habits that can make logs less useful
* explain techniques to preserve informative development history
A static site generator should be your next language learning projectJohn Anderson
When learning a new language, some folks prefer to read the language documentation, or work through simple exercises like you might find on http://exercism.io — but I prefer to have something more like an actual project. I find that holds my focus a little better, and that I do a better job of absorbing the new language syntax and features if I’m using them for something real.
In this talk, I’m going to outline why writing a static website generator is the perfect task for this sort of language learning project. I’ll cover the code you’ll need to write in order to develop a simple template-based website generation system, and show how this particular project actually manages to hit all the points you need to understand to claim basic understanding of a language.
An Introduction to Git (even for non-developers)John Anderson
Git is a revision control system that is used for many Open Source projects. Having a basic understanding of Git is essential to being able to join an Open Source project and become a contributor. It’s also super useful for many other activities! This talk will explore the basics of Git, assuming no existing background experience. Via analogies to other, familiar technolgies, the basic principles of using Git will be explained in an approachable, understandable fashion. People who attend this talk should come away ready to make an initial contribution to an Open Source project, and will leave with a list of additional resources to explore to learn more.
You got chocolate in my peanut butter! .NET on Mac & LinuxJohn Anderson
Microsoft has open sourced .NET and made it cross-platform on Mac and Linux, and done a surprisingly great job of it. In this talk I'll walk you through creating a simple .NET app — LIVE — on a Mac, and I won't use the mouse even once — that's how good the CLI support is. It's easy, and more importantly, it's useful.
The .NET Core tooling has made a believer of me — come see for yourself just how good the new open source .NET Core is!
A static site generator should be your next language learning projectJohn Anderson
When learning a new language, some folks prefer to read the language documentation, or work through simple exercises like you might find on http://exercism.io -- but I prefer to have something more like an actual project. I find that holds my focus a little better, and that I do a better job of absorbing the new language syntax and features if I'm using them for something *real*.
In this talk, I'm going to outline why writing a static website generator is the perfect task for this sort of language learning project. I'll cover the code you'll need to write in order to develop a simple template-based website generation system, and show how this particular project actually manages to hit all the points you need to understand to claim basic understanding of a language.
Old Dogs & New Tricks: What's New with Perl5 This CenturyJohn Anderson
Perl5? Isn't that language dead? No, wait, wasn't it replaced by Perl6? Neither is true, but if you haven't paid attention to the Perl world since a year beginning with the digit '1', you've missed a lot of great new stuff! This talk will get you up to speed on Perl5 in 2018, with a focus on new language features, best practices, and even why you might want to learn Perl if you don't know it.
Introduction to Git (even for non-developers!)John Anderson
Git is a revision control system that is used for many Open Source projects. Having a basic understanding of Git is essential to being able to join an Open Source project and become a contributor. It's also super useful for many other activities! This talk will explore the basics of Git, assuming no existing background experience. Via analogies to other, familiar technolgies, the basic principles of using Git will be explained in an approachable, understandable fashion. People who attend this talk should come away ready to make an initial contribution to an Open Source project, and will leave with a list of additional resources to explore to learn more.
Git is a revision control system that is used for many Open Source projects. Having a basic understanding of Git is essential to being able to join an Open Source project and become a contributor. It’s also super useful for many other activities! This talk will explore the basics of Git, assuming no existing background experience. Via analogies to other, familiar technologies, the basic principles of using Git will be explained in an approachable, understandable fashion. People who attend this talk should come away ready to make an initial contribution to an Open Source project, and will leave with a list of additional resources to explore to learn more.
Swift was originally released in 2014, and Open Sourced by Apple in late 2015. The Open Source release generated an explosion of community interest and support, resulting in ports to other platforms and significant language changes. Swift version 3, which reflects the results of much of this work, was released in September of 2016, bringing with it some significant refinements to the core language and a new package manager.
Swift is a multi-paradigm language, supporting imperative, functional, and object-oriented programming styles. The language is strongly typed but has extensive support for type inference and substantial tooling available in XCode to identify and in some cases automatically fix common programming errors. Swift uses a memory management strategy called automatic reference counting (ARC), freeing programmers from the tedium of manually managing memory allocation. This combination of strong typing, maximal type inference, automatic reference counting (ARC), and excellent tooling results in an experience that can be described as “the Macintosh of programming languages”.
This talk will present some of the history of the development of Swift with emphasis on how the Open Source release of the language kick-started activity, review the basic syntax of Swift (with comparisons to similar languages that attendees may be more familiar with), and describe what tools are available to help learn the language, including XCode, the Swift REPL available from XCode, and the new Swift Playgrounds for iPad that debuted with Swift 3 and iOS10. After attending this talk, an attendee with no previous Swift experience will understand exactly why they should be excited about this relatively new programming language and be up to date on exactly what they need to do to dive into Swift coding for themselves.
A static site generator should be your next language learning projectJohn Anderson
When learning a new language, some folks prefer to read the language documentation, or work through simple exercises like you might find on http://exercism.io -- but I prefer to have something more like an actual project. I find that holds my focus a little better, and that I do a better job of absorbing the new language syntax and features if I'm using them for something real.
In this talk, I'm going to outline why writing a static website generator is the perfect task for this sort of language learning project. I'll cover the code you'll need to write in order to develop a simple template-based website generation system, and show how this particular project actually manages to hit all the points you need to understand to claim basic understanding of a language.
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
Git is a powerful, critical, yet poorly understood tool that virtually all Open Source developers use. One of the key features that git provides is a powerful and comprehensive log that displays the history of all the changes that have happened in a project, including potential developments that weren't ever merged, details about former versions of software that can inform future development, and even such mundane details as whether development on feature A started before or after development of bugfix B.
Despite the power and utility of git's log, few developers take full advantage of it. Worse, some common practices that developers have adopted in the name of convenience (or just plain cargo culting) can actually destroy this useful information. Moreover, if developers are following the common exhortation to "commit often", they may end up with logs full of uninteresting noise, as all the details of debugging attempts and experiments are inadvertently recorded.
This talk will:
* detail the potential benefits of having informative and well structured logs
* discuss common developer habits that can make logs less useful
* explain techniques to preserve informative development history
JSON Web Tokens, or JWTs, are a standardized way of representing a JSON-based data structure and transmitting it between two parties. JWTs rely on cryptographic signatures which ensure that the data transmitted in the JWT isn’t modified during transit. JWTs are designed to be extremely compact—small enough to be transmitted in an HTTP header, for example—and can be used in a variety of ways: as authorization tokens, client-side data storage, or even for the implementation of single sign on (SSO) solutions. They’re based on a very simple and elegant algorithm that’s easy to understand and quickly put to use. JWT implementations are available in virtually every programming language in common use for Web and mobile development.
Unfortunately, learning how to use JWTs can be complicated by the terminology that’s commonly used. “Claims,” “signatures,” “body,” “payload”—a large part of learning how JWTs work is deciphering these buzzwords and understanding how they map onto more familiar programming terms. This talk will focus on reducing this barrier to entry and making JWTs understandable to any programmer.
This talk will cover:
the structure of a JSON Web Token
the algorithm for generating one
available libraries and tooling
some common scenarios where JWTs can be used.
Particular emphasis will be given as to when and why JWTs provide for better solutions than other methods. Attendees should come away from this talk with a full understanding of how to use JWTs for a variety of purposes, and be ready and eager to put JWTs into use in both personal and professional contexts.
Old Dogs & New Tricks: What's New With Perl5 This CenturyJohn Anderson
The Perl programming language has a somewhat checkered reputation. People enjoy ranting about the supposed “read-only” nature of the language, and war stories of having to maintain horrible legacy Perl codebases are a popular feature of after-hours gatherings at programming conferences around the world. But, as Bjarne Stroustrup notes, “There are only two kinds of languages: the ones people complain about and the ones nobody uses”—and Perl also enjoys a reputation as a language that gets pulled out when you need just a bit more “oomph” on the command line than you can muster up with bash, sed, awk, and friends.
The thing that most people don’t realize is that the Perl5 community, after a brief period of reduced activity in the early 2000s, has regained velocity and organization, and has produced new stable language releases (with new features!) for the last 6 years (and counting). During that period of time, the community consensus around issues such as installation management, deployment, and other best practices has undergone significant evolution. New libraries and frameworks have been introduced and have replaced older standards that you may be familiar with. (CGI.pm? No more!) As people from the Perl community have gained experience with newer languages and frameworks, they’ve brought new ideas from those systems back into the Perl fold, either adding them to the core language or to libraries available on the CPAN. The result combines all the stability from Perl’s overarching commitment to backwards compatibility with support for the newest protocols and programming paradigms.
This talk will summarize significant new features that have been added to the core language, discuss tooling options for managing Perl installations, explain the community consensus on best practices around deployments and which competing libraries to use for particular purposes, and generally get you up to speed on how the Perl5 community thinks about development in Perl in 2017.
As presented at KCDC 2017:
Swift was originally released in 2014, and Open Sourced by Apple in late 2015. The Open Source release generated an explosion of community interest and support, resulting in ports to other platforms and significant language changes. Swift version 3, which reflects the results of much of this work, was released in September of 2016, bringing with it some significant refinements to the core language and a new package manager.
Swift is a multi-paradigm language, supporting imperative, functional, and object-oriented programming styles. The language is strongly typed but has extensive support for type inference and substantial tooling available in XCode to identify and in some cases automatically fix common programming errors. Swift uses a memory management strategy called automatic reference counting (ARC), freeing programmers from the tedium of manually managing memory allocation. This combination of strong typing, maximal type inference, automatic reference counting (ARC), and excellent tooling results in an experience that can be described as "the Macintosh of programming languages".
This talk will present some of the history of the development of Swift with emphasis on how the Open Source release of the language kick-started activity, review the basic syntax of Swift (with comparisons to similar languages that attendees may be more familiar with), and describe what tools are available to help learn the language, including XCode, the Swift REPL available from XCode, and the new Swift Playgrounds for iPad that debuted with Swift 3 and iOS10. After attending this talk, an attendee with no previous Swift experience will understand exactly why they should be excited about this relatively new programming language and be up to date on exactly what they need to do to dive into Swift coding for themselves.
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
Git is a powerful, critical, yet poorly understood tool that virtually all Open Source developers use. One of the key features that git provides is a powerful and comprehensive log that displays the history of all the changes that have happened in a project, including potential developments that weren't ever merged, details about former versions of software that can inform future development, and even such mundane details as whether development on feature A started before or after development of bugfix B.
Despite the power and utility of git's log, few developers take full advantage of it. Worse, some common practices that developers have adopted in the name of convenience (or just plain cargo culting) can actually destroy this useful information. Moreover, if developers are following the common exhortation to "commit often", they may end up with logs full of uninteresting noise, as all the details of debugging attempts and experiments are inadvertently recorded.
This talk will:
* detail the potential benefits of having informative and well structured logs
* discuss common developer habits that can make logs less useful
* explain techniques to preserve informative development history
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...John Anderson
In late March 2017, Congress passed a law making it possible for your ISP to sell sensitive private information about their customers -- including their detailed browsing history. Interest in VPN services immediately spiked. But using a VPN doesn't actually solve this problem, it just pushes it further downstream -- because there's nothing preventing your VPN provider from doing similiar undesirable things. That's not to mention that more than half the VPNs in the Google Play store don't actually encrypt your web traffic.
So, how are you going to protect yourself? More over, how are you going to help your less technically sophisticated friends and family protect themselves? Chances are, if you're at this conference, you have the technical skills to set up and run your own VPN service, which you can also make available to friends and family. (There's even a chance that all of you using the VPN together might provide better cover for your collective privacy.)
Attendees at this talk will learn about various Open Source alternatives that simplify setting up a VPN. The talk will discuss the pros and cons of hosting this VPN service within the US, versus outside the US. Enabling the VPN on a per-computer basis versus a whole network approach will also be discussed. Other, related, privacy-enhancing services (such as centralized ad blocking) will also be covered.
With great nerdery comes great responsibility -- come learn how you can help yourself and your friends and family preserve their privacy!
As presented at OpenWest, 12 Jul 2017
2.Cellular Networks_The final stage of connectivity is achieved by segmenting...JeyaPerumal1
A cellular network, frequently referred to as a mobile network, is a type of communication system that enables wireless communication between mobile devices. The final stage of connectivity is achieved by segmenting the comprehensive service area into several compact zones, each called a cell.
APNIC Foundation, presented by Ellisha Heppner at the PNG DNS Forum 2024APNIC
Ellisha Heppner, Grant Management Lead, presented an update on APNIC Foundation to the PNG DNS Forum held from 6 to 10 May, 2024 in Port Moresby, Papua New Guinea.
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBrad Spiegel Macon GA
Brad Spiegel Macon GA’s journey exemplifies the profound impact that one individual can have on their community. Through his unwavering dedication to digital inclusion, he’s not only bridging the gap in Macon but also setting an example for others to follow.
1.Wireless Communication System_Wireless communication is a broad term that i...JeyaPerumal1
Wireless communication involves the transmission of information over a distance without the help of wires, cables or any other forms of electrical conductors.
Wireless communication is a broad term that incorporates all procedures and forms of connecting and communicating between two or more devices using a wireless signal through wireless communication technologies and devices.
Features of Wireless Communication
The evolution of wireless technology has brought many advancements with its effective features.
The transmitted distance can be anywhere between a few meters (for example, a television's remote control) and thousands of kilometers (for example, radio communication).
Wireless communication can be used for cellular telephony, wireless access to the internet, wireless home networking, and so on.
Understanding User Behavior with Google Analytics.pdfSEO Article Boost
Unlocking the full potential of Google Analytics is crucial for understanding and optimizing your website’s performance. This guide dives deep into the essential aspects of Google Analytics, from analyzing traffic sources to understanding user demographics and tracking user engagement.
Traffic Sources Analysis:
Discover where your website traffic originates. By examining the Acquisition section, you can identify whether visitors come from organic search, paid campaigns, direct visits, social media, or referral links. This knowledge helps in refining marketing strategies and optimizing resource allocation.
User Demographics Insights:
Gain a comprehensive view of your audience by exploring demographic data in the Audience section. Understand age, gender, and interests to tailor your marketing strategies effectively. Leverage this information to create personalized content and improve user engagement and conversion rates.
Tracking User Engagement:
Learn how to measure user interaction with your site through key metrics like bounce rate, average session duration, and pages per session. Enhance user experience by analyzing engagement metrics and implementing strategies to keep visitors engaged.
Conversion Rate Optimization:
Understand the importance of conversion rates and how to track them using Google Analytics. Set up Goals, analyze conversion funnels, segment your audience, and employ A/B testing to optimize your website for higher conversions. Utilize ecommerce tracking and multi-channel funnels for a detailed view of your sales performance and marketing channel contributions.
Custom Reports and Dashboards:
Create custom reports and dashboards to visualize and interpret data relevant to your business goals. Use advanced filters, segments, and visualization options to gain deeper insights. Incorporate custom dimensions and metrics for tailored data analysis. Integrate external data sources to enrich your analytics and make well-informed decisions.
This guide is designed to help you harness the power of Google Analytics for making data-driven decisions that enhance website performance and achieve your digital marketing objectives. Whether you are looking to improve SEO, refine your social media strategy, or boost conversion rates, understanding and utilizing Google Analytics is essential for your success.
test test test test testtest test testtest test testtest test testtest test ...
Automate Yo' Self
1. Automate Yo' Self!
OpenWest 2016
Sandy UT
John SJ Anderson
@genehack
if anybody has any questions or i'm going too fast, please throw up a hand and ask -- or i'm here all week, grab me
on the hallway track
3. @genehack
i go by genehack most places on line.
today i'm going to talk to you today about some tools and tricks i have for being productive while developing. but
before i do that, i need to explain a bit about why i needed it. my life is busy.
17. Don't
Make
Me
Think
none of this automation stuff should require me to think -- if i have to think about it, it's not really saving me any time
18. This is my "you made me think" face.
the whole point is not having to think.
19. Consistency is Good.
so, in those terms, one thing that's essential: make everything the same. have a standard directory layout under $HOME. you shouldn't have to think about
what system you're on, what shell, what project. things should just be the same -- or at least *correct* -- all the time
20. Idempotence is better!
Idempotence: the property of certain operations in mathematics and computer science, that can be applied multiple times without changing the result
beyond the initial application
21. App::MiseEnPlace
so, here's an example of idempotence, a utility i wrote to manage symlinks and directories in my home directory
22. App::MiseEnPlace
"everything in its place"
"mise en place" is a French phrase meaning "everythng in its place" -- it comes from cooking, and the principle that you should have all your ingredients
prepped and ready to go before you start cooking. i wanted something to make sure i always had my standard directory layout under $HOME as well as
setting up various symlinks
23. % cat ~/.mise
---
manage:
- doc
- etc
- private
- proj/*
- src/*
create:
directories:
- bin
- proj
- proj/go/src/github.com/genehack
- src
- var
links:
- Desktop: var/tmp
- Desktop: tmp
here's what the top level config for mise looks like -- it goes in .mise in your home directory. we have a list of
directories we want to manage (more on that in a minute) and a set of directories and symlinks to create. links are
source:target
24. % cat proj/emacs/.mise
---
create:
links:
- DIR: ~/.emacs.d
- bin/build-most-recent-emacs: BIN
- bin/e: BIN
- bin/ec: BIN
- bin/git-blame-from-line-num: BIN
- bin/map-test-lib: BIN
this is a per-project config file. mise has a couple special keywords DIR and BIN, that refer to the directory
containing the .mise file and ~/bin, respectively
the advantage of this is you don't need to have a huge gnarly $PATH with a bunch of project directories in it,
everything is just symlinked into ~/bin
25. % mise
[LINK] created ~/proj/emacs -> ~/.emacs.d
[LINK] created ~/proj/emacs/bin/build-most-recent-emacs -> ~/bin/build-most-recent-emacs
[LINK] created ~/proj/emacs/bin/e -> ~/bin/e
[LINK] created ~/proj/emacs/bin/ec -> ~/bin/ec
[LINK] created ~/proj/emacs/bin/git-blame-from-line-num -> ~/bin/git-blame-from-line-num
[LINK] created ~/proj/emacs/bin/map-test-lib -> ~/bin/map-test-lib
% mise
% rm ~/bin/e
% mise
[LINK] created ~/proj/emacs/bin/e -> ~/bin/e
when we run mise for the first time, you can see it creates all those links. if we run it again, it does NOTHING.
Idempotency for the win! If you remove a link and run it again, it creates _just_ that link
26. App::MiseEnPlace
get it from your favorite CPAN mirror
available on CPAN, minimal dependencies, works on any perl from this decade.
27. smartcd
ok, so that handles getting a consistent directory structure, and linking project binaries. what if you have other per-project stuff that you want to set up?
environment variables or other stuff?
28. smartcd
Automatically run code when entering or
leaving directories or sub-directories
enter smartcd, which hooks the 'cd' command and then runs scripts when you enter or leave a directory (or even a subdirectory)
29. % smartcd show enter
/Users/genehack/.smartcd/scripts/Users/genehack/fake-node-proj/bash_enter exists
-------------------------------------------------------------------------
########################################################################
# smartcd enter - /Users/genehack/fake-node-proj
#
# This is a smartcd script. Commands you type will be run when you
# enter this directory. The string __PATH__ will be replaced with
# the current path. Some examples are editing your $PATH or creating
# a temporary alias:
#
# autostash PATH=__PATH__/bin:$PATH
# autostash alias restart="service stop; sleep 1; service start"
#
# See http://smartcd.org for more ideas about what can be put here
########################################################################
autostash NODE=4.2.3
autostash PATH=$PATH:__PATH__/node_modules/.bin/
nvm use $NODE
-------------------------------------------------------------------------
smartcd has 'edit' and 'show' subcmds (and a bunch of others), and 'leave' and 'enter' scripts. here's an enter script
for an arbitrary node project. the autostash keyword sets up an environment variable that will be *unset* when you
leave this directory. you can also run arbitrary commands; the 'nvm' command here selects a version of node to use
30. % cd ~/fake-node-proc
Now using node v4.2.3 (npm v2.14.7)
% echo xx$NODE
xx4.2.3
% cd ..
% echo xx$NODE
xx
here's what it looks like when you cd into that directory. and you can see the env var is set. if we change back out of
the directory, the environment variable is unset.
31. smartcd
https://github.com/cxreg/smartcd
pretty cool, available on github. works with bash and zsh. really easy to install.
i can pay this the highest possible compliment: i haven't forked it or needed to patch it in any way, i just use a checkout from the upstream repo
33. perlbrew
plenv
nvm
App::GitGitr
build-most-
recent-emacs
here are some of the ones i've used or use now. perlbrew and plenv let you have multiple perls. nvm does the same thing for node. similar tools exist for
python, ruby, etc.
then there's GitGitr, which I wrote while maintaining Git wrapper library. I needed to be able to quickly install arbitrary Git versions while responding to bug
reports -- so I wrote a little tool that does that.
Similarly, I'm an Emacs user. If a new version is released, I want to upgrade, across all my systems - so I scripted that.
34. Consistency Corollary:
Don't trust system binaries
Back at the beginning, I said "consistency is good". Now, if you're developing on MacOS and deploying to Linux (or dev-ing on Ubuntu and deploying to
Debian), you're probably not going to have the same version of tool from the OS (and if you do now, it's not going to last). Even if the versions are the
same, there may have been vendor patches applied.
35. Automate building your
critical tools.
No, if you really want to be consistent, the best approach is to build the tools that are most critical for your project. ("Build" in this case may just mean
automating the install; it doesn't have to mean "build from source".) Note: only do this for the *important* stuff. (include examples)
36. The Silver Searcher
Speaking of tools, here's a tool that has literally improved my entire development life -- the silver searcher. Anybody
here using this?
37. grep?
ok, so, grep -- everybody knows grep, right? let's you search for text inside files, which is something you do a lot
while developing code.
38. grep?
powerful, speedy, indiscriminate
so, grep is super powerful in terms of what you can search for, and it's pretty quick, but it's not very selective. you
can list all the files you want to search, or search whole dir trees, but you quickly realize this sucks, because of things
like .git directories. anybody ever do a recursive grep on a big git checkout? yeah.
40. ack?
powerful, selective, slow
it's just as powerful as grep in terms of what you can search for, but it's recursive by default (which is what you want)
and it's smart about ignoring .git and SVN stuff. the problem is, it's pretty slow, particularly to start up (because
Perl)
46. Why bother?
no, but seriously. it's a little bit of a pain to develop the discipline but once you get used to having _everything_
under revision control, it's nice. you don't have to worry about experimenting with anything, backing stuff up, or
dealing with cross-machine variation in your environments
47. say
automation
again
originally i had series of kludgy shell scripts to manage repo updates and checkouts
super ugly and not worth sharing
and then, inspiration: Ingy döt Net talking about App::AYCABTU @ PPW2010
48. Ingy döt Net
this is ingy - he's a crazy awesome open source hacker guy who has done a whole bunch of stuff. probably best
known for being one of the inventors of YAML
49. Things I wanted to steal
the thing ingy had developed had a bunch of stuff i wanted to steal:
The basic idea
The interface
Info about repositories in config file
Flexible ways of selecting repos for operations – by #, by name, by tag
50. Things I wanted to add
Support for more than just Git
Locate repositories in arbitrary locations
Easily add and remove repositories
Ability to easily extend with more subcommands
Most importantly: better name!
52. GitGot
Thus was born GitGot
http://search.cpan.org/dist/App-GitGot/
Installs a ‘got’ command
Uses Moo and App::Cmd under the covers
Add new subcommands by writing a single class!
54. got add
you tell got about repos using the 'add' command, from inside the git repo
55. % got add
Name: foo
URL:
Path: /Users/genehack/foo
Tags: bar
it'll prompt you for required info, and supply sensible defaults. note that you can also apply tags (space-delimited)
56. got add -D
or you can just add the '-D' switch and it'll automatically use the defaults
57. got clone <REPO URL>
you can also clone a remote repo, which will check it out into the working directory and add it to got, prompting
you for details
58. % got clone git@github.com:genehack/app-gitgot.git
Name: [app-gitgot]:
Path: [/Users/genehack/app-gitgot]:
Tags: :
Cloning into '/Users/genehack/app-gitgot'...
it'll prompt you for required info, and supply sensible defaults. note that you can also apply tags (space-delimited)
59. got clone -D <REPO URL>
got clone also respects the '-D' switch
60. got fork <GITHUB URL>
finally, you can give got a github url, and it will fork that project under your github id, then check it out into the
current directory and add it to got
61. ~/.gitgot
all the info about the repos managed by got lives in this .gitgot file in your home directory
62. - name: App-Amylase
path: /Users/genehack/proj/App-Amylase
repo: git@github.com:genehack/App-Amylase.git
type: git
- name: Git-Wrapper
path: /Users/genehack/proj/Git-Wrapper
repo: git@github.com:genehack/Git-Wrapper.git
tags: git
type: git
- name: HiD
path: /Users/genehack/proj/HiD
repo: git@github.com:genehack/HiD.git
type: git
- name: Perl-Build
path: /opt/plenv/plugins/perl-build
repo: git://github.com/tokuhirom/Perl-Build.git
type: git
it's just a simple YAML formatted line, totally hand-editable (although you shouldn't _need_ to do that, you can)
note that repos can be located anywhere on the disk, don't have to under a common dir or in your home or
whatever. anywhere you can write to is fair game
63. But now what?
ok, so you've added all your git repositories to got. what now?
67. got ls -q
if you don't want to see the upstream repo info, you can use the '-q' or '--quiet' switch
68. 1) App-Amylase
2) Git-Wrapper
3) HiD
4) Perl-Build
5) Perl-Critic
6) STAMPS
7) advanced-moose-class
8) app-gitgitr
9) app-gitgot
and that'll get you this output.
note the numbers - those will give you a way to select repos for other commands
69. got ls [repos]
easiest way to demo that is with an example. you can restrict the listing
78. got ls 5-8 HiD 21 -t git
finally, you can combine all of these selection methods together. here we're asking for repos 5 thru 8, the repo
named HiD, repo 21, and all repos tagged with git
79. 2) Git-Wrapper
3) HiD
5) Perl-Critic
6) STAMPS
7) advanced-moose-class
8) app-gitgitr
9) app-gitgot
21) etc
and this is what we get
note that most commands operate on all repos, and any that do, you can use these techniques to restrict the
command to a subset.
83. got st
or if you're into the whole brevity thing...
84. 1) App-Amylase : OK
2) Git-Wrapper : OK
3) HiD : OK
4) Perl-Build : OK
5) Perl-Critic : OK
6) STAMPS : OK
7) advanced-moose-class : OK
8) app-gitgitr : OK
9) app-gitgot : OK
that'll get you output like this.
again, note the use of color to give quick visual cues
85. 1) App-Amylase : OK
2) Git-Wrapper : OK
3) HiD : Dirty
4) Perl-Build : OK
5) Perl-Critic : OK
6) STAMPS : OK
7) advanced-moose-class : OK
8) app-gitgitr : OK
9) app-gitgot : OK
Dirty
got status will let you know if a repo has uncommitted changes.
super handy if, for example, working on one machine and are going to move to another one and want to see what
hasn't been committed.
86. 1) App-Amylase : OK
2) Git-Wrapper : OK
3) HiD : OK
4) Perl-Build : OK
5) Perl-Critic : OK
6) STAMPS : OK Ahead by 1
7) advanced-moose-class : OK
8) app-gitgitr : OK
9) app-gitgot : OK
1) App-Amylase : OK
2) Git-Wrapper : OK
3) HiD : OK
4) Perl-Build : Dirty
5) Perl-Critic : OK
6) STAMPS : OK
7) advanced-moose-class : OK
8) app-gitgitr : OK
9) app-gitgot : OK
Dirty
1) App-Amylase : OK
2) Git-Wrapper : OK
3) HiD : OK
4) Perl-Build : OK
5) Perl-Critic : OK
6) STAMPS : OK Ahead by 1
7) advanced-moose-class : OK
8) app-gitgitr : OK
9) app-gitgot : OK
Ahead by 1
it'll also tell you if you have local commits that haven't been pushed to the remote yet
87. got st -q
finally, you can use the '-q' switch to hide the "uninteresting" stuff
88. got st -q
3) HiD : Dirty
6) STAMPS : OK Ahead by 1
Dirty
Ahead by 1
which in this case is all the repos that don't have changes and are up to date
90. got up
which abbreviates to 'up'
and yeah, i should have called it pull but i'm a dummy and we're stuck with it now.
91. 1) App-Amylase : Up to date
2) Git-Wrapper : Up to date
3) HiD : Up to date
4) Perl-Build : Updated
Updating 7f25f89..72587c8
Fast-forward
lib/Perl/Build.pm | 14 +++++++++++++-
script/perl-build | 14 +++++++++++++-
2 files changed, 26 insertions(+), 2 deletions(-)
5) Perl-Critic : Up to date
Updated
it'll do pretty much what you expect (and it supports '-q' too)
92. got update_status
finally, there's a command that combines both those, because it's something i do pretty frequent -- update
everything, then look at the status of everything
100. got this
at some point, somebody sent in a patch to add 'got this' -- which tells you if the current directory is under got
control
101. got that <DIRECTORY>
this provoked somebody else to send in a 'got that' command, which does the same thing, but takes a path to
check
102. got chdir
finally, there are a number of commands that help you jump to the directory of a project. got chdir
103. got cd
also spelled 'got cd', will change your current working directory to the given repo (note that this is one of the few
got commands that requires a single repo)
104. got tmux
we also have tmux integration -- 'got tmux' will open a new tmux window with the working directory in your repo.
this _can_ be done with multiple repos. better, the tux window is persistent; as long as it's open 'got tmux' will just
select the already open window, not open a new one
105. got tmux -s
you can also spawn whole new tmux sessions if you prefer those to windows -- and again, those will be re-used as
long as they're around
114. package App::GitGot::Command::chdir;
# ABSTRACT: open a subshell in a selected project
use 5.014;
use App::GitGot -command;
use Moo;
extends 'App::GitGot::Command';
use namespace::autoclean;
sub command_names { qw/ chdir cd / }
sub _execute {
my( $self, $opt, $args ) = @_;
unless ( $self->active_repos and $self->active_repos == 1 ) {
say STDERR 'ERROR: You need to select a single repo';
exit(1);
}
my( $repo ) = $self->active_repos;
chdir $repo->path
or say STDERR "ERROR: Failed to chdir to repo ($!)" and exit(1);
exec $ENV{SHELL};
}
1;
117. sub _execute {
my( $self, $opt, $args ) = @_;
unless ( $self->active_repos and $self->active_repos == 1 ) {
say STDERR 'ERROR: You need to select a single repo';
exit(1);
}
my( $repo ) = $self->active_repos;
chdir $repo->path
or say STDERR "ERROR: Failed to chdir to repo ($!)"
and exit(1);
exec $ENV{SHELL};
}
118. package App::GitGot::Command::chdir;
# ABSTRACT: open a subshell in a selected project
use 5.014;
use App::GitGot -command;
use Moo;
extends 'App::GitGot::Command';
use namespace::autoclean;
sub command_names { qw/ chdir cd / }
sub _execute {
my( $self, $opt, $args ) = @_;
unless ( $self->active_repos and $self->active_repos == 1 ) {
say STDERR 'ERROR: You need to select a single repo';
exit(1);
}
my( $repo ) = $self->active_repos;
chdir $repo->path
or say STDERR "ERROR: Failed to chdir to repo ($!)" and exit(1);
exec $ENV{SHELL};
}
1;
119. Suggestions welcome!
areas for improvement:
support for other VCSen
better config management tools
any other crazy workflow improvement you can think of!
120. Thanks
OpenWest organizers
Ingy döt Net
Yanick Champoux
Michael Greb
Rolando Pereira
Chris Prather
photo credits:
all photos by speaker except
Ingy döt Net photo - https://www.flickr.com/photos/bulknews/389986053/
and pug - https://upload.wikimedia.org/wikipedia/commons/d/d7/Sad-pug.jpg
and automate yo'self - somewhere on the net