text:
---
layout: "post"
title: "SQLSaturday #707 - Pordenone 2018"
prettydate: "17 February 2018"
---
# SQLSaturday #707 - Pordenone 2018

**Event Date**: 02/17/2018 00:00:00

**Event Location**:
- Consorzio Universitario di Pordenone
- Via Prasecco, 3/a
- Pordenone, Friuli, Italy

PDF of Schedule

This event has completed. All data shown below is from the historical XML public data available.

Sessions

Speakers

Sponsors

If there are any data quality issues or corrections needed, please contact the webmaster for this site or submit a pull request for the appropriate file(s).

-----------------------------------------------------------------------------------

# Sessions
This is a list of sessions from the event, based on the schedule in the XML files.

-----------------------------------------------------------------------------------

## Title: SQL Server 2017 Graph Database

**Abstract**:
SQL Server offre da sempre gli strumenti per gestire dati gerarchici e relazioni tra le entità. A volte, però, le relazioni tra le entità possono diventare complesse. Pensiamo ad una relazione molti-a-molti, i database relazionali non dispongono di soluzioni native per questo tipo di legame, che viene comunemente implementato con una tabella di associazione. SQL Server 2017, grazie all'introduzione di Graph Database, permette di esprimere certi tipi di query più facilmente rispetto ad un database relazionale puro. In questa sessione verrà fornita un'introduzione a SQL Graph e agli scenari di utilizzo. Nell'ultima demo verrà mostrato come costruire un sistema di raccomandazione per le offerte, in grado di determinare i prodotti consigliati sulla base del prodotto che il cliente sta acquistando, uno scenario tipico di utilizzo di SQL Graph.

**Speaker(s):**
- Sergio Govoni

*Track and Room*: Development - Cloud

-----------------------------------------------------------------------------------

## Title: MDX is still alive! Are you ready for MDX Troubleshooting 2.0 ?

**Abstract**:
Il linguaggio MDX è ancora vivo e vegeto sia perché in molti scenari il paradigma multidimensionale rappresenta ancora la scelta migliore per un nuovo progetto di BI, sia per il rilevante numero di progetti in produzione utilizzati quotidianamente da aziende di tutti i settori. Ma per garantire le migliori performance possibili occorre avere dimestichezza con le tecniche e gli strumenti necessari all’attività di troubleshooting. Tale attività richiede profonde conoscenze di MDX e di Analysis Services, e l’esecuzione ripetitiva di molte attività manuali con strumenti diversi, risultando pertanto complessa, dispendiosa e soggetta ad errori. Ma ora tutto questo è cambiato ed in questa sessione vedremo come, grazie al nuovo tool Analysis Services Query Analyzer, potremo scordarci il Profiler, il comando Clear Cache e tutte le atre attività “old style” e, direttamente dal Management Studio, vedere cosa accade dietro le quinte durante l’esecuzione delle nostre query MDX!

**Speaker(s):**
- Francesco De Chirico

*Track and Room*: Data Science - Cloud

-----------------------------------------------------------------------------------

## Title: Integrazione tra PowerBI e Reporting Services: il perché ed il come

**Abstract**:
PowerBI è uno strumento di reportistica (o meglio, di visualizzazione) in continua evoluzione. Non è tuttavia pensato come piattaforma sostitutiva dei più consolidati Reporting Services. Anzi: PowerBI e Reporting Services hanno, nelle loro versioni più recenti (da SQL Server 2016 in poi), la possibilità di integrarsi, consentendo di collocare in Dashboard di PowerBI reports pubblicati su Reporting Services. Si può così disporre di un sito centralizzato nel cloud per rendere progressivamente più uniforme ed accessibile l’insieme di reports e visualizzazioni che costituiscono l’accesso alla Business Intelligence della nostra Azienda. Questa sessione illustra i prerequisiti e le procedure necessarie a raggiungere questo obiettivo.

**Speaker(s):**
- Gilberto Zampatti

*Track and Room*: Analytics and Visualization - Data Science

-----------------------------------------------------------------------------------

## Title: Columnstore Indexes: what they are, and how to use them

**Abstract**:
La prima apparizione dei ColumnStore Indexes risale a SQL Server 2012 e, nel corso degli anni, l'aggiunta di numerose funzionalità quali indici aggiornabili e continuo incremento delle performance li hanno resi una scelta appetibile in ambito Enterprise sia per carichi di lavoro DWH che OLTP.
Il recente Service Pack 1 di SQL Server 2016, inoltre, estende l'adozione dei CI con le dovute limitazioni in termini di risorse a tutte le edizioni, Express compresa.
In questa sessione verranno introdotti i Columnstore Indexes, concentrandosi sulle differenze rispetto ai tradizionali B-Tree, su come utilizzarli al meglio e sulle attenzioni da prestare nel passaggio tra le varie versioni ed edizioni di SQL Server.

**Speaker(s):**
- Francesco Milano

*Track and Room*: Development - Development

-----------------------------------------------------------------------------------

## Title: JSON before and after SQL Server 2016

**Abstract**:
The JavaScript Object Notation format, known simply as JSON, has now become a standard in data interchange between client-server applications, it is also used to store information in non-relational databases and the SQL Server 2016 engine handles it natively . However, today, not everyone has passed to the latest version of SQL Server, however, it is possible to process the JSON format even with earlier versions: in this session, it is confident with this format and illustrates the non-native mode that allows you to be ready in the moment of the upgrade to 2016 (or later) with a few simple moves. Finally, with a few simple examples, you will find some tips on how to use JSON in an advanced way with SQL Server 2016.

**Speaker(s):**
- Emanuele Zanchettin

*Track and Room*: Development - Cloud

-----------------------------------------------------------------------------------

## Title: Responding to Extended Events in near real-time

**Abstract**:
Extended Events provide deep insight into SQL Server's behavior and allow us to gather information not available by other means. However, compared to other technologies such as SQL Trace and Event Notifications, Extended Events don't seem to provide a way to react to the events as soon as they happen.

In this session we will see how the Extended Events streaming API can be used to process events in a near real-time fashion. We will demonstrate how this technology enables new possibilities to solve real world problems, such as capturing and notifying deadlocks or blocking sessions. We will also offer a different approach to analyzing captured events, without shredding XML files.

**Speaker(s):**
- Gianluca Sartori

*Track and Room*: Advanced Analysis Techniques - Administration

-----------------------------------------------------------------------------------

## Title: Azure Functions e Logic Apps: i tuoi coltellini svizzeri per gestire i tuoi dati in un SQL Database

**Abstract**:
Hai più o più SQL Database da gestire. A volte è necessario importare, manipolare, esportare i dati, è necessario lavorare sullo schema. È necessario pianificare alcune attività, è necessario attendere alcuni eventi prima di eseguire alcune attività. O devi inviare o gestire notifiche.
In tutte queste situazioni, una scarsa piccola conoscenza dei linguaggi di programmazione, come C#, aiuta a svolgere queste attività in modo più semplice e veloce. E si esegue il codice direttamente nel cloud.
Quindi introduceremo le minime conoscenze .NET necessarie, come scrivere una Function App e le funzioni e come creare workflow di manipolazione dei dati.

**Speaker(s):**
- Marco Parenzan

*Track and Room*: Cloud - Administration

-----------------------------------------------------------------------------------

## Title: GDPR and Database Management

**Abstract**:
In this presentation you will see how GDPR implies improvement of Database Management in terms of monitoring, replication, back up. Discover examples of solutions and attend live demo of existing solutions, to monitor not only performance but also user access, down to tables accessed  and objects used

**Speaker(s):**
- Alessandro Falchetti

*Track and Room*: Database Administration - Administration

-----------------------------------------------------------------------------------

## Title: SQL Server 2017: Data Science with Python or R?

**Abstract**:
SQL Server 2016 brought support or the R language. SQL Server 2017 added a new language to the list, the Python language. Both languages target advanced analytics scenarios, popularly known as data science. For a SQL Server professional who wants to move in the data science area, the first question is which language to choose. In this presentation, you will learn basics about both languages. We will try to solve the same problem with both languages. This way, through demos with a lot of explanation, you will realize the most important differences between the two competing languages. You will understand which one is more appropriate for you to start with.

**Speaker(s):**
- Dejan Sarka

*Track and Room*: Advanced Analysis Techniques - Data Science

-----------------------------------------------------------------------------------

## Title: An introduction to the magical world of BIML!

**Abstract**:
Ever feel like you are just doing busy work while creating new SSIS packages?  Feel like you are doing the same thing over and over while changing the names to protect the innocent?  Ever wonder if there is a better way?  Well wonder no more.  Come learn about the magical world of BIML and how it can help transform your environment by increasing your productivity while reducing the possibility of errors.  Come with intrigue and leave with a fundamental understanding of BIML!

**Speaker(s):**
- Jonathan Stewart

*Track and Room*: Data Science - Development

-----------------------------------------------------------------------------------

## Title: What can you do with SQL Server on Linux?

**Abstract**:
The best RDBMS meets the best Operating System. But can you leverage all the power of SQL Server on Linux? Can you create AlwaysOn Availability Groups on Linux? Can you use Integration Service (SSIS) to exchange data ? Is Change Data Capture (CDC) available? Can you use Active Directory Authentication? You will need to attend this session to get the answers!

**Speaker(s):**
- Rudi Bruchez

*Track and Room*: Database Administration - Development

-----------------------------------------------------------------------------------

## Title: SQL Server performance tuning on Azure IaaS

**Abstract**:
While creating SQL Server VMs via Azure gallery templates is really cool, these pre-built instaces are meant to be used in a large variety of scenarios and consequently use generic settings which aren't optimized from a performance point of view.
Let's see together how to maximize performance (and minimize costs) of our SQL VMs on Azure, following Microsoft best practices and some additional tips.

**Speaker(s):**
- Marco Obinu

*Track and Room*: Cloud - Administration

-----------------------------------------------------------------------------------

## Title: Introducing SQL Operations Studio

**Abstract**:
Il 2017 è stato un anno ricco di novità per quanto riguarda SQL Server. Una delle principali riguarda la cosiddetta "General availability" ovvero la possibilità di installare e distribuire il database engine anche su piattaforme non-Microsoft come ad esempio Linux e Docker.
Anche gli strumenti di lavoro stanno adenguandosi a tale cambiamento ed hanno intrapreso questa strada. A partire da Novembre 2017 infatti, un nuovo tool per la gestione del ciclo di vita delle nostre basi dati (SQL Operations Studio) è stato rilasciato (in preview). In questa sessione cercheremo di esplorarne le funzionalità di base e di meglio comprenderne le prospettive future.

**Speaker(s):**
- Luca Bruni

*Track and Room*: Professional Development - Administration

-----------------------------------------------------------------------------------

## Title: Parameter Sniffing on SQL Server

**Abstract**:
When is good, when bad for your database performance? How can we use the good sides, and how avoid bad sides of parameter sniffing? Answers to this questions will be provided during the session with lots of demos.

**Speaker(s):**
- Dean Savović

*Track and Room*: Database Administration - Development

-----------------------------------------------------------------------------------

## Title: SQL Audit - Evidence Never Lies

**Abstract**:
We've all heard about massive data breaches from big name companies. As a DBA, you should consider your company's data to be the most valuable assets. So when a data breach happens at your company, will you be able to provide management with the information? If not, then discover how SQL Server Audit can help provide you with an accurate forensic analysis of who did what to your data. In this session, we'll cover what SQL Audit can capture, how to set it up for both on-premise SQL Servers and Azure SQL Database, and finally produce reports from it.

**Speaker(s):**
- Patrick Keisler

*Track and Room*: Database Administration - Development

-----------------------------------------------------------------------------------

## Title: Azure Data Lake Analytics

**Abstract**:
Azure Data Lake Analytics is a new service, built to make big data analytics scalable, performance efficient and distributed and easy. Service is focused on data usability and analytics, rather than setting up the infrastructure.

Besides scaling and faster deployment, it is affordable and cost effective and easy to integrate into your existing IT environment.

For the demo, we will look at the image recognition and emotion detection.

**Speaker(s):**
- Tomaž Kaštrun

*Track and Room*: Analytics and Visualization - Data Science

-----------------------------------------------------------------------------------

## Title: SQL Server Database Engine 2017 Enhancements

**Abstract**:
Ogni nuovo rilascio di SQL Server introduce parecchie novità, molte delle quali legate a componenti o funzionalità specifiche del prodotto. Questa sessione riguarda le novità legate al Database Engine con approfondimenti sulle nuove funzionalità T-SQL e di diagnostica/miglioramento delle prestazioni. Faremo, inoltre, una breve panoramica su temi quali la versione per Linux e il supporto ai grafi il cui approfondimento necessita di intere sessioni dedicate.

**Speaker(s):**
- Gianluca Hotz

*Track and Room*: Development - Cloud

-----------------------------------------------------------------------------------

## Title: Power BI:  Dal dato grezzo al modello di analisi con M e DAX

**Abstract**:
Avrete probabilmente visto molti scenari in cui viene utilizzato Power BI. Tuttavia la maggior parte delle demo si basano su scenari in cui tutto funziona con un drag and drop dei campi del modello.  Ma cosa succede quando il dato non è perfetto o il vostro problema di business è più complesso?  In questa sessione, si vedranno come risolvere le problematiche che inevitabilmente si andrà in contro quando si torna al lavoro. Questa sessione vi darà la possibilità di vedere come si modellano i dati per risolvere i problemi del mondo reale con Power BI.

**Speaker(s):**
- Marco Pozzan

*Track and Room*: Analytics and Visualization - Data Science

-----------------------------------------------------------------------------------

## Title: SQL Server Statistical Semantic Search

**Abstract**:
SQL Server 2012 introduced an important extension to its integrated Full-text Search, namely the Statistical Semantic Search. In this session you will learn how to install and configure this new functionality, how to use it to extend your existing full-text search capabilities, and how to utilize it properly to improve your information management solutions. You will learn how to automatically extract key phrases from your documents, and how to find similarities between individual documents of your information corpus based on the key phrases that they contain.

**Speaker(s):**
- Matija Lah

*Track and Room*: Development - Development

-----------------------------------------------------------------------------------

## Title: Lavorare con database SQL Server con .NET Standard 2.0

**Abstract**:
Grazie a .NET Standard 2.0, oggi siamo finalmente in grado di collegarci in modo nativo a database SQL Server (su Windows o Linux) e SQL Azure da qualunque piattaforma: Desktop, Web, .NET Core, UWP e persino Xamarin. Nel corso di questa sessione mostreremo come sfruttare al meglio questa caratteristica e quali strumenti ci possono aiutare nello sviluppo di tutti i giorni.

**Speaker(s):**
- Marco Minerva

*Track and Room*: Development - Cloud

-----------------------------------------------------------------------------------

## Title: Practical SQL Server Machine Learning Services

**Abstract**:
Admit to yourself that you’ve seen enough basic “R is coming to SQL Server” sessions with the same old examples!
Enough of that, in this session we'll walk through a real SQL Server Machine Learning Services scenario from idea to code and from deployment to monitoring  maintenance.
Learn how you can easily roll out your own Data Science projects or support the data scientists and analysts at your company.

**Speaker(s):**
- Jan Mulkens

*Track and Room*: Advanced Analysis Techniques - Data Science

-----------------------------------------------------------------------------------

## Title: Decision Trees: the Machine Learning "Magic" Unveiled

**Abstract**:
Spesso un algoritmo di Machine Learning è visto come una di quelle armi magiche in grado di rivelare possibili scenari futuri a chi la detiene. In verità si tratta di applicazioni dirette di concetti di matematica e statistica, che a volte generano come output dei modelli complessi da interpretare. Esistono però dei modelli predittivi basati su alberi decisionali che sono davvero semplici da comprendere. In questa sessione verrà spiegato cosa c'è dietro ad un modello predittivo di questo tipo, chiarendo il tutto con pratici esempi realizzati in R.

**Speaker(s):**
- Luca Zavarella

*Track and Room*: Advanced Analysis Techniques - Data Science

-----------------------------------------------------------------------------------

## Title: High availability for SQL Server using Azure as DR site

**Abstract**:
In this session we will present the union of the local environment and the cloud and show the integration between these environments. The cloud is already a reality and we still have several environments that must remain in local environments due to legislation or company rules. In this session you will see that it is possible to maintain both environments.

**Speaker(s):**
- Marcelo Fernandes

*Track and Room*: Cloud - Administration

-----------------------------------------------------------------------------------

## Title: Gestire SSRS con Powershell

**Abstract**:
Powershell consente di automatizzare, attraverso i suoi script, le attività di manutenzione di SQL Server. Reporting Services non fa eccezione. SSRS espone dei web services attraverso i quali è possibile amministrare o ottenere il risultato dei reports in vari formati. In questa sessione vedremo come sfruttare la combinazione Powershell + SSRS web services per gestire le più comuni attività amministrative, come ad esempio importare o esportare dei reports, visualizzare o impostare i parametri di un report, schedulare la produzione di un report da Task scheduler.

**Speaker(s):**
- Danilo Dominici

*Track and Room*: Data Science - Cloud

-----------------------------------------------------------------------------------

## Speakers
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.

**Matija Lah**

Twitter:  - [@MatijaLah](https://www.twitter.com/@MatijaLah)

LinkedIn: [Matija Lah](http://si.linkedin.com/in/matijalah/)

Contact: [http://milambda.blogspot.com](http://milambda.blogspot.com)

Matija Lah has more than a decade of experience working with Microsoft SQL Server, mostly architecting data-centric solutions in the legal domain. His contributions to the SQL Server community have led to the Microsoft Most Valuable Professional award in 2007 (Data Platform), which he held until 2017. In 2008 Matija joined SolidQ as a Mentor, located in Central and Eastern Europe. He spends most of his time on projects involving advanced information management, and natural language processing.

**Emanuele Zanchettin**

Twitter:  - [@_thinkIT_](https://www.twitter.com/@_thinkIT_)

LinkedIn: [Emanuele Zanchettin](http://it.linkedin.com/pub/emanuele-zanchettin/18/921/34/)

Emanuele Zanchettin, after studying in Computer Engineering, began his career with DB2 in the banking sector in 1998. After a few years and a change of scope of application, he encountered Access and Oracle with which he subsequently worked for several years in data access tuning and database design for new application features. Since 2007 he has also launched into the SQLServer world 2K, 2005, 2008* and 201* and more importantly, since 2011, into Azure SQL Database (SQL Azure). In order to have a greater capacity for assessment and familiarity with the various technologies that the market offers, he has deepened his knowledge to include MySQL and DocumentDB. Today Emanuele is mainly involved in IT projects and database management.

**Marcelo Fernandes**

Twitter:  - [marcelodba](https://www.twitter.com/marcelodba)

LinkedIn: [Marcelo Fernandes](https://br.linkedin.com/in/marcelodba)

Contact: [http://marcelodba.wordpress.com](http://marcelodba.wordpress.com)

Marcelo Fernandes is SQL Server MVP and has 12+ years experience with databases, specialized in High Availability, critical missions and very large databases. He holds the MCP / MCDBA / MCSA / MCTS / MCITP and MCT certifications, he lives and works in Berlin for an American e-commerce company that sells home goods. He share their knowledge through webcasts, presentations and articles on Microsoft technologies and can be cantacted by email<EMAIL_ADDRESS>or twitter @ marcelodba

**Francesco Milano**

Twitter:  - [@_fmilano_](https://www.twitter.com/@_fmilano_)

LinkedIn: [Francesco Milano](https://it.linkedin.com/in/fmilano)

I've been working with Microsoft technologies since 2000, and I'm specialized in .NET Framework and SQL Server platform. I focus primarily on back-end development, integration solutions, relational model design and implementation. Starting from 2011 I'm also member of UGISS (Italian SQL Server User Group) and speaker at main italian SQL Server conferences and workshops.

**Patrick Keisler**

Twitter:  - [@PatrickKeisler](https://www.twitter.com/@PatrickKeisler)

LinkedIn: [Patrick Keisler](https://www.linkedin.com/in/patrickkeisler)

Contact: [http://www.patrickkeisler.com](http://www.patrickkeisler.com)

I#39;m a husband, a father, an Atlanta Braves fan, and oh yeah...I know a thing or two about Microsoft SQL Server, because I work for Microsoft supporting it as a Premier Field Engineer. I have over 15 years of DBA experience and have gained considerable knowledge in SQL Server by supporting lots of different type of applications ranging from high-volume trading applications to large data warehouses. I hold several certifications: MCSE: Data Platform, MCITP SQL 2008 Admin and Dev, and Security+.

**Marco Minerva**

Twitter:  - [https://twitter.com/marcominerva](https://www.twitter.com/https://twitter.com/marcominerva)

LinkedIn: [Marco Minerva](https://www.linkedin.com/in/marcominerva)

Contact: [https://marcominerva.wordpress.com](https://marcominerva.wordpress.com)

Marco Minerva si è dedicato a .NET fin dalla sua prima introduzione. Attualmente lavora come consulente freelance e si occupa di progettazione e sviluppo di applicativi basati sul Framework .NET, realizzando app per Windows, Xamarin e IoT, e soluzioni Web con ASP.NET, Web API e Azure. Organizza e tiene corsi di formazione. E’ co-fondatore e Community Leader di DotNetToscana. E' speaker ad eventi tecnici di livello nazionale e scrive articoli per riviste. E' Microsoft MVP per la categoria Windows Development.

**Sergio Govoni**

Twitter:  - [@segovoni](https://www.twitter.com/@segovoni)

LinkedIn: [Sergio Govoni](http://www.linkedin.com/in/sgovoni)

Contact: [https://mvp.microsoft.com/it-it/PublicProfile/4029181?fullName=Sergio%20Govoni](https://mvp.microsoft.com/it-it/PublicProfile/4029181?fullName=Sergio%20Govoni)

Since 1999 Sergio Govoni has been a software developer; in 2000 he got a degree in Computer Science at "Università degli Studi" in Ferrara (Italy). He has worked for over 18 years in Centro Software, a software house that produces the best ERP for manufacturing companies that are export oriented. Now, he manages the development product team and he is constantly involved on several team projects, where he focues his attention on the architecture and the mission-critical technical details. Since 2016 he is the vice president of the UGISS (www.ugiss.org). For the provided help to technical communities and for sharing his own experience, since 2010 he has received the Microsoft Data Platform MVP award.

**Dejan Sarka**

Twitter:  - [DejanSarka](https://www.twitter.com/DejanSarka)

Contact: [http://blogs.solidq.com/dsarka/Home.aspx](http://blogs.solidq.com/dsarka/Home.aspx)

Dejan Sarka, MCT and Data Platform MVP, is an independent trainer and consultant that focuses on development of database and business intelligence applications. Besides projects, he spends about half of his time on training and mentoring. He is the founder of the Slovenian SQL Server and .NET Users Group. Dejan Sarka is the main author or co-author of eighteen books about databases and SQL Server. Dejan Sarka has also developed many courses and seminars for Microsoft, Radacad, SolidQ, and Pluralsight.

**Gianluca Hotz**

Twitter:  - [glhotz](https://www.twitter.com/glhotz)

LinkedIn: [Gianluca Hotz](http://it.linkedin.com/in/ghotz)

Contact: [http://www.ghotz.com](http://www.ghotz.com)

Gianluca Hotz is an independent consultant, trainer, speaker and Mentor specialized in architecture, database design, high availability, capacity planning, performance tuning, system integration and migrations for Microsoft SQL Server. He has been working as a consultant in the IT field since 1993 and with SQL Server since 1996. He is among the original founders of ugiss.org, where he served as vice-president from 2001 to 2016 and he is now serving as president, for his contribution to the community he has been a SQL Server MVP since 1998.

**Rudi Bruchez**

Twitter:  - [nepasderanger](https://www.twitter.com/nepasderanger)

LinkedIn: [Rudi Bruchez](https://fr.linkedin.com/in/rudibruchez)

Contact: [http://www.babaluga.com/](http://www.babaluga.com/)

(same as before)

**Jonathan Stewart**

Twitter:  - [sqllocks](https://www.twitter.com/sqllocks)

LinkedIn: [Jonathan Stewart](https://www.linkedin.com/in/sqllocks/)

Contact: [https://sqllocks.net/](https://sqllocks.net/)

Jonathan Stewart is a Business Intelligence consultant specializing in data visualization, data warehousing, and data management technologies. An advocate for educating others, he is a public speaker, teacher and blogger, continually teaching people about the Microsoft BI Stack. Since 2000, he has been working in the database field with industry leaders in healthcare, manufacturing, financial, insurance and federal, state and local governments.

Jonathan is very active in the community. He has presented on SQL Server, SSIS, Reporting Services, Power BI and Business Intelligence at numerous SQLSaturday events, local user groups, and conferences throughout the United States and around the world. He participates in webcasts, podcasts, and on

**Gilberto Zampatti**

Time ago (a lot of time ago…) an excellent IT pro brought me with him and became my Mentor in the IT wonderland…it was a world full of mainframes…
I met the Relational theory when there were no commercial RDBMS, and I was spellbound by that “magic”. When Microsoft appeared in the IT market, I felt finally which trek I had to follow. I’m still walking on such road, and in my rucksack I’ve ben putting some other stuff (like SharePoint, for example). My sole regret:  I’ve left the College to consecrate all my time to my job; curiously, since then, I’ve never stop learning…

**Tomaž Kaštrun**

Twitter:  - [@tomaz_tsql](https://www.twitter.com/@tomaz_tsql)

LinkedIn: [Tomaž Kaštrun](http://www.linkedin.com/tomaz.kastrun)

Contact: [http://www.tomaztsql.wordpress.com](http://www.tomaztsql.wordpress.com)

Tomaž Kaštrun is BI developer and data analyst. His main focus are data mining, T-SQL development, programming and query optimization. He has been working with SQL server since version 2000. He is Microsoft Certified Professional, Microsoft MVP for data platform and Microsoft trainer.

**Danilo Dominici**

Twitter:  - [@danilo_dominici](https://www.twitter.com/@danilo_dominici)

Danilo Dominici, lavora con SQL Server sin dalla versione 6.5. Si occupa principalmente di progettazione, implementazione ed ottimizzazione architetturale, monitoring e performance tuning.  Alterna le attivit#224; di consulenza a quelle di formatore, speaker ed autore. Microsoft Certified Trainer dal 2000 e SQL Server MVP dal 2014, #232; anche co-leader del PASS Global Italian Virtual Chapter, lo user group quot;virtualequot; in lingua italiana dedicato a SQL Server.

**Gianluca Sartori**

Twitter:  - [http://twitter.com/#!/spaghettidba](https://www.twitter.com/http://twitter.com/#!/spaghettidba)

LinkedIn: [Gianluca Sartori](http://it.linkedin.com/pub/gianluca-sartori/23/50b/a12)

Contact: [http://spaghettidba.com](http://spaghettidba.com)

Gianluca Sartori is a Data Platform MVP, independent consultant and performance tuning specialist. He has been working in the software industry since 1999 and has been working with SQL Server ever since. He also works as a SQL Server trainer and in his spare time he writes technical articles and participates the SQL Server forums. Gianluca enjoys presenting SQL Server topics at conferences in Europe and in Italy in particular. He is currently working as lead DBA at a famous Formula 1 team.

**Marco Obinu**

Twitter:  - [omegamadlab](https://www.twitter.com/omegamadlab)

LinkedIn: [Marco Obinu](https://www.linkedin.com/in/marco-obinu-omegamadlab/)

Contact: [https://www.omegamadlab.com](https://www.omegamadlab.com)

Curious by nature, talkative geek who can speak in front of a public or a camera, in love with technology, primarily SQL Server and Azure.
I'd like to understand how things work and to solve problems by myself.

**Jan Mulkens**

Twitter:  - [https://twitter.com/JanMulkens](https://www.twitter.com/https://twitter.com/JanMulkens)

LinkedIn: [Jan Mulkens](https://www.linkedin.com/in/janmulkens)

Contact: [http://www.janmulkens.be](http://www.janmulkens.be)

Jan Mulkens is a Microsoft MVP in AI, a Solution Expert at Ordina Belgium, and a Microsoft Data Platform  BI Consultant.
In his spare time, he is a speaker at conferences and user groups in Europe and he organizes two user groups and a conference in Belgium.
Power BI Days conference (www.powerbidays.com), Belgium Microsoft Advanced Analytics User Group (bit.ly/msaaug), and Flemish Power BI User Group (meetup.powerbibelgium.com).

**Luca Zavarella**

Twitter:  - [@lucazav](https://www.twitter.com/@lucazav)

LinkedIn: [Luca Zavarella](https://www.linkedin.com/in/lucazavarella/)

Contact: [http://blogs.solidq.com/en/author/lzavarella/](http://blogs.solidq.com/en/author/lzavarella/)

Mentor  Technical Director at SolidQ Italy. He loves BI, Advanced Analytics and Machine Learning. He plays piano in the free time.

**Marco Pozzan**

Twitter:  - [@marcopozzan](https://www.twitter.com/@marcopozzan)

LinkedIn: [Marco Pozzan](https://it.linkedin.com/in/marcopozzan)

Contact: [http://www.marcopozzan.it](http://www.marcopozzan.it)

Consultant and trainer in business intelligence, analytics and data mining on Methode . Teacher for ITS courses of data warehouse at the University of Pordenone.

**Alessandro Falchetti**

Quest Pre – Sales Information Management for Italian and Spanish market from July 2017
Database solution expert focus on replication and monitor solution. Provide product and industry expertise to the sale team by demonstrating solution utilizing Shareplex Foglight Toad and other software products to satisfy critical business requirements of the customer. Strong technical knowledge and great problem solving ability complete the entire professional profile

**Francesco De Chirico**

Twitter:  - [http://twitter.com/fdechirico](https://www.twitter.com/http://twitter.com/fdechirico)

LinkedIn: [Francesco De Chirico](http://www.linkedin.com/in/fdechirico)

Contact: [http://francescodechirico.wordpress.com/](http://francescodechirico.wordpress.com/)

Francesco De Chirico is a consultant, trainer and speaker specialized in modeling and developing complex BI solutions with the Microsoft BI stack. He has been working with SSAS since 2001 and has a strong knowledge of the MDX, DAX and M. He focused on all the Microsoft Data Platform especially on Power BI. Co-leader of the PASS Global Italian Virtual Group and Milan Power BI User Group, regular speaker at events like PASS SQLSaturday, Microsoft Certified Trainer for many years, Francesco holds several Microsoft certifications including the prestigious SSAS Maestro for BI certification (2012) and the Microsoft Professional Program Data Science certification (2017). He is the project creator of the Analysis Services Query Analyzer tool.

**Luca Bruni**

Twitter:  - [@mrg3d](https://www.twitter.com/@mrg3d)

LinkedIn: [Luca Bruni](https://www.linkedin.com/in/mrg3d/)

Luca Bruni ottiene la Laurea Magistrale in Ingegneria Informatica presso il Politecnico di Milano (sede di Como) nel 2006. Ha lavorato in diverse aziende coprendo vari ruoli: Software Developer, Consultant, Project Manager. Dal 2010 lavora in qualità di Software  Data Architect presso una nota software house svizzera. Lavora con SQL Server dalla versione 2000 e da Dicembre 2016 è Contributor UGISS.

**Dean Savović**

Twitter:  - [https://twitter.com/dsavovic](https://www.twitter.com/https://twitter.com/dsavovic)

LinkedIn: [Dean Savović](https://www.linkedin.com/in/dsavovic/)

Contact: [http://www.savovic.com.hr](http://www.savovic.com.hr)

Dean is Senior DBA practicing SQL Server since version 7.0 and main areas of interest are performance tuning and troubleshooting SQL Server database. He speaks at Microsoft Windays Croatia, ATD Croatia, SSWUG, KulenDayz Croatia, SQLSaturday events, etc... Primary focus is on OLTP databases with occasional adventures with Business Intelligence. He finished Faculty of Electrical Engineering and Computing and MBA on Faculty of Economics in Zagreb. His premise was that it is very useful to combine technical knowledge with management process knowledge that help us in our everyday work. He works in SPAN which is specialized in data management field on Microsoft SQL Server.

**Marco Parenzan**

Twitter:  - [@marco_parenzan](https://www.twitter.com/@marco_parenzan)

LinkedIn: [Marco Parenzan](https://it.linkedin.com/in/marcoparenzan)

Contact: [https://www.linkedin.com/in/marcoparenzan/](https://www.linkedin.com/in/marcoparenzan/)

Marco Parenzan is an independent Cloud and IoT Architect and .NET Developer.
He has been awarded as a MVP on Microsoft Azure since 2014.
He is a speaker in major community events in Italy about Azure and .NET development.
He is a community lead for 1nn0va, an official Microsoft community in Pordenone, Italy.
He has written a book on Azure in 2016.
He loves developing retrogames and reading comix.

Marco Parenzan è professionista per le architetture Cloud e IoT e lo sviluppo in .NET.
Ha ricevuto il titolo di MVP su Microsoft Azure dal 2014.
È uno speaker in Italia su Azure e lo sviluppo di .NET.
E' un community lead per 1nn0va, una community ufficiale Microsoft a Pordenone, in Italia.
Ha scritto un libro su Azure nel 2016.

## Sponsors
The following is a list of sponsors that helped fund the event:

- [Microsoft Corporation (GAP)](http://www.microsoft.com/en-us/server-cloud/products/sql-server/)

- [VMWare](http://www.vmware.com)

- [Realcomm Srl](http://www.realcomm.it/)

- [Datamaze](http://www.datamaze.it/)

- [Beantech](http://www.beantech.it)

- [TimeXtender](http://www.timextender.com)

- [Quest Software](https://www.quest.com/)

- [thinkIT](http://www.thinkit.it/)

[Back to the SQLSaturday Event List](/past)

[Back to the home page](/index)

repository: red-gate/sql-saturday-website

extension: markdown

repo_name: red-gate/sql-saturday-website


text:
# zig-bgfx-sdl2
Minimal zig project to get bgfx running with sdl2

SDL2 needs to be intalled on your system so that zig build can find it
To build and run:
```
zig build fetch
zig build run
```

license: MIT

branch_name: refs/heads/master

extension: md

gha_language: Zig

gha_license_id: MIT

license_type: permissive


text:
---
title: Lesson 7
layout: post
author: emanuel.guerreiro
permalink: /lesson-7/
source-id: 1Lgh4l5lDcJKpGdYQ3yhGfAGCAt6SQypCbLABp37xF1M
published: true
---
**Lesson 7**

This lesson we were given a code on Google Classroom in binary that we were told to decode into normal. For this I had to make a whole new part of code, for this I did everything the same (which was a surprise for me) except for where I separated the binary into 8's I did "right(...,8)", this 8 took the last 8 of each section so that I just had each digit in individual boxes. I then decoded that into decimal using Bin2Dec and then from that I used the data to transfer it from decimal to English. However I used Index and Match commands which couldn’t differentiate the difference between uppercase and lowercase. So far everything works apart from that. The end result just on the coder (not the decoder) comes out slightly wrong because of that causing all letter to come out capital (like caps lock).


text:
# Getting Paid

We make all staff payments on the 2nd or 3rd working day of a month. Additionally, we have another payment cycle around the 15th of the month, for any vendor payments and/or reimbursements.

We deduct and submit taxes \(TDS\) on your behalf to the government towards your income tax. When you are hired we will get you set up on our banking system - please make sure you go through the finance checklist which you should get about 15 days before your first day.

If you purchase things on behalf of the company, we reimburse you those expenses as a part of the pay cycle. Submit your receipts for reimbursement to our finance team and they will be included on an upcoming pay cycle.

### Payment Documents Required

* [ ] Proof of Identity
* [ ] Proof of Residence/Address
* [ ] Permanent Account Number
* [ ] Your Bank Account Details
  * [ ] Name on your bank account
  * [ ] Account number
  * [ ] IFSC code
* [ ] Supporting documents for anything that you've mentioned in your resume

repository: vinaysshenoy/handbook

repo_name: vinaysshenoy/handbook


text:
# Ways to Initialize Apps

The following use cases are using [`create-react-app`](https://github.com/facebook/create-react-app) as an example.

## `create-react-app`

### `npm` <= 5.1.0

```shell
npm i<EMAIL_ADDRESS>-g
npm install create-react-app -g
create-react-app playground
```

### `npm` >= 5.2.0

```shell
npm i<EMAIL_ADDRESS>-g
npx create-react-app playground
```

### `npm` >= 6.1.0

```shell
npm i npm -g
npm init react-app playground
```

## `create-`<initializers>

You can use other initializers other than `create-react-app`.

A good example is [`mdx-deck`](https://github.com/jxnblk/mdx-deck). It has a cooresponding initializer called `create-deck` that will automate the create of an example `mdx-deck`.

```
npm info create-deck
npm init deck my-presentation
```


text:
# CRUD Sample using Flutter

This is a new flutter project to envolve a simple CRUD.

## Installation

Use the package manager to install clone this sample.

```bash
git clone https://github.com/DiegoModesto/FlutterCrudSample.git
```

## Running
In VS Code, running using F5. (But, if you neet run in another IDE, just don't forget to use a AVD or Physical device ;) )

Attention in Provider to get context in dummy data, and work all changes, this is only in memory, and does not have trouble to change then (All is in LIB->DATA->DUMMY_USERS.dart).

![List of Users](https://github.com/DiegoModesto/FlutterCrudSample/blob/master/screenshot/crudsample01.PNG)
![Adding new User](https://github.com/DiegoModesto/FlutterCrudSample/blob/master/screenshot/crudsample02.PNG)
![Editing an User](https://github.com/DiegoModesto/FlutterCrudSample/blob/master/screenshot/crudsample03.PNG)

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

## License
[MIT](https://choosealicense.com/licenses/mit/)

repository: DiegoModesto/FlutterCrudSample

repo_name: DiegoModesto/FlutterCrudSample


text:
## Transformation
The purpose of this project is to read a raw json tweet from Google PubSub and sink it into BigQuery for later analysis.

### Pre-requisites:
* Java 1.8.x
* Scala Scala 2.13

### Running Beam Pipeline
```shell script
$ ./bin/deploy_transformation.sh
```

gha_language: Jupyter Notebook


text:
# Memory region

This collection implementation relies on a memory management mechanism based on typed memory regions.
A memory region stores objects of the same type.

Management using a typed memory region allows you to organize the allocation of memory to a group of objects within one or more memory blocks.
Each of the blocks must be large enough to allocate memory for many objects within it.

At the end of use, all allocated objects in one region of memory can be effectively deallocated with a single operation.
Like stack allocation, memory regions facilitate memory allocation and deallocation with low overhead; but they are more flexible, allowing objects to live longer than the stack frame in which they were placed.

We have implemented two variants of the memory region.

## Unbroken memory region
All objects in a region are allocated in a single contiguous range
of memory addresses, in the same way that memory for the stack is normally allocated.
Region attributes: type, item size, capacity, number of allocated items.
Given that we know the size and type of the item, we can refer to the items
of the region as elements of an array using the index.
The object (item) of the region can be moved.
A contiguous region is used for regular data structures such as:
arrays, stacks, store, or queue.

## Segmented memory region
A linked list of several continuous regions.
A segmented region is implemented as a linked list of large memory blocks;
The region data structure contains a pointer to the next free position inside the block,
and if the block is filled to the end, the memory management system allocates
a new block and adds it to the list.
Region attributes: type, size, capacity, number of allocated elements.
A region element may not be moved and its address shall be addressed to.
Segmented region is used for dynamic data structures such as:
list, tree or dictionary.

## Unbroken region
Operations:
1. Add
2. Delete
3. Assign
4. Clean up
5. Return the element by index
6. Exchange two elements
7. Sorting .

## Segmented memory region
Operations:
1. Add
2. Delete
3. Assign .
4. Clean up
5. Return the item to its address

Functions:
1. Notification when performing operations
2. Checking the entry of the pointer into the region
3. For objects provide support for OwnedObject
4. Regional elements reuse
5. Element counter
6. For the memory segment GetItemPtr(Index: Cardinal): Pointer;

## Metadata
The typed region contains metadata.
Metadata contains the size and set of Boolean flags and seed in a packed record.
```
hMeta = record
  TypeKind     5 System.TTypeKind 0...22
  Reserved     1
  ManagedType  1 Boolean -- Controlled type
  HasWeakRef   1 Boolean -- Type contains weak links
               8
  RangeCheck   1 Boolean -- Check index or pointer validity
  Notification 1 Boolean -- Notification when performing operations
  Owned        1 Boolean -- Objects belong to the region
  RemoveAction 2 TRemoveAction 0...2 -- Removal behavior from the collection
end;
```
A constant value is placed in the **seed** field and used to indicate if this structure is valid.

Removal behavior from the collection
```
TRemoveAction = (
  HoldValue = 0,  // Hold the item value
  Clear = 1,      // Clear the item value
  Reuse = 2);     // Clear the item value and allow reuse
```


text:
# TrainingApi.ProjectModel

## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **String** | Gets the project id | [optional]
**name** | **String** | Gets or sets the name of the project | [optional]
**description** | **String** | Gets or sets the description of the project | [optional]
**currentIterationId** | **String** | Gets the current iteration id | [optional]
**created** | **Date** | Gets the date this project was created | [optional]
**lastModified** | **Date** | Gets the date this project was last modifed | [optional]
**settings** | [**ProjectsSettings**](ProjectsSettings.md) |  | [optional]
**thumbnailUri** | **String** | Gets the thumbnail url representing the image | [optional]

repository: bengreenier-archive/customvision-micro

repo_name: bengreenier-archive/customvision-micro


text:
---
title: "Build a React Website with full CI/CD in less than 2 minutes"
description: "Hurry! Hurry!"
date: 2018-08-12T13:14:11Z
tags: ["gitlab", "react"]
---

I'm going to show you how to deploy a static React website in under 2 minutes, with full CI/CD, onto the WWW.

You'll be using:

- React
- Gilab pages
- Gitlab CI/CD

A few assumptions:

- You have git setup
- You have a Gitlab account (with [SSH setup for Gitlab])
- You don't have a repo on gitlab called `my-awesome-app`. If so, then use a different name below.
- You have Node installed (hopefully via [nvm])

## Ready?

Start the time!

Let's create a new React App using [Create React App]

```bash
# Using npx - create a react app!
npx create-react-app my-awesome-app

# Go into the app directory
cd my-awesome-app

# Add ci configuration
touch .gitlab-ci.yml

# Using your favourite editor - mine being vscode
code .gitlab-ci.yml
```

Copy the following into the `.gitlab-ci.yml` file.

```yaml
# Using the node alpine image to build the React app
image: node:alpine

# Announce the URL as per CRA docs
# https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#advanced-configuration
variables:
  PUBLIC_URL: /my-awesome-app
# Cache node modules - speeds up future builds
cache:
  paths:
    - node_modules

# Name the stages involved in the pipeline
stages:
  - deploy

# Job name for gitlab to recognise this results in assets for Gitlab Pages
# https://docs.gitlab.com/ee/user/project/pages/introduction.html#gitlab-pages-requirements
pages:
  stage: deploy
  script:
    - npm install # Install all dependencies
    - npm run build --prod # Build for prod
    - mv public _public # CRA and gitlab pages both use the public folder. This is only for the build pipeline.
    - mv build public # Move build files to public dir for Gitlab Pages
    - cp public/index.html public/404.html # Helps with https://medium.com/@pshrmn/demystifying-single-page-applications-3068d0555d46
  artifacts:
    paths:
      - public # The built files for Gitlab Pages to serve
  only:
    - master # Only run on master branch
```

All ready - let's push it up to Gitlab to build and deploy.

```bash
# Initialize the repo
git init

# Stage all the files for commit
git add .

# Commit the files
git commit -m 'first commit!'

# Push up to gitlab
git push --set-upstream git@gitlab.com:<YOUR_GITLAB_USERNAME>/$(git rev-parse --show-toplevel | xargs basename).git $(git rev-parse --abbrev-ref HEAD)
```

Now visit <https://gitlab.com/YOUR_GITLAB_USERNAME/my-awesome-app/pipelines>

Once that passes checkout <https://YOUR_GITLAB_USERNAME.gitlab.io/my-awesome-app>.

Done!

<!-- References -->

[nvm]: https://github.com/creationix/nvm
[create react app]: https://github.com/facebook/create-react-app
[ssh setup for gitlab]: https://docs.gitlab.com/ee/ssh/

repository: olmesm/ohmybuck

branch_name: refs/heads/main

gha_language: JavaScript

repo_name: olmesm/ohmybuck


text:
# Sample Code
Various sample code, examples and utilities. Refer to each subfolder for more information on each.

Refer to the [WIKI](https://github.com/jeffreykemp/sample/wiki) for cheat sheets and other useful tips.

> Blog: https://jeffkemponoracle.com

repository: mkcafe/sample

repo_name: mkcafe/sample


text:
# [Screenguppy](https://github.com/relsqui/screenguppy)

(c) 2017 [Finn Ellis](mailto:relsqui@chiliahedron.com). Free to use, copy,
modify, etc. under the MIT license. See included LICENSE file.

Screenguppy is a little friend to keep you company in your GNU screen session.
Specifically, it adds an extra line at the bottom (in the caption field, above
the hardline if you have one) with a text-based fish that swims back and forth.

If you're not running screen or don't want to put a fish there, you can also
just run it in a bash loop (or use similar logic to add it to your i3 status
bar or anywhere else that you can insert script output). See
[Running Screenguppy Without Screen](#running-screenguppy-without-screen).

If you'd like to use Screenguppy with tmux, there are partial instructions in
an [open pull request](#2). If you can improve them, please leave comments!

Contributions of both code and ideas to Screenguppy are welcome. Check out the
issue tracker to see what's already planned and suggest other things.

## Contents
* [Installing Screenguppy](#installing-screenguppy)
* [Running Screenguppy Without Screen](#running-screenguppy-without-screen)
* [Adding Screenguppy to Screen](#adding-screenguppy-to-screen)
* [Advanced Customization](#advanced-customization)
* [Removing Screenguppy](#removing-screenguppy)

## Installing Screenguppy

Install screen, if necessary.

```bash
sudo apt-get screen
```

Clone this repository.

```bash
git clone https://github.com/relsqui/screenguppy.git

```

(You can use the SSH address instead if you have SSH keys configured on Github already.)

Make yourself a bin directory if it doesn't already exist, and then link the
Screenguppy executable into it.

```bash
mkdir -p ~/bin
ln -s ~/screenguppy/screenguppy ~/bin
```

(Replace the first path with wherever you cloned screenguppy, if it's not
your home directory.)

Make sure that `~/bin` is already in your `$PATH` by trying to run:

```bash
screenguppy
```

If it prints a single line with a fish on it, you're golden. If not,
add this line to your `~/.bashrc` file:

```
export PATH="$PATH:$HOME/bin"
```

And then re-execute that file:

```bash
source .bashrc
```

Now you should be able to run `screenguppy` and see one fish.

## Running Screenguppy Without Screen

If you just want to watch the animated fish without setting it up in your
screen caption line (or you already have a caption line, don't use screen,
etc.) then you can run the script independently in a bash loop, like so:

```bash
while true; do
  clear
  screenguppy
  sleep 1
done
```

Type `ctrl-c` to stop.

## Adding Screenguppy to Screen

Open your `~/.screenrc` file in a text editor. Do a quick search for any
lines that already have the command `backtick` in them. If you don't find any
(including if the file is brand new), add these lines to the end of the file:

```
backtick 1 1 1 screenguppy
caption always '%{yk}%=%1`%='
```

If there are some backtick lines, find the highest number that appears right
after the word `backtick`, then add one to it and note the result. For example,
if you saw `backtick 1` and `backtick 2`, note `3`.

Add the following lines to the end of the file, substituting your noted number
for `N` in both places (once per line).

```
backtick N 1 1 screenguppy
caption always '%{yk}%=%N`%='
```

NOTE: If you already have a `caption` command in your `.screenrc` file,
that line and Screenguppy can't work at the same time. If you're not sure
which one you want to keep, you can comment out the other one temporarily
by adding a # at the beginning of that line.

Finally, if you're already running a screen, refresh the configuration
by typing `C-a :` and then `source ~/.screenrc`. If you see errors about
the screenguppy command not being found, type `C-a :` again and then
`setenv PATH "$PATH:$HOME/bin"`.

If you're not running a screen yet, type `screen` to start one.

Enjoy your fishy friend!

## Advanced Customization

* The `%{yb}` part of the caption line in `.screenrc` defines the fish and
  background colors. See the
  [String Escapes section of the GNU Screen Manual](https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html)
  for other options.
* The `fish_options` block near the top of the `screenguppy` executable
  provides quick access to several configuration choices:
  * Screenguppy assumes your terminal is at least 80 characters wide and uses no
    more of it than that. You can give your fish more or less room to swim by
    editing the value for `max_range`.
  * Screenguppy will try to display Unicode art, and revert to ASCII if it
    fails.  You can force ASCII output by setting `use_unicode` to `False`.
    * You can also change the details of the art by editing the values of
      `unicode_art` and `ascii_art` which are initialized in the `Fish` class.
      Each one should be an array of two strings showing the right-facing
      variant and the left-facing variant, respectively.
  * You can change the fish's speed by changing the value for `speed`. This
    doesn't change how often it moves (which is capped at once per second by
    screen itself), but how far it moves each time.
    * The speed doesn't have to be an integer, but the distance will always be
      rounded.
    * If the speed is less than 1, the fish will sometimes skip its move.
    * If the speed is negative, the fish will swim backwards.

## Removing Screenguppy

You can remove Screenguppy from your screen by deleting the two lines you added
to your `.screenrc` file. If you have a screen open that you would like to keep
running, refresh its configuration by typing `C-a :` and then
`source ~/.screenrc`.

You can also delete Screenguppy entirely just by removing the directory it's in
and the link you created:

```bash
rm -rf ~/screenguppy # or wherever you cloned it
rm ~/bin/screenguppy
```

repository: relsqui/screenguppy

gha_language: Python

repo_name: relsqui/screenguppy


text:
Data Source for Influx

Currently I have no way of configuring the influxdb data source. as it is not often needed it can be carried out manually.

You will need access to cloud foundry CLI and be able to 'cf env <prometheus application>'

The vaules you need are:

1. The URL of the Database i.e. https://prod-lon-70d73563-f5f9-4b94-9b93-d95ffe1a4a2d-paas-cf-prod.aivencloud.com:19676
2. The Username
3. The Password

These all go in the logical places for the datasource, which should be called InfluxDB
There is one other setting that MUST be right and this is the database, this must be _internal


text:
# CommControl
Set/Clear TXD/RTS/DTR on Windows COM port

This program opens a Windows COM port and presents 3 check boxes that control the following RS-232 lines on the COM port: TXD, RTS, DTR.

If all you want is an already-build X86 executable, here is the link: https://github.com/w5xd/CommControl/raw/master/CommControl-<IP_ADDRESS>.zip


text:
OrientDB.dart
=========

[![Build Status](https://drone.io/github.com/SoftHai/OrientDB.dart/status.png)](https://drone.io/github.com/SoftHai/OrientDB.dart/latest)

This is an Client to connect to an [OrientDB](http://www.orientechnologies.com/orientdb/) Database.

[OrientDB.dart on Dart Package Manager](http://pub.dartlang.org/packages/orientdb_dart)

Install
=========

You can get OrientDB.dart from the Dart Pub Manager.<br/>
**Get the Package**
* Add the dependancy 'orientdb_dart' to your pubspec.yaml
 * Via the DartEditor dialog
 * By adding the following to the file:
   ```
   dependencies:
       orientdb_dart: any
   ```
* Update your depandancies by running `pub install`

**Use the Package**
```dart
import 'package:orientdb_dart/orientdb_dart.dart';
```

Example
=========
This is a very early version, currently you can work with it as followed
```dart
// Creating an custom object stored in the database
class Person extends OObject {

  String get Name => super.JSONMap["Name"];
  void set Name(String value) { super.JSONMap["Name"] = value; }

  Person(String className) : super(className);

  Person.FormJson(String json) : super.FormJson(json);

  Person.FormMap(Map json) : super.FormMap(json);
}

main() {
  // Creating an http client
  var oClient = new OClient.Http("localhost", 2480, "TestGraph", "root", "root");

  // Connecting to the database
  var result = oClient.Connect();
  result.then((successful) {
    if(successful) {
      // Connecting successful
      return oClient.CommandStream(OCommandScriptType.SQL, "select * from Person",
      								new OCustomParser<Person>(), maxResults: 20)
        .then((result) {

          // Iterate throw all returned object
          result.toList().then((persons) => persons.forEach((person) {
            print(person.Name);
          }));

          return oClient.Connection.Disconnect();
      }).catchError((ex) {
        // Handling execution error e.g. syntax error in SQL
        print(ex);
      });
    }
    else {

    }
  });
}
```

Documentation
=========
See [here](doc/oclient.md)

Changelog
=========
See [here](/CHANGELOG.md)

Roadmap
=========
**0.1 (Released)**
 * Basic Rest HTTP protocol implementation
 * Basic Mapping Support (ODM)

**0.2 (In Progress)**
 * Full Rest HTTP protocol implementation
 * SQL Injection protection

0.3
 * Parsing results (Json) to objects (OD-Mapping)
  * Mapping by name / reflections
  * Mapping by attributes
  * ?

0.4
 * Creating/updating the database schema from registered objects

0.5
 * Creating an high level query language (something like LINQ in C#)

Later
 * Implementing the Binary Protocol


text:
<!-- Top -->

# TimeHandlr

[![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-brightgreen.svg)](https://prettier.io)
![TypeScript: Strict](https://img.shields.io/badge/typescript-strict-brightgreen.svg)
[![NPM version](https://badge.fury.io/js/timehandlr.svg)](http://badge.fury.io/js/timehandlr)
[![Join the chat at https://gitter.im/FullScreenShenanigans/community](https://badges.gitter.im/FullScreenShenanigans/community.svg)](https://gitter.im/FullScreenShenanigans/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Scheduling for dynamically repeating or synchronized events.

<!-- /Top -->

Like [@sinonjs/fake-timers](https://github.com/sinonjs/fake-timers), but for one-time and repeating events in production code.

## Usage

### Constructor

```typescript
import { TimeHandlr } from "timehandlr";

const timeHandler = new TimeHandlr();
```

### `addEvent`

Parameters:

-   `callback: Function`: Callback to run for the event.
-   `timeDelay: number | Function` _(optional)_: How long from now to run the callback (by default, 1).
-   `...args: any[]`: Any additional arguments to pass to the callback.

Returns: An event with the given callback and time information.

Adds an event to be called once.

```typescript
const timeHandler = new TimeHandlr();

timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();
```

If `args` are provided, they're passed to the callback.
This is similar to `Function.call`.

```typescript
const timeHandler = new TimeHandlr();

timeHandler.addEvent(console.log.bind(console), 3, "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();
```

### `addEventInterval`

Parameters:

-   `callback: Function`: Callback to run for the event.
-   `timeDelay: number | Function` _(optional)_: How long from now to run the callback (by default, 1).
-   `numRepeats: number | Function` _(optional)_: How many times to run the event (by default, 1).
-   `...args: any[]`: Any additional arguments to pass to the callback.

Adds an event to be called multiple times.

```typescript
const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(() => console.log("Hello world!"), 3, 2);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();
```

If `args` are provided, they're passed to the callback.
This is similar to `Function.call`.

```typescript
const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(console.log.bind(console), 3, "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();
```

### `addEventIntervalSynched`

Parameters:

-   `callback: Function`: Callback to run for the event.
-   `timeDelay: number | Function` _(optional)_: How long from now to run the callback (by default, 1).
-   `numRepeats: number | Function` _(optional)_: How many times to run the event (by default, 1).
-   `...args: any[]`: Any additional arguments to pass to the callback.

Adds an event interval, waiting to start until it's in sync with the time delay.

This is useful for starting animations of objects intended to be animated in sync, such as Goombas in Mario or flower scenery in Pokemon.
Otherwise identical to `addEventInterval`.

### `cancelEvent`

Parameters:

-   `event: Object`: Event to cancel.

Cancels an event created by one of the `addEvent*` methods.

```typescript
const timeHandler = new TimeHandlr();

const event = timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelEvent(event);

timeHandler.advance();
```

### `cancelAllEvents`

Cancels all events.

```typescript
const timeHandler = new TimeHandlr();

timeHandler.addEvent(() => console.log("Hello world!"), 3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelAllEvents();

timeHandler.advance();
```

<!-- Development -->

## Development

This repository is a portion of the [EightBittr monorepo](https://raw.githubusercontent.com/FullScreenShenanigans/EightBittr).
See its [docs/Development.md](../../docs/Development.md) for details on how to get started. 💖

### Running Tests

```shell
yarn run test
```

Tests are written in [Mocha](https://github.com/mochajs/mocha) and [Chai](https://github.com/chaijs/chai).
Their files are written using alongside source files under `src/` and named `*.test.ts?`.
Whenever you add, remove, or rename a `*.test.t*` file under `src/`, `watch` will re-run `yarn run test:setup` to regenerate the list of static test files in `test/index.html`.
You can open that file in a browser to debug through the tests, or run `yarn test:run` to run them in headless Chrome.

<!-- Maps -->
<!-- /Maps -->

<!-- /Development -->

repository: FullScreenShenanigans/EightBittr

gha_language: TypeScript

repo_name: FullScreenShenanigans/EightBittr


text:
---
title: Bugs and issues
---
## First of all
Please, don't hesitate to post them [here](https://github.com/green-green-avk/AnotherTerm/issues){:target="_blank"} or:

* Linux installation related:
  [scripts](https://github.com/green-green-avk/AnotherTerm-scripts){:target="_blank"} /
  [**PRoot**](https://github.com/green-green-avk/proot/issues){:target="_blank"} /
  [**minitar**](https://github.com/green-green-avk/build-libarchive-minitar-android/issues){:target="_blank"};
* **libusb** wrapper related:
  [application service module](https://github.com/green-green-avk/LibUsbManager/issues){:target="_blank"} /
  [wrapper library](https://github.com/green-green-avk/libusb-1.0.23-android-helper-service-patch/issues){:target="_blank"};

or into the other linked repositories of [this project](https://github.com/users/green-green-avk/projects/1){:target="_blank"}.

From time to time I could see some strange "purely Android framework" crash reports on the **Google Play Console**.

**For example:** Someone tried to select something in a text edit field and **Another Term** crashed because there is a problem
either within the spanned text in this field or the framework itself.

These crash reports are of no use for me as long as they contain nothing but function names / line numbers for a security reason
and all of them are from the Android framework code.

Your bug reports seem the only way to help with it.
(I think, it's not a good case to use **Google Analytics**; you do probably, too.)

## Known issues

### The "Linux under PRoot" feature and Android 10
See solutions [here](local-shell-w-x.html#main_content){:target="_blank"}.

### **termsh** SSL handshake error on very old Androids
```
javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x62633510: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5b08cd5c:0x00000000)
```

Possible workarounds:
1. Using of some compatible proxy.
2. Manual download by your preferred browser.

I'll possibly create some better solution later.

### Touch screen mouse
Not all Android deployments have the same touch event propagation logic and could improperly support
[`android:windowEnableSplitTouch="true"`](https://developer.android.com/reference/android/R.attr.html#windowEnableSplitTouch){:target="_blank"}.
As a result the touch screen mouse feature does not work properly on **Samsung Galaxy Note II** (SCH_I605) with Android 4.4.2
(the only known device at the moment).

The workaround looks relatively simple.
Please, ask me if you think, you need it.

### **termsh**
It seems, access to `/proc/self/fd/` is restricted for the Dalvik VM process on **Samsung Galaxy Note II** (SCH_I605) with Android 4.4.2
if it executes bytecode from a signed APK.
It effectively blocks new files creation by **termsh** (as it interferes with the chrooted paths resolution logic).
The debug version of the **Another Term** APK with the default Android Studio signature works correct though.
{:style="text-decoration: line-through"}

Fixed in [<hl>MkIIIv</hl>](https://github.com/green-green-avk/AnotherTerm/commit/2d9f6b4a4a9a7f1996d7981aab1002ecf46573dc){:target="_blank"}.

### USB UART dongles support
Due to an USB bug in Android itself, it's highly recommended not to use the USB UART
with devices running Android 5.1.1 Lollipop.
See <https://github.com/felHR85/UsbSerial/issues/142>{:target="_blank"} for more details.

The workaround looks impossible.

### Bluetooth UART dongles support
Alas, UART port settings (*baud rate*, *data bits*, *stop bits*, *parity*, *flow control*) cannot be applied to Bluetooth dongles
using the Android Bluetooth stack.
See <https://stackoverflow.com/a/23888958/13020093>{:target="_blank"} for the details.

The workaround looks impossible.

### Hardware input devices
Please, be aware, that key mapping of hardware input devices is provided by device vendors
and it could make some troubles.

**For example:** *ASUS ZenFone 4 Max* has the hardware keyboard Home
(`KEYCODE_MOVE_HOME`) key mapped as the Android middle (`KEYCODE_HOME`)
button that makes it effectively invisible for applications.

Most vendors also maps mouse right and middle buttons in some unexpected ways.
Fortunately, mouse buttons mapping can usually be worked around relatively simply.
Most usual right mouse button mapping as the Android Back (`KEYCODE_BACK`)
button is supported by this application.

There is also a possible general workaround by implementing own user-space HID device driver.

In case of rooted device the problem does not exist though because it's possible to simply change
appropriate mapping files.

repository: thejandj/AnotherTerm-docs

repo_name: thejandj/AnotherTerm-docs


text:
# Configuring Active Directory User Stores for SCIM 1.1 based Inbound Provisioning

WSO2 Identity Server can act both as a SCIM Provider and as a SCIM
consumer at the same time. You can test the WSO2 Identity Server's SCIM
Provider API as described [here]({{base_path}}/develop/scim-1.1-apis).

When the WSO2 Identity Server is connected to an external LDAP
or an Active Directory instance, they might not have these mandatory
SCIM attributes in their schema. So the option is to map the SCIM claims
to the existing attributes of the Active Directory.

Add a user with the username "john" and password "Wso2@123". Here we have to map the **userName** (`urn:scim:schemas:core:1.0:userName` ) SCIM attribute to an existing claim in the Active Directory (e.g.:`cn` ). Furthermore, when a user is being added in SCIM, there are four more SCIM attributes being added behind the scene. Following are the SCIM attributes:

- **location** (`urn:scim:schemas:core:1.0:meta.location`)
- **created** (`urn:scim:schemas:core:1.0:meta.created`)
- **lastModified** (`urn:scim:schemas:core:1.0:meta.lastModified`)
- **id** (`urn:scim:schemas:core:1.0:id`).

So we need to map these to existing Active Directory user attributes.

When mapping claims to attributes, there are few things to be considered. The SCIM claim dialect (`urn:scim:schemas:core:1.0:id` ) uses String type to hold their values. So, when mapping any SCIM claim to an attribute in the Active Directory, make sure to use the attributes which are having the String type. You can find all Active Directory attributes [here](https://docs.microsoft.com/en-us/windows/win32/adschema/attributes-all).

When a user or a group is created with SCIM, there are a set of mandatory SCIM  claim values that need to be saved along with the user or group. Some of these values are as follows.

- urn:scim:schemas:core:1.0:userName
- urn:scim:schemas:core:1.0:meta.location
- urn:scim:schemas:core:1.0:meta.created
- urn:scim:schemas:core:1.0:meta.lastModified
- urn:scim:schemas:core:1.0:id

??? note "Expand to see an example for claim mapping"

    | CLAIM URI                                                              | MAPPED ATTRIBUTE                             |
    |------------------------------------------------------------------------|----------------------------------------------|
    | `             urn:scim:schemas:core:1.0:userName            `          | `             cn            `                |
    | `             urn:scim:schemas:core:1.0:meta.location            `     | `             streetAddress            `     |
    | `             urn:scim:schemas:core:1.0:meta.created            `      | `             homePhone            `         |
    | `             urn:scim:schemas:core:1.0:meta.lastModified            ` | `             pager            `             |
    | `             urn:scim:schemas:core:1.0:id            `                | `             homePostalAddress            ` |

1. Log in to WSO2 Identity Server using your credentials.
2. Go to the **Main** menu in the Management Console menu and click
    **List** under **Claims**.
3. Select `http://wso2.org/claims` from the list.
4. Choose the **Id** claim and click on **Edit**.
    <!--![id-claim]({{base_path}}/assets/img/using-wso2-identity-server/id-claim.png)-->
5. Change the **Mapped Attribute** value to **homePostalAddress** and
    click **Update**.
    <!--![update-mapped-attribute]({{base_path}}/assets/img/using-wso2-identity-server/update-mapped-attribute.png)-->
6. Edit the other four claims in the same way.
7. Now the basic claim mapping is done. You can now add a user using
    the following curl command.

    - Primary Userstore Command

    ``` java
    curl -v -k --user admin:admin --data "{"schemas":[],"userName":"john","password":"Wso2@123"}" --header "Content-Type:application/json" https://localhost:9443/wso2/scim/Users
    ```

    - Secondary Userstore Command

    ``` java
    curl -v -k --user admin:admin --data "{"schemas":[],"userName":'wso2.com/uresh67',"password":"Wso2@123"}" --header "Content-Type:application/json" https://localhost:9443/wso2/scim/Users
    ```

    Note that the user name is preceded by the domain and is within
    single quotes 'wso2.com/uresh67'. Also note that 'wso2.com' here is
    a reference to a domain name.

    In RestClient, the following header parameters must be added and the
    double quotations must be removed from the message body.

    !!! info
        Content-Type: application/json
        Accept: \*/\*
        Message body
        {schemas:\[\],userName:'wso2.com/uresh67',password:Wso2@123}

    !!! info
        You need to do the claim mapping for every SCIM claim you are using
        with user operations.

gha_language: CSS


text:
## Install with Manual Loadbalancer

This guide is an extension to the [all-in-one install guide](one_click_install.md).
The `all-in-one install` is a single run installation which automatically
triggers the complete **Anthos on bare metal** installation when the Terraform
script is run. The default installation sets up Anthos on bare metal to run
using a [bundled loadbalancer](https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/bundled-lb).
This means that the loadbalancer and the cluster services are reachable only
from inside one of the GCE VMs _(i.e. Admin workstation, Controlplane nodes, Worker nodes)_
created during the installation process.

While this setup closely represents how **Anthos on bare metal (ABM)** will be
deployed in an actual enterprise baremetal environment, this is not ideal for
demos. With demo environments we would like to be able to easily reach the
`control plane` and the `ingress` of the Anthos on bare metal cluster without
having to SSH into a jump host.

Thus, this extension _(to the terraform script)_ installs Anthos on bare metal
using the [Manual LB](https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/manual-lb)
mode. We use [Google Cloud Loadbalancer](https://cloud.google.com/load-balancing/docs/load-balancing-overview)
as the loadbalancer fronting the Anthos on bare metal cluster.

---

### This new mode of installation creates **two** new Google Cloud Loadbalancers:
1. [**TCP Loadbalancer**](https://cloud.google.com/load-balancing/docs/ssl): this is
   the loadbalancer configured to front the `API Server (Controlplane)` of the
   ABM cluster. You can reach the `API Server` of your cluster via the
   `External IP Address` associated to this loadbalancer.

2. [**HTTP(S) Loadbalancer**](https://cloud.google.com/load-balancing/docs/https):
   this is the loadbalancer configured to front the `Ingress Service` of the ABM
   cluster. You can reach the `Kubernetes Services` of your cluster via the
   `External IP Address` associated to this loadbalancer.

    (click image to enlarge)

---

### Complete deployment architecture

---

### Sections
  - [Complete deployment architecture](#complete-deployment-architecture)
  - [Prerequisites](#prerequisites)
  - [Step by step guide](#step-by-step-guide)
  - [Verify installation](#verify-installation)
  - [Interacting with the Baremetal cluster](#interacting-with-the-baremetal-cluster)
    - [Controlplane / API Server](#controlplane--api-server)
    - [Ingress Service](#ingress-service)
    - [Interacting with the cluster via the GCP console](#interacting-with-the-cluster-via-the-gcp-console)
  - [Cleanup](#cleanup)

---

### Prerequisites
- This guide has the [same pre-requisites as the quickstart guide](/anthos-bm-gcp-terraform/README.md#pre-requisites)

### Step by step guide

1. Clone this repo into the workstation from where the rest of this guide will be followed.
   Move into the directory of this sample.
```sh
cd anthos-bm-gcp-terraform/
```

2. Create a `terraform.tfvars` file from the sample input variables file
```sh
cp terraform.tfvars.sample terraform.tfvars
```

3. Update the `terraform.tfvars` file to include variables specific to your environment
```sh
# terraform.tfvars file

project_id       = "<GOOGLE_CLOUD_PROJECT_ID>"
region           = "<GOOGLE_CLOUD_REGION_TO_USE>"
zone             = "<GOOGLE_CLOUD_ZONE_TO_USE>"
credentials_file = "<PATH_TO_GOOGLE_CLOUD_SERVICE_ACCOUNT_FILE>"
```

4. Add the `mode` variable to the `terraform.tfvars` file

> **Note:** Alternative to changing the variables file you may run the following commands
> using the `-var 'mode=manuallb'` flag

```sh
# terraform.tfvars file
...
mode             = "manuallb"
...
```

5. Navigate to the root directory of this sample and initialize Terraform
```sh
terraform init
```

5. Create a _Terraform_ execution plan
```sh
terraform plan
```

6. Apply the changes described in the _Terraform_ script
```sh
terraform apply
```
> **Note:** When prompted to confirm the Terraform plan, type 'Yes' and enter

***The `apply` command sets up the Compute Engine VM based bare metal infrastructure. This can take a few minutes (approx. 5-8 mins) for the VMs to get setup.***

---
### Verify installation

The Terraform script sets up the GCE VM infrastructure, configures the GCP
resources required for the Loadbalancers and finally triggers the installation
of Anthos on bare metal on the provisioned VMs. The installation is triggered
from inside the _admin workstation_ VM.

Upon completion the Terraform script will print the following output to the console.

> **Note:** You will notice that the output of the terraform script also has the
> **Public IP addresses** of the `Controlplane` and `Ingress` loadbalancers.
> Note down these Public IPs, since you will need them later. You must wait
> until the Anthos on bare cluster installation is complete before being able to
> use them.

```sh
controlplane_ip = <<EOT
Public IP of the control plane loadbalancer: <GCP_EXTERNAL_IP_ADDRESS>

EOT
ingress_ip = <<EOT
Public IP of the ingress service loadbalancer: <GCP_EXTERNAL_IP_ADDRESS>

EOT
installation_check = <<EOT
################################################################################
#          SSH into the admin host and check the installation progress         #
################################################################################

> gcloud compute ssh tfadmin@cluster1-abm-ws0-001 --project=<YOUR_PROJECT> --zone=<YOUR_ZONE>
> tail -f ~/install_abm.log

################################################################################
EOT
```

Use `gcloud compute ssh tfadmin@cluster1-abm-ws0-001 --project=<YOUR_PROJECT> --zone=<YOUR_ZONE>`
to ssh into the admin workstation, and use `tail -f ~/install_abm.log` to monitor
the installation progress. Once it is complete the output in the log file will
be as follows:

> **Note:** The installation process for Anthos on bare metal can take up to 15
> minutes. Upon completion of the Anthos on bare metal installation you will see
> some additional steps being run to configure the Ingress loadbalancer

```sh
...
[2022-04-06 16:43:07+0000] Waiting for node pools to become ready OK
[2022-04-06 16:43:37+0000] Moving admin cluster resources to the created admin cluster
[2022-04-06 16:44:02+0000] Flushing logs... OK
[2022-04-06 16:44:02+0000] Deleting bootstrap cluster... OK

[+] Anthos on bare metal installation complete!
[+] Run [export KUBECONFIG=/home/tfadmin/bmctl-workspace/cluster1/cluster1-kubeconfig] to set the kubeconfig
[+] Run the [/home/tfadmin/login.sh] script to generate a token that you can use to login to the cluster from the Google Cloud Console

[+] Configuring the istio ingress for public access...
[+] Extracting necessary variables from the init.vars file
[+] Fetching the NodePort of the istio-ingress service in the cluster
[+] Firewall ports to be updated: tcp:6444,tcp:443,tcp:30613
[+] Creating the patch file for istio-ingress at: /tmp/ingress-patch.yaml
[+] Patching the istio-ingress service with the external ip: <IP_ADDRESS>
service/istio-ingress patched
[+] Deploying the Point of Sale application manifests
configmap/service-configs created
deployment.apps/api-server created
deployment.apps/payments created
deployment.apps/inventory created
service/api-server-svc created
service/payments-svc created
service/inventory-svc created
[+] Deploying the ingress resource for the Point of Sale application
ingress.networking.k8s.io/pos-ingress created
[+] Updating the Network Endpoint Group (NEG) of the Ingress loadbalancer with the controlPlaneIP:nodePort
[+] Adding network endpoint [instance=cluster1-abm-cp1-001,port=30613] to NEG group [abm-ing-lb-neg]
Attaching 1 endpoints to [abm-ing-lb-neg]....
........done.
[+] Adding network endpoint [instance=cluster1-abm-cp2-001,port=30613] to NEG group [abm-ing-lb-neg]
Attaching 1 endpoints to [abm-ing-lb-neg]....
.........done.
[+] Adding network endpoint [instance=cluster1-abm-cp3-001,port=30613] to NEG group [abm-ing-lb-neg]
Attaching 1 endpoints to [abm-ing-lb-neg]....
........done.
[+] Updating firewall rule allow traffic to the ingress nodePort: tcp:6444,tcp:443,tcp:30613
Updated [https://www.googleapis.com/compute/v1/projects/shabir-gcp-lb-8/global/firewalls/abm-allow-lb-traffic-rule].

[*] Configuring Ingress Loadbalancer complete!
[*] You may reach the services exposed by the ingress at: <IP_ADDRESS>
```
---
### Interacting with the Baremetal cluster

#### Controlplane / API Server

You can find your cluster's `kubeconfig` file on the admin machine in the
`bmctl-workspace` directory _(see logs of the installation for the exact path)_.
Since the `API Server` of the cluster is exposed via the GCP Loadbalancer, the
`kubeconfig` file is configured to use the **Public IP Address** of the
loadbalancer. Thus, you can copy the `kubeconfig` file to your local workstation
and interact with the cluster using `kubectl`.

To verify your deployment, complete the following steps:

1. Copy the contents of `kubeconfig` file to your workstation.
    ```sh
    export CLUSTER_ID=cluster1
    export KUBECONFIG_PATH_IN_ADMIN_VM=/home/tfadmin/bmctl-workspace/$CLUSTER_ID/$CLUSTER_ID-kubeconfig
    ```
    ```sh
    # pick a valid path in your local workstation
    export KUBECONFIG_PATH_IN_LOCAL_WORKSTATION=<SOME_PATH_IN_YOUR_WORKSTATION>/abm-kubeconfig
    export PROJECT=<YOUR_PROJECT>
    export ZONE=<YOUR_ZONE>
    ```
    ```sh
    gcloud compute scp \
        --project=${PROJECT} \
        --zone=${ZONE} \
        tfadmin@${CLUSTER_ID}-abm-ws0-001:${KUBECONFIG_PATH_IN_ADMIN_VM} \
        ${KUBECONFIG_PATH_IN_LOCAL_WORKSTATION}
    ```

2. Set the `KUBECONFIG` environment variable with the path to the cluster's configuration file to run `kubectl` commands on the cluster.
    ```sh
    export KUBECONFIG=$KUBECONFIG_PATH_IN_LOCAL_WORKSTATION
    kubectl get nodes
    ```

You should see the nodes of the cluster printed, _similar_ to the output below:
```sh
NAME                   STATUS   ROLES                  AGE     VERSION
cluster1-abm-cp1-001   Ready    control-plane,master   11m     v1.21.5-gke.1300
cluster1-abm-cp2-001   Ready    control-plane,master   14m     v1.21.5-gke.1300
cluster1-abm-cp3-001   Ready    control-plane,master   11m     v1.21.5-gke.1300
cluster1-abm-w1-001    Ready    worker                 8m35s   v1.21.5-gke.1300
cluster1-abm-w2-001    Ready    worker                 8m38s   v1.21.5-gke.1300
```

#### Ingress Service

As explained earlier, the script sets up an additional loadbalancer to expose
the `istio-ingress` service of the Anthos on bare metal cluster. You can use the
**Public IP Address** of this loadbalancer to access the services deployed in
the cluster.

The installation script deploys a sample application ([Point-of-sale](/anthos-bm-gcp-terraform/resources/manifests/point-of-sale.yaml)) inside the cluster and confgures an
example [`Ingress Rule`](https://github.com/GoogleCloudPlatform/anthos-samples/blob/manuallb/anthos-bm-gcp-terraform/resources/manifests/pos-ingress.yaml). Retreive the IP
address of the ingress loadbalancer from the
[output of the terraform script](#verify-installation). Access the sample
application through the ingress service using this IP address in the browser.

    (click image to enlarge)

#### Interacting with the cluster via the GCP console

During the setup process, your cluster will be auto-registered in Google Cloud using [Connect](https://cloud.google.com/anthos/multicluster-management/connect/overview). In order to interact with the cluster from the GCP console you must first ***login*** to the cluster.

The [Logging into the Anthos bare metal cluster](login.md) explains how you can do it.

---
### Cleanup

- Follow the [same cleanup steps as the quickstart guide](quickstart.md#cleanup).

repository: GoogleCloudPlatform/anthos-samples

gha_language: HCL

repo_name: GoogleCloudPlatform/anthos-samples


text:
---
layout: post
title: Software Craftsmanship Tools
---

Every developer has his/her own set of nifty tools that they cannot do without. I have my own collection of such utility tools that I find indispensable.
Here I'll be maintaining a list of all such tools that I love using during my day to day work as a software developer.
I would love to hear your opinions on these and any tools that you might want to recommend over the ones that I list here.

#### **Text editors**

* [Notepad++](https://notepad-plus-plus.org/)

	I've been using this editor from ages now and have found it to be one of the most flexible and feature rich editors. It comes with support for various plugins which I like the most about it. It is a free tool that runs only on the Windows platform.
* [Visual Studio Code](https://code.visualstudio.com/)

	This is the new kid on the block from the Microsoft stable. It's free and the best part is it supports  all the 3 platforms Windows, Linux and Mac. It also has inbuilt support for Markdown.

#### **IDEs**

* [Visual Studio](https://www.visualstudio.com/)

	Well I find this to be one of the best IDEs out there if you are a .Net developer. I have used a few other IDEs like Eclipse, IntelliJ etc. While each of them offer their own unique and useful features, I find this IDE to be the best in terms of memory usage and performance.