# Tiago Rodrigues > Dipping into programming one toe at a time. Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages ### About this site URL: https://tig.pt/about/ Last updated: 2026-06-30T14:35:16.000Z Tiago Rodrigues is an independent publication launched in June 2026 by Tiago Rodrigues. If you subscribe today, you'll get full access to the website as well as email newsletters about new content when it's available. Your subscription makes this site possible, and allows Tiago Rodrigues to continue to exist. Thank you! ### Access all areas By signing up, you'll get access to the full archive of everything that's been published before and everything that's still to come. Your very own private library. ### Fresh content, delivered Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed. ### Meet people like you Join a community of other subscribers who share the same interests. --- ### Start your own thing Enjoying the experience? Get started for free and set up your very own subscription business using [Ghost](https://ghost.org/?ref=tig.pt), the same platform that powers this website. ### Sobre Tiago Rodrigues URL: https://tig.pt/sobre-mim/ Last updated: 2017-03-07T12:33:09.000Z Chamo-me Tiago Rodrigues tenho 31 anos e sou de Lisboa. Tirei o \*Curso Tecnológico de Informática \*e frequentei a *Licenciatura em Engenharia Informática e Computadores*. Há cerca de 9 anos comecei a interessar-me pela Robótica, desde essa altura comecei a explorar cada vez mais esta área, tendo em 2008 criado o [LusoRobótica](http://lusorobotica.com/?ref=tig.pt "Robótica em Português"), que serviu de veiculo para aprender um enorme conjunto de valências. Em 2009 passei a utilizar a plataforma OS X tendo sido um marco muito importante na minha vida, tanto a nível de produtividade no meu dia-a-dia, como na forma como olho para o mercado e os seus produtos de uma forma geral. Em 2011 o meu grande amigo [Tiago Silva](https://twitter.com/mermerchin?ref=tig.pt) convidou-me para criar com ele o [LusoBit](http://lusobit.com/?ref=tig.pt), onde temos feito algum desenvolvimento e experimentação para iOS, melhorando os conhecimentos de Objective-C assim como explorando o ecossistema da AppStore. Tenho lido e estudado bastante, adquirindo muitos conhecimentos quer de forma auto-didacta quer em formações e experiência profissional, contudo não poderia deixar de referir alguns livros como o [4-Hour Workweek](http://www.amazon.com/The-4-Hour-Workweek-Anywhere-Expanded/dp/0307465357/ref=sr%5F1%5F1?ie=UTF8&qid=1346967936&sr=8-1&keywords=four+hour+work+week&ref=tig.pt), [Free](http://www.amazon.com/Free-Smartest-Businesses-Something-Nothing/dp/B0043RT912?ref=tig.pt), [The Millionaire Next Door](http://www.amazon.com/Millionaire-Next-Thomas-Stanley-Ph-D-ebook/dp/B00CLT31D6/ref=sr%5F1%5F1?s=books&ie=UTF8&qid=1439223307&sr=1-1&keywords=the+millionaire+next+door&ref=tig.pt), [Getting Things Done](http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/ref=sr%5F1%5F1?s=books&ie=UTF8&qid=1346968107&sr=1-1&keywords=GTD&ref=tig.pt) e [Blue Ocean Strategy](http://www.amazon.com/Blue-Ocean-Strategy-Uncontested-Competition/dp/1591396190/ref=sr%5F1%5F1?s=books&ie=UTF8&qid=1346968141&sr=1-1&keywords=blue+ocean+strategy&ref=tig.pt) que aconselho a todos os leitores deste site. **Dos vastos conhecimentos destaco experiência nas plataformas:** [SMF](http://www.simplemachines.org/?ref=tig.pt), [PrestaShop](http://www.prestashop.com/?ref=tig.pt), [WordPress](http://wordpress.org/?ref=tig.pt), [Magento](http://www.magentocommerce.com/?ref=tig.pt), [Primavera SaaS](http://www.primaverabss.com/SaaS/?ref=tig.pt), [Odoo](https://www.odoo.com/?ref=tig.pt), [iOS](http://developer.apple.com/iphone/?ref=tig.pt) **Softwares que recomendo:** [Things](https://tig.pt/things-gestor-tarefas-mac/ "Things – Gestor de Tarefas para Mac"), [1Password](https://agilebits.com/onepassword?ref=tig.pt), [MoneyWiz](http://www.silverwiz.com/?ref=tig.pt), [Prepo](http://wearemothership.com/work/prepo/?ref=tig.pt), [PaintCode](http://www.paintcodeapp.com/?ref=tig.pt) ### Contacto URL: https://tig.pt/contacto/ Last updated: 2012-11-22T19:44:14.000Z Sempre disponível para discutir qualquer assunto, contate-me pelo formulário a baixo, quer seja para agradecer algum dos meus artigos, criticar, denunciar um erro ou fazer-me uma proposta de negócio. ### Formulário de Contactos: O seu nome (obrigatório) O seu e-mail (obrigatório) Assunto A sua mensagem ### iOS Apps URL: https://tig.pt/ios-apps/ Last updated: 2019-06-28T10:49:55.000Z ## Check my iOS Apps - EuroGroup for Euromillions [![](https://is4-ssl.mzstatic.com/image/thumb/Purple128/v4/15/77/48/1577488e-54a2-ce19-863d-e2060ddfcca1/AppIcon-1x_U007emarketing-85-220-5.png/246x0w.jpg)](https://itunes.apple.com/app/id1022011026?ref=tig.pt) **One of my most recent apps that lets you check the EuroMillions draw's result.** Get the latest euromillions results seconds after the the draw! Check the prizes breakdown to see how much did you won. EuroGroup can sit on your today widget screen and on your Apple Watch so you don't need to to open the app to check the latest results. Also see it daily so you remember to play :) The app allows you to check previous euromillions draw's results, not just the last one. [Free Download](https://itunes.apple.com/us/app/eurogroup-for-euromillions/id1022011026?mt=8&at=11lMf3&ct=blog&ref=tig.pt) # LoL Counter for League of Legends [![](http://is1.mzstatic.com/image/thumb/Purple71/v4/ed/f2/58/edf25829-3a23-45fa-596e-c691400c87cd/source/175x175bb.jpg)](https://itunes.apple.com/us/app/lol-counter-for-league-of-legends/id818442340?mt=8&at=11lMf3&ct=blog&ref=tig.pt) **One of my sandbox of Objective-C. I've learned a lot doing this app and optimizing it for speed, with a lot of web resources and considerable data do manage.** LoLCounter lets you quickly check your counter picks when playing League of Legends and allow you to check witch champions are good against each others. League of Legends Counterpick and Synergy list for every champion! Gives advice on how to counter champions in LoL [Free Download](https://itunes.apple.com/us/app/lol-counter-for-league-of-legends/id818442340?mt=8&at=11lMf3&ct=blog&ref=tig.pt) # PZmap [![](http://is5.mzstatic.com/image/thumb/Purple4/v4/bf/b0/d8/bfb0d8bf-0425-6d2b-cdff-230e3add02b9/source/175x175bb.jpg)](https://itunes.apple.com/us/app/pzmap/id666333124?mt=8&at=11lMf3&ct=blog&ref=tig.pt) **One of my first apps, its simply almost just a WebViewController** PZmap allows you to see Project Zomboid Map on the go. This is a project of Benjamin Schieder and you can know more about it at his website. [http://pzmap.crash-override.net](http://pzmap.crash-override.net/?ref=tig.pt) [Free Download](https://itunes.apple.com/us/app/pzmap/id666333124?mt=8&at=11lMf3&ct=blog&ref=tig.pt) # RummyScore [![](http://is2.mzstatic.com/image/thumb/Purple/v4/92/7b/78/927b788a-ea30-7e73-67b5-f510c015424f/source/175x175bb.jpg)](https://itunes.apple.com/us/app/rummyscore/id471627462?mt=8&at=11lMf3&ct=blog&ref=tig.pt) **RummyScore was the first app I published on the appstore, and it is a simple counter.** Rummy Score is a application designed to help Rummy cards Game players. [Free Download](https://itunes.apple.com/us/app/rummyscore/id471627462?mt=8&at=11lMf3&ct=blog&ref=tig.pt) # Há Greve? [![](http://is2.mzstatic.com/image/thumb/Purple/v4/26/47/31/264731c7-b670-d859-9158-76b23266092f/source/175x175bb.jpg)](https://itunes.apple.com/us/app/h%C3%A1-greve/id515833945?mt=8&at=11lMf3&ct=blog&ref=tig.pt) **Isn't actually mine. My fried [Filipe Cabecinhas](https://twitter.com/filcab?ref=tig.pt) made this app and asked me to publish since he don't have an Apple Developer account.** Is there a strike disrupting your commute to work? Use this application to check the hagreve.com website and get up to date with the latest information about transportation strikes in Portugal. You can also alert your followers by tweeting a strike warning. Keep yourself up to date with “Há Greve?” Check for strikes even without an internet connection. [Free Download](https://itunes.apple.com/us/app/h%C3%A1-greve/id515833945?mt=8&at=11lMf3&ct=blog&ref=tig.pt) ### Websites URL: https://tig.pt/websites/ Last updated: 2021-06-09T11:32:36.000Z Here is the list of the websites I've been working on. # This page is under construction... #### [LusoRobótica](https://lusorobotica.com/?ref=tig.pt) ### EuroMillions-- URL: https://tig.pt/euromillions/ Last updated: 2017-07-24T16:27:27.000Z This is EuroMillions-- iOS app about page. ![](https://tig.pt/content/images/2017/07/app_icon.jpg) Under construction ![](https://tig.pt/content/images/2017/07/Simulator-Screen-Shot-24.07.2017--17.21.15.png) ### You are Offline URL: https://tig.pt/offline/ Last updated: 2019-07-01T14:11:54.000Z Woops! Looks like you are offline. You can just wait, I will tell you when you are back online. 😃 ### Mac Install specific version of Node URL: https://tig.pt/mac-install-specific-version-of-node/ Last updated: 2020-08-04T09:29:34.000Z If you, like me, are working on multiple projects of Node, big projects that you can't just use the latest version of Node in all of them, you need to manage how to have multiple versions of Node on your Mac. You can install a specific version of Node, or multiple versions of Node with [NVM](https://github.com/nvm-sh/nvm?ref=tig.pt). If you have brew you can install it with: `brew install npm` Alternatively, you can install it directly: `curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash` Be careful if you hare behind a proxy you may have problems with your internet connection to some of these sources. After installation is done, you can open a new terminal window and run `nvm install v12.3.1` to install version 12.3.1 or any other version. Check available versions with `nvm ls-remote` After installation is done, you can switch node version with `nvm use v12.3.1` Run `node -v` to confirm everything is ok. ### AWSary URL: https://tig.pt/awsary/ Last updated: 2023-01-04T11:55:35.000Z AWSary makes creating AWS Cloud Architecture diagrams a breeze. Quickly access AWS service logos & drag-and-drop to design professional diagrams. Perfect for AWS Cloud Consultants & Solution Architects. Download now and streamline your diagramming process! Regarding Privacy, this application only access website to retrive a JSON with all the services names and images to load, then store all offline for future use without need for internet connection. No data is collected about users or application use. ![](https://tig.pt/content/images/2023/01/Simulator-Screen-Shot---iPhone-14-Plus---2023-01-04-at-11.34.37.png) ### AWSary Privacy Policy URL: https://tig.pt/awsary-privacy/ Last updated: 2023-08-02T18:07:00.000Z This policy applies to all information collected or submitted on AWSary's website and our apps for iPhone and any other devices and platforms. ## Information we collect AWSary collect no personal user data. We don’t send promotional emails. ### ****Technical basics** Our server software may store basic technical information, such as your IP address, in temporary memory or logs. AWSary uses the following hosting and service providers, which also have access to basic technical information passing through their services and data stored using their resources: - [Apple](https://www.apple.com/?ref=tig.pt) ([Privacy policy](https://www.apple.com/legal/privacy/?ref=tig.pt)) - [Amazon Web Services](https://aws.amazon.com/?ref=tig.pt) ([Privacy policy](https://aws.amazon.com/privacy/?ref=tig.pt)) ### ****Ads and analytics** AWSary's app collects aggregate, anonymous statistics, such as the percentage of users who use particular features, to improve the app. We show no Ads to our users. ## Information usage We use the information we collect to operate and improve our website, apps, and customer support. We do not share personal information with outside parties except to the extent necessary to accomplish AWSary's functionality. ## Security We implement a variety of security measures to help keep your information secure. For instance, all communication with the app and website requires HTTPS with certificate pinning. ## Accessing, changing, or deleting information Deleted information may be kept in backups for up to 90 days. Backups are encrypted and are only accessed if needed for disaster recovery. ## Third-party links and content AWSary displays links and content from third-party websites sites. These have their own independent privacy policies, and we have no responsibility or liability for their content or activities. ## Children’s Online Privacy Protection Act Compliance We never collect or maintain information at our website from those we actually know are under 13, and no part of our website is structured to attract anyone under 13. ## Information for European Union Customers By using AWSary and providing your information, you authorize us to collect, use, and store your information outside of the European Union. ## International Transfers of Information Information may be processed, stored, and used outside of the country in which you are located. Data privacy laws vary across jurisdictions, and different laws may be applicable to your data depending on where it is processed, stored, or used. ## Your Consent By using our site or apps, you consent to our privacy policy. ## Contacting Us If you have questions regarding this privacy policy, you may email [mail@tig.pt](mailto:mail@tig.pt). ## Changes to this policy If we decide to change our privacy policy, we will post those changes on this page. Summary of changes so far: - **August 02, 2023:** First published. ### AAI - AWS Authorized Instructor URL: https://tig.pt/aai/ Last updated: 2024-11-04T16:30:54.000Z As an AWS Authorized Instructor (AAI), I am certified and empowered to deliver comprehensive AWS training programs that help individuals and organizations deepen their understanding of cloud technologies. This certification ensures that I bring expert knowledge, real-world experience, and engaging instruction to the classroom. By guiding my students through AWS training, I aim to accelerate their cloud journey, equipping them with the skills and confidence to excel in cloud-based roles and projects. Below, you’ll find a detailed list of all the trainings I am authorized to deliver, each designed to support learning and career growth in the AWS ecosystem. I deliver these trainings in English 🇬🇧, Portuguese 🇵🇹 or Spanish 🇪🇸, but my company offer other languages options like German 🇩🇪. [Book them Here](https://www.tecracer.com/en/training/overview-training-dates/?ref=tig.pt#/en/classes). ## Posts ### Terraform AWS IAM Role Errors DNS URL: https://tig.pt/terraform-aws-iam-role-errors-dns/ Last updated: 2024-03-15T10:41:45.000Z This is not the first time, and if you are out there and seeing a similar error, this may be the soltuion you are looking for. ``` terraform plan Planning failed. Terraform encountered an error while generating this plan. ╷ │ Error: configuring Terraform AWS Provider: IAM Role (arn:aws:iam::111222333444:role/YourRole) cannot be assumed. │ │ There are a number of possible causes of this - the most common are: │ * The credentials used in order to assume the role are invalid │ * The credentials do not have appropriate permission to assume the role │ * The role ARN is not valid │ │ AWS Error: operation error STS: AssumeRole, https response error StatusCode: 0, RequestID: , request send failed, Post "https://sts.eu-central-1.amazonaws.com/": dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host │ │ │ with provider["registry.terraform.io/hashicorp/aws"], │ on _provider.tf line 1, in provider "aws": │ 1: provider "aws" { │ ╵ ╷ │ Error: configuring Terraform AWS Provider: IAM Role (arn:aws:iam::111222333444:role/YourRole) cannot be assumed. │ │ There are a number of possible causes of this - the most common are: │ * The credentials used in order to assume the role are invalid │ * The credentials do not have appropriate permission to assume the role │ * The role ARN is not valid │ │ AWS Error: operation error STS: AssumeRole, https response error StatusCode: 0, RequestID: , request send failed, Post "https://sts.eu-central-1.amazonaws.com/": dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host │ │ │ with provider["registry.terraform.io/hashicorp/aws"].dev, │ on _provider.tf line 18, in provider "aws": │ 18: provider "aws" { ``` All my logins where right, I was using them all along, even more, I have a differnt CLI window open on my computer with the same login working just fine. Then my eyes glased at something: ``` dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host ``` Hum, no such host? port 53 ? is this a DNS error? I quickly changed my DNS from the default ISP (shame on you Altice) to CloudFlare ones: ``` 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001 ``` Guess what, problem solved, my Terraform is working again, it was not an IAM error at all, it was all about the DNS caches on my ISP. Next time you see a STS error, consider changing your DNS to a different provider and may save you some unicorn hunt.x ### New AWS Game on AWSary v1.4.0 URL: https://tig.pt/new-aws-game-on-awsary-v1-4-0/ Last updated: 2024-02-05T13:40:14.000Z 🚀 Exciting News Alert! 🚀 I'm thrilled to announce the latest update to our AWSary mobile app - introducing a brand new feature that takes learning about AWS services to a whole new level: the AWSary Logo Challenge Game! 🎮💡 At AWS re:invent 2023 [Guillermo Ruiz](https://www.linkedin.com/in/gruizesteban/?ref=tig.pt) challenged me to tweak my app and add a game so he can use on AWS Summits and Cloud Days. "Do you want to get a t-shirt or socks, well you have 5 attempts to guess the AWS service name just looking at its logo." In this fun and engaging game, you'll be put to the test as you're challenged to recall AWS service names just by looking at their logos. It's a fantastic way to sharpen your AWS knowledge while having a blast! Whether you're new to AWS or a seasoned pro, the AWSary Logo Challenge Game offers something for everyone. It's a fantastic addition to our app, designed to make learning about AWS services more enjoyable and memorable. Download the latest update of AWSary today on the App Store - let's see who's the ultimate AWS expert! 💪🔥 [‎AWSary - AWS Dictionary‎AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you’ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you’ll have access t…![](https://apps.apple.com/favicon.ico)App StoreTiago Rodrigues![](https://is1-ssl.mzstatic.com/image/thumb/Purple126/v4/40/af/36/40af36aa-cae8-ff40-1c6f-fc57b851bd0d/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png)](https://apps.apple.com/us/app/awsary-aws-dictionary/id1634871091?ref=tig.pt) ### Yet another AWS Terraform Backend on S3 + DynamoDB URL: https://tig.pt/yet-another-aws-terraform-backend-on-s3-dynamodb/ Last updated: 2024-02-03T08:58:30.000Z Every time I start an AWS project, I have the same issue, what Terraform backend to use? I love the [AWS S3 + DynamoDB](https://developer.hashicorp.com/terraform/language/settings/backends/s3?ref=tig.pt) backend solution but this just covers the basics, you want your Terraform State to be protected from client misbehavior or human error. Yes, I've been on the end of the call where the customer used [cloud-nuke](https://github.com/gruntwork-io/cloud-nuke?ref=tig.pt) against the Terraform S3 bucket and we got a drift for the whole project. (yes I managed to import and recreate .tfstate for 500+ resources of the landing zone + applications accounts) So every time I start a new project I hope to find some simple module that gives some extra protection as the S3 version enabled, deletion protection policy, object lock, DynamoDB table with point-in-time recovery, kms encryption, and so on. Today I decided to make yet another attempt at solving this well, hope it is beneficial for others as well and that we can over time keep improving this module. [https://registry.terraform.io/modules/tigpt/remote-state-s3-dynamodb-backend/aws/latest](https://registry.terraform.io/modules/tigpt/remote-state-s3-dynamodb-backend/aws/latest?ref=tig.pt) Let's break it down on how to use it: ```Terraform module "remote-state-s3-dynamodb-backend" { source = "tigpt/remote-state-s3-dynamodb-backend/aws" version = "1.0.1" name = "my-terraform-backend" tags = { terraform = "true" } } ``` So you call the module with source and pin a version, of course. Then you name it, this should have some project related name, example business unit or account, I like to name something like `landingzone` or `network-production`, even `application-dev`. You can as well pass some tags because everyone loves tags and they are an important asset. Let's break out the module into parts: ```Terraform ├── dynamodb.tf ├── outputs.tf ├── random.tf ├── s3.tf ├── variables.tf └── versions.tf ``` Each file should be self-explanatory, but let's dig into them, DynamoDB first. ```Terraform ############################# #--- DynamoDB State Lock ---# ############################# module "dynamodb_table" { source = "terraform-aws-modules/dynamodb-table/aws" version = "4.0.0" name = "tf-${var.name}-${random_integer.random.id}-locktable" hash_key = "LockID" attributes = [ { name = "LockID" type = "S" } ] deletion_protection_enabled = true point_in_time_recovery_enabled = true server_side_encryption_enabled = true server_side_encryption_kms_key_arn = aws_kms_key.dynamodb.arn tags = merge( var.tags, { "Name" = format("%s", var.name) }, ) } resource "aws_kms_key" "dynamodb" { description = "KMS key is used to encrypt bucket objects" deletion_window_in_days = 7 tags = merge( var.tags, { "Name" = format("%s", var.name) }, ) } ``` I love the [Terraform AWS modules](https://registry.terraform.io/namespaces/terraform-aws-modules?ref=tig.pt) so we leverage them as much as possible to make the DynamoDB table, we then add some naming conventions to the input `name` that comes from the `variables.tf` as well as a random generated from `random.tf` to make sure names are unique (especially important for S3). Then it's time to configure deletion\_protection, point\_in\_time\_recovery as well as encritpions with KMS key that we create. Next the `s3.tf` ```Terraform ########################### #--- S3 Backend Bucket ---# ########################### module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" version = "4.1.0" bucket = "tf-${var.name}-${random_integer.random.id}-state" acl = "private" object_lock_enabled = true control_object_ownership = true object_ownership = "ObjectWriter" attach_deny_incorrect_kms_key_sse = true allowed_kms_key_arn = aws_kms_key.objects.arn server_side_encryption_configuration = { rule = { apply_server_side_encryption_by_default = { kms_master_key_id = aws_kms_key.objects.arn sse_algorithm = "aws:kms" } } } force_destroy = true versioning = { enabled = true } attach_policy = true policy = < `Amplify Hosting` \-> `Get started` (If you don't see this screen, the options are: `New App` \-> `Host web app` ) ![](https://tig.pt/content/images/2022/11/image-3.png) ![](https://tig.pt/content/images/2022/11/image-2.png) 6\. `GitHub` ![](https://tig.pt/content/images/2022/11/image-4.png) 7\. Select your repo (if first time, you need to give autorizaiton) ![](https://tig.pt/content/images/2022/11/image-5.png) 8\. Select Branch `main` ![](https://tig.pt/content/images/2022/11/image-6.png) 9\. Next -> Next -> Next 10\. `Save and Deploy` Your Website will apear building ![](https://tig.pt/content/images/2022/11/image-7.png) When Finished you will see it complete and you can click the temporary URL to access it. You can later associate a pretty domain name. ![](https://tig.pt/content/images/2022/11/image-8.png) # You Have Done It 🥳🎉 ### AWS at Future.works 2022 URL: https://tig.pt/future-works-2022/ Last updated: 2023-01-09T17:07:13.000Z Last week, I had the opportunity to participate in a job fair as a speaker. I was invited to speak about the topic of my choice and I couldn't resist to talk about AWS - Big Data and how businesses can leverage AWS cloud services to collect and analyze it. As someone who is passionate about the power of big data and its potential to transform businesses, I was excited to share my knowledge and experience with the attendees. My talk focused on the use of AWS S3, AWS Glue, and AWS Athena to extract business insights from millions of records at an affordable price. I demonstrated how these tools can be used to quickly and easily access and query large datasets, providing valuable insights that can inform business decisions and drive growth. The attendees were highly engaged and had many questions about the practical applications of these tools, and it was great to see so much interest in the topic. To show how fast you can do it with your business data, I finished with a live demo on AWS Console, from data on S3 a few minutes after, we cloud do SQL query on Amazon Athena and get results in seconds. Overall, it was an incredible experience to be a part of the job fair and to share my knowledge with others. I am already looking forward to next year's event and the opportunity to continue sharing my passion for big data and AWS with others. Here is the slide deck and some photos. [ FW Tiago Rodrigues BigData Big Data It’s all around us, use AWS Cloud to start collecting and analysing it. F.W Tiago Rodrigues - BigData.pdf 6 MB download-circle ](https://tig.pt/content/files/2023/01/F.W-Tiago-Rodrigues---BigData.pdf "Download") ![](https://tig.pt/content/images/2023/01/20221008_FutureWorks_112-1.JPG) ![](https://tig.pt/content/images/2023/01/20221008_FutureWorks_114.JPG) ![](https://tig.pt/content/images/2023/01/20221008_FutureWorks_119.JPG) ![](https://tig.pt/content/images/2023/01/20221008_FutureWorks_122.JPG) ![](https://tig.pt/content/images/2023/01/IMG_6284-2.jpeg) ### AWS Authorized Instructor URL: https://tig.pt/aws-authorized-instructor/ Last updated: 2023-01-13T17:01:41.000Z Achieving the AAI: AWS Authorized Instructor Certification I am thrilled to announce that I have achieved the AAI: AWS Authorized Instructor certification. This may not mean much on its own, but in the context of my career and personal goals, it means a lot to me. I have always loved to learn and to share what I've learned with others. I believe that knowledge is one of the biggest levers we have, and achieving authorization from AWS to share my knowledge with others is the cherry on top of the cake. Over the last year, I have learned a lot about AWS and shared as much as possible with my friends, clients, and colleagues, but in an informal way. Now, with the AAI certification, I will be able to provide proper training. This was only possible thanks to my tecRacer colleagues. The Train the Trainer program was incredibly helpful, and the AWS study materials and tips on how to manage a classroom, create the right environment for students to learn, and ask questions, helped me get here. The assessment was really difficult, but the environment was perfect: friendly and chill, but at the same time, super assertive and demanding. I learned so much preparing for this and during the assessment. I can't wait to deliver my first AWS training to clients and start applying everything I've learned. Once again, a new journey is just beginning. It's time to give back to the community that helped me to get here. I am excited to continue learning and sharing my knowledge with others through proper training and certification. I would like to thank tecRacer and AWS for providing me with the tools and resources to achieve this certification and for supporting me throughout the journey. [Authorized Instructor was issued by Amazon Web Services Training and Certification to Tiago Rodrigues.Earners of this badge have developed the skills and credentials they need to successfully and confidently deliver an AWS Training & Certification course.![](https://www.credly.com/favicon.ico)Credly![](https://images.credly.com/images/df83f35a-8628-4baa-8a30-f5c03b3b53cf/linkedin_thumb_image.png)](https://www.credly.com/badges/21b89fd9-5e96-44ff-bf66-85562385a14f/public%5Furl?ref=tig.pt) ### AWS Learning: Object Storage URL: https://tig.pt/aws-learning-object-storage/ Last updated: 2023-01-13T16:25:43.000Z Making the Most of My Time: Learning on the Go at the Airport Sitting at the airport, waiting for my Lufthansa flight, I had booked business class (yes, it was cheaper than booking economy flights for some reason) and I found myself in the lounge room with comfortable seats, great food and a lot of spare time. Instead of wasting my time watching another action movie or TV show, I decided to appreciate this time and dedicate it to myself. What better way to do that than by studying and learning new things? Investing in yourself is one of the best things you can do, and I knew that my spare time at the airport was the perfect opportunity to do just that. So, I logged into AWS Skillbuilder and went for the "AWS Learning: Object Storage" module. I've used S3 in the past, but there's always some details that you never used. I realized that I learned a few new things that I was not expecting and was able to finish the assessment and get the "AWS Learning: Object Storage" badge. I felt super productive for using this spare time for learning instead of watching another action movie or TV show. This experience made me realize that we all have spare time that we can use to learn new things and improve ourselves. Next time you find yourself at the airport, think about this and go for an AWS assessment! Try it, you'll be surprised how much you can learn in a short amount of time. In conclusion, I encourage all of you to make the most of your spare time, no matter where you are. Learning is a lifelong process and any time is a good time to invest in yourself. So next time you find yourself at the airport, remember that you can use that time to learn new things and improve yourself. Try it and you will be surprised how much you can learn in a short amount of time. [AWS Learning: Object Storage was issued by Amazon Web Services Training and Certification to Tiago Rodrigues.Earners of this badge have developed the technical skills and knowledge of AWS storage services with a focus on Amazon Simple Storage Service (S3).![](https://www.credly.com/favicon.ico)Credly![](https://images.credly.com/images/100511fc-a919-4c0c-b313-7f49b6d09ef6/linkedin_thumb_image.png)](https://www.credly.com/badges/562e4287-baf3-4247-995e-e879c9e19dfb/public%5Furl?ref=tig.pt) ### AWS User Group Lisbon - 2022 URL: https://tig.pt/aws-user-group-lisbon-2022/ Last updated: 2023-01-09T22:21:04.000Z It was great to see the AWS user group Lisbon kick off again this week after a long hiatus due to Covid-19\. I and my tecRacer colleagues took the lead in hosting the event, and it was a pleasure to see the room full once again. We were fortunate to have Bruno Quintas from AWS join us as a speaker, discussing the topic of "API Gateway+Lambda Custom Authentication." Additionally, I had the opportunity to present on the topic of "Solving persistence in modern container-based architectures." It was fantastic to see so much engagement and interest from the attendees. The goal of the AWS user group Lisbon is to bring the AWS community in Portugal together and to have more frequent meetups where we can learn from experts and share our experiences and ideas about what can be achieved with the power of AWS cloud. It was great to see some new faces at the event, a sign that AWS is continuing to grow in Lisbon. Overall, it was a fantastic event, complete with popcorn and pizza to set the mood. But more importantly, it was the people that made it truly special, and I'm happy to see the community coming together again. Here's to many more successful user groups in the future! My slide deck: [ Containers AWS User Group Solving persistence in modern container based architectures Tiago Rodrigues's slide deck Containers-AWS\_User\_Group-Solving\_persistence\_in\_modern\_container-based\_architectures.pdf 1 MB download-circle ](https://tig.pt/content/files/2023/01/Containers-AWS%5FUser%5FGroup-Solving%5Fpersistence%5Fin%5Fmodern%5Fcontainer-based%5Farchitectures.pdf "Download") Some Pictures: ### AWS Summit Madrid 2022 URL: https://tig.pt/aws-summit-madrid-2022/ Last updated: 2023-01-13T16:45:28.000Z AWS Summit Madrid 2022: A Great Event and an Amazing Experience This week was the AWS Summit Madrid 2022 and it was an incredible event. It's the time of the year that we celebrate AWS on the Iberian peninsula and tecRacer's Portugal branch needed to be there in strength. There were a lot of good learning sessions, plenty of incredible Amazonians, AWS partners as well as clients. I decided to apply for the AWS DeepRacer competition and to my surprise, we managed to come in first place. DeepRacer is a great way to start learning about Machine Learning and how to train a model. It's so easy to create an empty for the model that we are training in the car and tweak it here and there, since we are used to being drivers on cars for years. The party was incredible and the networking was amazing. We had a lot of fun and I can't wait for the next year's event. It was an amazing experience. Since I was in Madrid, I was able to have dinner with some friends from El Corte Inglés and watch the incredible game of Real Madrid for the Champions League. I'm not a football fan, but it was an amazing game. To top it off, we won a DeepRacer car and everything. What an amazing event! Overall, the AWS Summit Madrid 2022 was a great event and I had a lot of fun. I'm looking forward to next year's event and I'm sure it will be just as great. I would like to thank AWS and tecRacer for organising such an incredible event and for giving us the opportunity to learn, network, and have fun. I would also like to thank my friends from El Corte Inglés for the dinner and the game of Real Madrid for the Champions League, it was an amazing experience. ![](https://tig.pt/content/images/2023/01/IMG_5531.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5524-1.JPG) ![](https://tig.pt/content/images/2023/01/IMG_5516.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5508.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5462.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5459.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5456.jpeg) ![](https://tig.pt/content/images/2023/01/IMG_5433.jpeg) ### AWS Certified Solutions Architect – Associate Exame URL: https://tig.pt/aws-certified-solutions-architect-associate-exame/ Last updated: 2023-01-13T16:28:23.000Z Conquering the AWS Certified Solutions Architect – Associate Exam I am thrilled to announce that I have successfully passed the AWS Certified Solutions Architect – Associate exam. Despite having used the AWS cloud for a few years, I found this exam to be quite challenging. English is not my native language, and I felt that the time given to complete the exam was short. Additionally, during the reading of the questions and the multiple answers, I found myself struggling with the tiny details of the answers. However, I am proud to say that I passed the exam and I attribute my success to the incredible onboarding that tecRacer provided me with. The reinforcement of my knowledge over the last month was instrumental in helping me pass this exam. The AWS Certified Solutions Architect – Associate exam is designed to test your knowledge of the AWS platform and its services. The exam covers a wide range of topics, including designing, deploying, and managing applications on the AWS platform. Passing this exam is a great accomplishment for me, and I am excited to continue learning and growing within the AWS ecosystem. I would like to recommend this exam to everyone working with AWS. It's a great way to validate your knowledge and skills, and it's a valuable addition to your resume. If you are thinking about taking this exam, I suggest you start preparing well in advance, and take advantage of the resources available to you, such as the AWS documentation and the training offered by tecRacer. In conclusion, passing the AWS Certified Solutions Architect – Associate exam was a challenging but rewarding experience for me. I am grateful for the support and guidance provided by tecRacer, and I am excited to continue my journey towards becoming an AWS expert. I highly recommend this exam to anyone working with AWS, it is a great way to validate your knowledge and skills and it is a valuable addition to your resume. [AWS Certified Solutions Architect – Associate was issued by Amazon Web Services Training and Certification to Tiago Rodrigues.Earners of this certification have a comprehensive understanding of AWS services and technologies. They demonstrated the ability to build secure and robust solutions using architectural design principles based on customer requirements. Badge owners are able to strategically design well-architected d…![](https://www.credly.com/favicon.ico)Credly![](https://images.credly.com/images/0e284c3f-5164-4b21-8660-0d84737941bc/linkedin_thumb_image.png)](https://www.credly.com/badges/5d75f85e-1239-481c-a0fb-8097171e4a60/public%5Furl?ref=tig.pt) ### AWS Certified Cloud Practitioner Exam URL: https://tig.pt/aws-certified-cloud-practitioner-exam/ Last updated: 2023-01-13T16:27:50.000Z Achieving Success: Passing the AWS Certified Cloud Practitioner Exam I am thrilled to announce that I have successfully passed the AWS Certified Cloud Practitioner exam. While some may not see much value in this certification, I believe that it is a significant milestone on my journey towards becoming an AWS expert. The AWS Certified Cloud Practitioner exam may be more accessible in terms of technical knowledge required, but it is also the most broad one. To prepare for the exam, I had to familiarize myself with a wide range of AWS services, some of which I had never heard of before. This process of studying for the exam not only helped me pass, but also exposed me to new services and possibilities within the AWS platform. Some people may think that this certification is not that important, but I believe that it is a very valuable tool for anyone who wants to know more about AWS and the cloud in general. This certification is designed to test your knowledge of the fundamental concepts of AWS and it will help you to understand the basics of the platform. Passing this exam was a nice experience, it was definitely worth the effort. I am proud of myself for accomplishing this goal and I am excited to continue learning and growing within the AWS ecosystem. I would like to thank all my colleagues who supported me throughout this process. I would also like to recommend this certification to anyone who wants to learn more about AWS and the cloud in general. It's a great way to get started and it's a good starting point for anyone who wants to pursue a career in the cloud. In conclusion, passing the AWS Certified Cloud Practitioner exam is a great accomplishment for me, and I am excited to continue this journey towards becoming an AWS expert. With this certification under my belt, I feel confident and ready to take on new challenges and opportunities within the AWS ecosystem. [AWS Certified Cloud Practitioner was issued by Amazon Web Services Training and Certification to Tiago Rodrigues.Earners of this certification have a fundamental understanding of IT services and their uses in the AWS Cloud. They demonstrated cloud fluency and foundational AWS knowledge. Badge owners are able to identify essential AWS services necessary to set up AWS-focused projects.![](https://www.credly.com/favicon.ico)Credly![](https://images.credly.com/images/00634f82-b07f-4bbd-a6bb-53de397fc3a6/linkedin_thumb_image.png)](https://www.credly.com/badges/0ec2c8a8-cd34-4071-981d-6e4a78c19e03/public%5Furl?ref=tig.pt) ### Start at tecRacer URL: https://tig.pt/start-at-tecracer/ Last updated: 2023-01-13T15:53:37.000Z Exciting times ahead as I join tecRacer, a cloud consulting company that is focused on training and I feel a great culture vibe. I am thrilled to be taking this step in my journey towards becoming an AWS expert. Joining a new company can be daunting, but I am confident that tecRacer is the perfect place for me to grow my skills and advance my career. The company's focus on training is particularly appealing to me, as it will provide me with the opportunity to learn from some of the best in the industry and stay up to date on the latest developments in the field. In addition to the professional growth opportunities, I am also looking forward to being a part of tecRacer's great culture. The company's emphasis on a positive working environment and strong sense of community is something that I believe will make for a truly enjoyable and fulfilling experience. As I embark on this new chapter, I am eager to see what the future holds for me at tecRacer. I am confident that this will be a valuable and rewarding experience, and I am excited to be a part of such a dynamic and innovative company. I am excited to be a part of this amazing team and to continue to learn and grow with the company. I look forward to the new challenges and opportunities that come with this exciting new journey and I am ready to tackle them head-on. ### Enable PWA on Ghost blog URL: https://tig.pt/ghost-pwa/ Last updated: 2019-07-01T15:12:31.000Z [PWA](https://developers.google.com/web/progressive-web-apps/?ref=tig.pt) is not a new concept but a lot of websites don't implement it yet. I was recently invited to a Google Mobile Summit where [Luis Dinís](http://linkedin.com/in/luiscdinis?ref=tig.pt) among others have shown me the light about PWA, AMP, and other mobile technologies. It was so easy to implement PWA (at least the bare minimum) that I wanted to share it back to help other implements it too. # Create an offline page First of all, its recommended to create an offline webpage. The Service Worker will redirect the visitors here if there are internet connection issues. ![](https://tig.pt/content/images/2019/07/Ghost-Offline-page.png) Ghost Offline Page # Create the Service Worker I didn't have any Service Worker knowledge so take that into consideration. Basically, my `sw.js` was glued together from different examples I found. ``` const cacheName = 'blogCache'; const offlineUrl = '/offline/'; /** * The event listener for the service worker installation and cache the offline page. */ self.addEventListener('install', event => { event.waitUntil( caches.open(cacheName) .then(cache => cache.addAll([ offlineUrl ])) ); }); /** * Is the current request for an HTML page? * @param {Object} event */ function isHtmlPage(event) { return event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'); } /** * Fetch and cache any results as we receive them. */ self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request) .then(response => { // Only return cache if it's not an HTML page if (response && !isHtmlPage(event)) { return response; } return fetch(event.request).then( function (response) { // Dont cache if not a 200 response if (!response || response.status !== 200) { return response; } let responseToCache = response.clone(); caches.open(cacheName) .then(function (cache) { cache.put(event.request, responseToCache); }); return response; } ).catch(error => { // Check if the user is offline first and is trying to navigate to a web page. If so serve offline page. if (isHtmlPage(event)) { return caches.match(offlineUrl); } }); }) ); }); ``` # You also need a Manifest.json Not all the fields are required and you can find more information about it on [Google Manifest Page](https://developers.google.com/web/fundamentals/web-app-manifest/?hl=es&ref=tig.pt) ``` { "name": "Tiago Rodrigues", "short_name": "TigPT", "description": "Dipping into programming one toe at a time.", "start_url": "/?utm_source=homescreen", "scope": "/", "display": "standalone", "background_color": "#000", "theme_color": "#000", "dir": "ltr", "lang": "en-US", "icons": [ { "src": "./icons/icon-72x72.png", "type": "image/png", "sizes": "72x72" }, { "src": "./icons/icon-96x96.png", "type": "image/png", "sizes": "96x96" }, { "src": "./icons/icon-128x128.png", "type": "image/png", "sizes": "128x128" }, { "src": "./icons/icon-144x144.png", "type": "image/png", "sizes": "144x144" }, { "src": "./icons/icon-152x152.png", "type": "image/png", "sizes": "152x152" }, { "src": "./icons/icon-192x192.png", "type": "image/png", "sizes": "192x192" }, { "src": "./icons/icon-384x384.png", "type": "image/png", "sizes": "384x384" }, { "src": "./icons/icon-512x512.png", "type": "image/png", "sizes": "512x512" } ] } ``` # Finaly inject the HTML code I've added `` from the Ghost dashboard. Since I was there, I also added the theme-color `` and the apple-touch-icon to complain with the PWA recomendations `` ![](https://tig.pt/content/images/2019/07/Ghost-head-html.png) Since I use `ajax.cloudflare.com` and `images.unsplash.com` on almost every page, I'm leveraging a bit more speed by pre-connecting to these domains avoiding DNS resolve wait time. I've added the serviceWorker registration to my [Google Tag Manager](https://tagmanager.google.com/?ref=tig.pt) that I could totally avoid but since I use my blog as a sandbox to test multiple services. ``` ``` # Add the files to Ghost root folder To add the files to your root folder in Ghost, you can download the installed Theme, add/modify the files and upload with a new name, you will have your own Theme that will not be auto-updated by Ghost new version. ![](https://tig.pt/content/images/2019/07/Ghost-Theme.png) # Results My website became supper speedy, serving almost every request from the cache and the load times dropped from about 2 seconds to 650 miliseconds with no cache and 130 miliseconds if the content is in the cache. Google should also be happier with my website and give me a better score for organic traffic. ![](https://tig.pt/content/images/2019/07/Load-time-no-cache-1.png) ![](https://tig.pt/content/images/2019/07/Load-time-cached.png)  Lighthouse and Pagespeed results are much greener now and green is good! 😃 ![](https://tig.pt/content/images/2019/07/Lighthouse.png) ![](https://tig.pt/content/images/2019/07/PageSpeed.png) # Next step, implement it everywhere! ### How to upgrade Oh My Zsh URL: https://tig.pt/how-to-upgrade/ Last updated: 2019-06-11T08:41:30.000Z Sometimes my work network is blocking github.com and some other domains and you can fail a Oh My Zsh upgrade because of network failure. After switching to my secondary network I need to manualy ask Oh My Zsh to upgrade because it will not prompt you again, so here is how to manualy upgrade it: ``` upgrade_oh_my_zsh ``` ### Live Cheaper, Live Greener URL: https://tig.pt/live-cheaper-live-greener/ Last updated: 2018-07-08T17:54:22.000Z # Live Cheaper We all want to live cheaper, but only if it doesn't impact your quality of life. ## Don't be a miser I'm not an ambassador for misers, after all, you can always make more money, you can only save as much as you make. That's one of the multiple things I've learned with [Ramit](https://twitter.com/ramit?ref=tig.pt) and his awesome products. You can and should indeed use wisely your money, cutting on what is waste to apply it to what makes you happy now or in the future (invest). ## Being LEAN Being [LEAN](https://en.wikipedia.org/wiki/Lean?ref=tig.pt) is all about finding and cutting on waste, and there's a lot we can all learn and apply to our business but also to our personal lives. Once you start doing it, it becomes natural and like other habits, you start doing it without realizing. Its only good not only for your wallet but it is also fun (almost a game). You can find waste in your lives in multiple forms: - In time (things you can automate or outsource) - In movement (sometimes we really don't need to commute) - Energy (electric but also biological) - (...) - In resources (we use more then we need) Here is where I want you to focus first. It's very easy to find waste in resources and improve immediately. You don't need that much food, detergent, toothpaste, shower gel or anything else. ## Use fewer Instead of using your energy looking to buy cheaper, sometimes even wasting petrol to and time to go buy something here, other things there to save 5% or 10%. You can easily **use fewer** and save a larger amount, keep the same quality of life or even improve it, since you have fewer chemicals inside you and surrounding you, or eat less helping your body take care of excesses. Sometimes you can even completely eliminate. Try using the [5 Whys](https://en.wikipedia.org/wiki/5%5FWhys?ref=tig.pt) technique. # Live Greener Doing so, you also reduce your carbon footprint, consuming fewer resources from our planet, not only in the number of products, but also the energy used to produce, package, transport, and process the waste it produces after use. Did think about this before? Consider putting a Post-it on your fridge or desk at work (or even a virtual stick note on your desktop) and leave it for a week somewhere you see it multiple times a day. > Live Cheaper, Live Greener I would love to hear your results and even update this post with testimonials of the best ones, mail me. ### Monitor your Infrastructure with TIG Stack URL: https://tig.pt/monitor-your-infrastructure-with-tig-stack/ Last updated: 2018-07-02T12:05:36.000Z I was looking for a way to monitor my host and Docker containers and found TIG (Telegraf + InfluxDB + Grafana) to be a great solution, not because the name of the stack, but because it was free, open-source and lightweight. [Grafana](https://grafana.com/?ref=tig.pt) is also a good option because it can be used to make dashboards for anything, and I'm interested in making one for my business to track some KPIs. First of all, Telegraf will collect the data based on input plugins and export them to output plugins (InfluxDB) in our case. ``` docker run --rm telegraf -sample-config > telegraf.conf ``` And we have the base telegraf.conf file. What we are looking for is to enable (uncomment)`[[outputs.influxdb]]` and `urls = ["http://influxdb:8086"]` so Telegraf knows where to output everything. You can leave it as it is to monitor your host, but since we are running this on docker, it makes sense to monitor docker as well. ``` [[inputs.docker]] endpoint = "unix:///var/run/docker.sock" ``` If you use other technologies like nginx, mongodb, mysql and so on, you can dig into that later by setting all inputs. Save and Quit and you have your telegraf.conf ready. We need to start our docker-compose and for telegraf service, it will look something like this (don't forget to link to influxdb to save data). ``` telegraf: restart: unless-stopped image: telegraf:1.7-alpine links: - influxdb:influxdb volumes: - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro - /var/run/utmp:/var/run/utmp:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /sys:/rootfs/sys:ro - /proc:/rootfs/proc:ro - /etc:/rootfs/etc:ro environment: - HOST_PROC=/rootfs/proc - HOST_SYS=/rootfs/sys - HOST_ETC=/rootfs/etc ``` InfluxDB will make our data persistence and will feed Grafana with information. ``` influxdb: restart: unless-stopped image: influxdb:1.5-alpine volumes: - ./influxdb/:/var/lib/influxdb ``` Grafana will be your frontend and connect to influxdb to get all your precious data and do its magic to make a beautiful, and useful dashboard. ``` grafana: restart: unless-stopped image: grafana/grafana:5.1.0 links: - influxdb:influxdb volumes: - ./grafana/:/var/lib/grafana environment: - VIRTUAL_HOST=${DOMAIN} - VIRTUAL_PORT=3000 - LETSENCRYPT_HOST=${DOMAIN} - LETSENCRYPT_EMAIL=your@email.com - GF_SERVER_ROOT_URL=https://${DOMAIN} - GF_SECURITY_ADMIN_USER=your@email.com - GF_SECURITY_ADMIN_PASSWORD=your_secret_password ``` I had to `chmod -R 777` influxdb and grafana folders so it can easily create all needed files for databases and configs. After login in Grafana, add your data source `http://influxdb:8086` with database name `telegraf` and user `root` and password `root`. Take a look at what you can do with Grafana at [Grafana Demo](https://play.grafana.org/d/000000012/grafana-play-home?orgId=1&ref=tig.pt). ![docker](https://tig.pt/content/images/2018/07/docker.png) ### Show Disk Space Used by Docker URL: https://tig.pt/show-disk-space-used-by-docker/ Last updated: 2026-06-30T14:36:58.000Z Docker is a great tool, and I can't imagine myself managing my servers without it anymore. But if you are not careful, disk space can be a concern. `docker system df` will show you how much disk space is used and with `-v ` flag (verbose), you can see the unique image size for each image. ``` # docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 26 24 4.877GB 697.5MB (14%) Containers 51 51 6.163MB 0B (0%) Local Volumes 16 16 33B 0B (0%) Build Cache 0 0 0B 0B ``` As you can see I have 26 images but only 24 are active, with a total of `697.5Mb` reclaimable. Run `docker image ls` and I can see that it is an older version of my ghost blog, so a `docker system prune -a` and problem solved. One more thing, `docker system prune -a` don't remove dangling volumes, for that you need to run `docker volume rm $(docker volume ls -q --filter dangling=true)` ### Create your Habits URL: https://tig.pt/habits/ Last updated: 2018-02-27T22:50:05.000Z Create your habits and become the person you wanna be. # I'm 32, never run before and started from a day to another! We are habits animals and consciously or not, we tend to transform any repetitive task into a habit. When it comes to day-to-day tasks, I've always felt a bit nerd since I use to do mental systems to how to do things, and inevitably tweak them little by little to find the best path to do it effectively and efficiently. I even have a system to dry myself when I come out of the bath or to brush my teeth. I think I have always been a bit conscious about my habits but never been consciously creating new ones. Recently I've got the book [So Good that they can't Ignore you](https://www.amazon.com/Good-They-Cant-Ignore-You/dp/1455509124?ref=tig.pt) that I highly recommend. It helps you think proactively about your habits and how to deliberately practice them to create habits you are prouder about. - Define an objective - Find a simple task that you can do repeatedly to achieve your objectives - Commit to doing it by starting today - Do it, just before, or after a habit you already have - Reward yourself for doing it Example: - Be healthier - Start running - Get out and do it, if you can't run, walk, try some sprints, push yourself and remember the harder it is for you today, the easier it will be tomorrow - I do it before lunch since I can go home take a shower and lunch before going back to work. - Grab some reward, even if it is a snack or a chocolate, I don't care about losing calories at the beginning, I care about creating a habit, and reward myself for doing it, then, later on, I can remove the reward because doing this great habit is a reward in itself. I'm creating new habits for myself and hope you start creating yours today. Feel free to email me with your new habit. ### Working music URL: https://tig.pt/working-music/ Last updated: 2018-02-26T14:07:49.000Z Sometimes you just need some kind of music to help you keep focus and with energy to work. I've found [FocusMusic.fm](https://focusmusic.fm/?ref=tig.pt#) to be a great option. I like it, it keeps me productive and I don't have to think about it. For someone that it's not a music lover but can feel the benefice of having music while working, it is a perfect pair for my Airpods when I'm on my MacBook Pro. If anyone knows a Mac client with local cache or something for this project, please let me know. ### Wordpress xmlrpc.php attack URL: https://tig.pt/wordpress-xmlrpc-php-attack/ Last updated: 2017-08-24T12:05:00.000Z This morning I woke up and found on my email a "more than 90% CPU use over 2h report". Hum... interesting, did I become famous overnight or am I under attack? Quick look on my server and found that CPU was still at max. ![CPU under wordpress attack](https://tig.pt/content/images/2017/05/CPU-under-wordpress-attack.png) Did I make some weird bug? Let me check Nginx requests ![Nginx requests under wordpress attack](https://tig.pt/content/images/2017/05/Nginx-requests-under-wordpress-attack.png) My hopes of fame were higher now but it was too constant, it looks more like brute force attack. First things first, run a `top` command and found `php-fpm` eating all of my CPU. Run a `tail /var/log/nginx/access.log` and found that there was someone brute forcing me: ``` 172.21.0.6 - - [27/May/2017:08:08:10 +0000] "POST /xmlrpc.php HTTP/1.1" 200 422 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 172.21.0.6 - - [27/May/2017:08:08:10 +0000] "POST /xmlrpc.php HTTP/1.1" 200 422 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 172.21.0.6 - - [27/May/2017:08:08:10 +0000] "POST /xmlrpc.php HTTP/1.1" 200 422 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 172.21.0.6 - - [27/May/2017:08:08:10 +0000] "POST /xmlrpc.php HTTP/1.1" 200 422 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" ``` Done a quick google for it, and there it was, a clear Wordpress exploit. Since I don't use API to access my Wordpress, the fix was simple, just block it. A quick trip to Nginx's config file and problem solved. ``` server { ... location /xmlrpc.php { deny all; } ... } ``` Reload nginx and its done. If you have a Wordpress, you can do it before being brute forced to avoid any problems in future. ### MiWiFi NAS - Millet Router macOS English localization URL: https://tig.pt/miwifi-nas/ Last updated: 2019-01-31T22:56:22.000Z # TL;DR **Xiaomi have great routers at amazing prices that offer an excellent WiFi coverage and many powerful options. Here I share the English translation for macOS companion App.** I have a MiWiFi NAS, that I use as my home router. It has a great WiFi coverage merging 2,4Ghz and 5Ghz networks with the same name and also allow for easy Guest network with sandboxing and ability does traffic shaping. The Guest network can be turned On/Off by the iOS (there's also an Android version) app. My version is the R2D, 1TB storage, and 1Gb WAN, which is a great option to replace my ISP Router, to make use of my 200/10Mb Internet, giving the ability to fully use my network over 5Ghz WiFi, and also make use of the Router download manager. ## Router Download Manager This Xiaomi comes with on router Download manager, great to download big files when you are out of home for later use, or even if you want to add a torrent or magnet link to get that Linux distro that you want to watch before going to bed every Friday. `¯\_(ツ)_/¯` The Download Manager comes with iOS (and Android) client, but also with a macOS client that let you simply copy past a magnet link to start a download instantly even if you are away from your router (ex. at work). ## macOS You can find the native macOS client in [MiWiFi website](http://miwifi.com/miwifi%5Fdownload.html?ref=tig.pt). It lets you see the status of the files being downloaded to your Router and add more files or manage them. It works on the local network but also remotely, so you can control your home Router even out of the home, like at work. ##### English translation The macOS companion App was all in Chinese so used google translate (I don't know Mandarin) and translated it myself. After that, I tweaked the translation manually to make more sense. Here it is the translations files so you can taste it use it in English too. [Download Xiaomi Millet macOS English translation files](https://static.tig.pt/downloads/MilletRouter/Xiaomi%5FMillet%5FRouter%5FMiWiFi%5F0.9.12%5Fenglish.zip?ref=tig.pt) Please before use it, extract and inspect the content of the files to make sure I'm not doing anything nasty. Place it inside `/Applications/XMRouter.app/Contents/Resources/` It should look like this after you extract the zip `/Applications/XMRouter.app/Contents/Resources/en.lproj` Relaunch the app and you are ready to go. ## The Xiaomi router itself The Router works great, **never crashed** on me so far, its **fast** even when heavy used by multiple devices and offer **DNLA**, allows to change **DNS client** (that allows you to change DNS of all your network without the need to configure any of your devices), and even works as a **Time Machine Capsule** for your Mac backups. If you are interested in buying a Xiaomi Router, you can get yours at [AliExpress](https://pt.aliexpress.com/af/miwifi.html?SearchText=miwifi&d=y&initiative%5Fid=SB%5F20190131145540&origin=n&catId=0&isViewCP=y&jump=afs&ref=tig.pt). I was not sponsored but have had great experiences with GearBest, the prices are almost always the best you can find, even comparing with Aliexpress and the shipment is much faster and customer support is much better. PS - The R2D is not for sale anymore, and I didn't have the opportunity to test the other versions, but I'm a big fan of the Xiaomi's products in general and from my experience, you will for sure like them too. ### PHP Get HTTP Request Headers - get_headers() URL: https://tig.pt/php-get_headers/ Last updated: 2017-08-24T12:09:57.000Z I was doing some tests to make a simple web crawler in PHP and I want to share with you `get_headers()` function. ```php ``` With this simple example, we can test the `get_headers()` function and extract some information from it. Since my blog has a `http` to `https` redirect, this will get us a `301 Moved Permanently` redirect and we can extract the new `Location` directly from `$headers` variable, that will be `https://tig.pt`. Sadly I didn't find any direct way to get the response code without making a new request, and a new request could give a different response from the first one, but we can create a simple `get_http_response_code` function that parses it from the string with `intval(substr($headers[0], 9, 3))` getting the 3 numbers code that starts at character 9, and convert it to int for simple handling. I also added a simple `if ($headers)` because if theres any error in the request, no response at all, or url doesn't exist, the function returns `NULL`. This can be used to handle any kind of content and it's a simple way to test an up status, or content modified date if you are doing cache control. I will use it to feed my crawler with information about broken links. You can run this example on terminal with: `curl https://static.tig.pt/php/get_headers.php` Don't forget to use `
` html tags on your vardumps to easily read on the browser.

If you prefer other way to do it, or want to share your work, just contact me.
### Half-Baked
URL: https://tig.pt/half-baked/
Last updated: 2018-02-14T16:33:05.000Z
Half-baked is always better than perfectly planned.

This can be a half-post (15 minutes actually) , but at least it is half-baked. I have a lot of drafts on my blog but none of them have come to published because they were half-baked.

It's nonsense to try to make perfect things. If you always aim for perfection you start doing nothing and just procrastinate.

So get out, break the task into smaller chunks and start ticking that "Done" box one after another. **You will get an amazing accomplishment feeling that will fuel the next one**.

Even more important, once it becomes something real, you will understand it even better and you can start from scratch or improve it in the right way, something that is much harder or even impossible to do when it's just a plan.

**There's always room for improvement**, so if you nail it with half-done, you will only get it better once you apply more resources (time, money, effort) to improve it.

[Image credits](http://halfbakedbec.blogspot.pt/2013/03/malteser-brownies.html?ref=tig.pt)
### Restart
URL: https://tig.pt/restart/
Last updated: 2017-03-18T22:33:16.000Z
**It's time for a restart.**

I've tried to blog a few times but sooner than I expect, I stop.

It's time to give it a new try.

The reason I want to blog is because I get so much from the internet, so much from other person's blogs, that **I want to give back**. I want to help other too and I feel the obligation to get this habit.

I'm also selfish (as everyone) and I want to leverage my skills.

**The best way to leverage your skills is to practice and put yourself in the spotlights.**

So, I've updated my blog and converted my old Wordpress to [Ghost](http://ghost.org/?ref=tig.pt), because it's cleaner and more content focused.

I will also give it a try to Markdown and to write in English. (I know my English isn't great but how can I improve it if I don't practice?) Also, this way, if I write anything useful, it can be useful for a larger audience.

Let's see how it goes from now on.

[image credits](https://sumitghosh.co.in/finally-found-sometime-and-motivation-for-re-start-blogging/?ref=tig.pt)
### Trazer um iPhone de volta à vida
URL: https://tig.pt/trazer-um-iphone-de-volta-a-vida/
Last updated: 2017-08-18T10:07:07.000Z
Ultimamente é raro eu agarrar num ferro de soldar, mas por vezes somos chamados para fazer arte e é nessa altura que agradecemos as longas horas a estragar solda que nos deram skills para o fazer.

Aparece-me nas mãos um iPhone 4S de terceiros que alguém a desencaixar a bateria partiu o socket da motherboard e também partiu as pistas da mesma que permitiam a ligação.

Porque não só de software existe este mundo, é altura de chamar a cavalaria, tirar o pó do [JBC 14S](http://www.amazon.es/2192040-SOLDADOR-JBC-14ST-PUNTA/dp/B000YAGX2A/ref=sr%5F1%5F1?ie=UTF8&qid=1425556434&sr=8-1&keywords=jbc+14s&ref=tig.pt), da ponta [B-03D de 0,5mm](http://www.ebay.com/sch/i.html?%5Ffrom=R40&%5Ftrksid=p2050601.m570.l1313.TR0.TRC0.H0.XJBC+B03D.TRS0&%5Fnkw=JBC+B03D&ghostText=&%5Fsacat=0&ref=tig.pt) e do [fio de 0.1mm de diametro](http://www.mauser.pt/catalog/product%5Finfo.php?products%5Fid=64652&ref=tig.pt).

Dicas para quem se quiser aventurar em algo semelhante.

- Deixar o ferro aquecer bem.
- Com hobby knife tirar o verniz do fio e de seguida estanha-lo.
- Aplicar Flux de forma generosa na zona onde vamos soldar.
- Com ambos os braços apoiados na bancada, aproximar delicadamente o fio da resistência SMD onde a pista acaba e delicadamente tocar por fracções de segundo com o ferro entre o fio e a solda da resistência aquecendo assim só um lado da resistência evitando derreter a solda do outro lado e que a resistência venha agarrada ao ferro.

Ficam umas fotos para os interessados, é difícil perceber a escala dado a dimensão da coisa, mas enchem a vista de quem a percebe.

No final, fiqueis satisfeito por ter conseguido refazer estas pistas e o telefone ter voltado à vida, evitando assim mais lixo electrónico e uma despesa extra a quem ficou com o equipamento a funcionar em vez de ter que o substituir.

[![IMG_0511](https://tig.pt/wp-content/uploads/2015/03/IMG_0511-e1425556187337-300x264.jpg)](https://tig.pt/wp-content/uploads/2015/03/IMG%5F0511-e1425556187337.jpg) [![IMG_0505](https://tig.pt/wp-content/uploads/2015/03/IMG_0505-225x300.jpg)](https://tig.pt/wp-content/uploads/2015/03/IMG%5F0505.jpg) [![IMG_0506](https://tig.pt/wp-content/uploads/2015/03/IMG_0506-225x300.jpg)](https://tig.pt/wp-content/uploads/2015/03/IMG%5F0506.jpg) [![IMG_0507](https://tig.pt/wp-content/uploads/2015/03/IMG_0507-225x300.jpg)![IMG_0508](https://tig.pt/wp-content/uploads/2015/03/IMG_0508-225x300.jpg)](https://tig.pt/wp-content/uploads/2015/03/IMG%5F0508.jpg)
### Banco Invest
URL: https://tig.pt/banco-invest/
Last updated: 2017-10-15T07:44:53.000Z
Não costumo andar aqui a fazer publicidade gratuita mas a verdade é que o Banco Invest merece um post sobre o mesmo pela excelente qualidade de serviço para além das taxas de juros bastante atractivas para depósitos a prazo.

O mercado actualmente tem caído bastante e as taxas não estão tão boas como já estiveram mas a verdade é que já tive com eles depósitos a prazo de 5% de TANB a um ano e com possibilidade de levantamento antecipado total ou parcial com perda apenas de 50% dos juros do montante levantado.

Eles também tem o produto MoneyBox, uma conta à ordem que dá 3,75% de juros e nos permite configurar com débito directo de outra conta com o valor que pretendermos (alterável ou cancelável a qualquer momento) sendo assim uma excelente forma de pouparmos algum sem estarmos preocupados, habituando-nos a ter um pouco menos na conta do dia-a-dia e tendo esse valor a render juros bastante interessantes.

Sempre que tive que os contactar foram extremamente simpáticos e sempre prontos a ajudar-me, e para minha surpresa, no dia em que precisei de levantar dinheiro da conta, o meu gestor de conta veio a meu encontro de mota para eu assinar a ordem de transferência de forma a garantir a transferência ser processada no próprio dia.

Extrema transparência e até apps para iPhone faz-me ser um cliente do BancoInvest extremamente satisfeito e recomenda-lo a todos os que procurem um segundo banco para ter uns depósitos a prazo, já que os bancos do dia-a-dia dão taxas na ordem os 1,5\~2,5% face às excelentes taxas do BancoInvest.

De relembrar que estes depósitos estão protegidos pelo fundo de garantia do Banco Português.

Não percam mais tempo e passem pelo site para conhecer melhor este banco que tem a minha aprovação e do qual pretendo permanecer cliente durante bastantes anos.

[www.bancoinvest.pt](http://www.bancoinvest.pt/?ref=tig.pt "www.bancoinvest.pt")
### Pen no RPi como disco permanente
URL: https://tig.pt/pen-no-rpi-como-disco-permanente/
Last updated: 2017-10-15T07:46:33.000Z
Muitos de vocês poderão querer ter uma pen no RPi permanentemente.

Comprei uma [Pen 64Gb](http://www.amazon.co.uk/s/ref=nb%5Fsb%5Fnoss%5F1?url=search-alias%3Daps&field-keywords=pen+64gb&ref=tig.pt) que agora andam a custar cerca de 20\~30€ e liguei no RPi.

Há que formata-la

| 1 | mkfs.ext3 /dev/sda1 |
| - | ------------------- |

Criar uma pasta onde vamos monta-la e monta-la, para exemplo criaremos pasta /root/pen/ 

| 1 2 | mkdir/root/pen mount/dev/sda1 /root/pen/ |
| --- | ---------------------------------------- |

Se tudo correr bem já devem de ver a vossa pen montada com o comando 

| 1 | df\-h |
| - | ----- |

Para que sempre que o RPi faça reboot ela seja montada automáticamente, vamos adicionar o mount no startup 

| 1 | nano/etc/init.d/bootmisc.sh |
| - | --------------------------- |

Colar no topo do ficheiro 

| 1 | mount/dev/sda1 /root/pen/& |
| - | -------------------------- |

Fechar e gravar com o belo \[Ctrl-X\] => \[Y\] => \[Enter\]. 

Simples, rápido e funcional. 😛
### Cartão de Crédito Caixa Classic
URL: https://tig.pt/cartao-credito-caixa-classic/
Last updated: 2017-10-15T07:44:06.000Z
Não sou apologista da contração de créditos embora existam excepções. O [Cartão de Crédito Caixa Classic](https://www.cgd.pt/Particulares/Gerir-Dia-a-Dia/Cartoes/Cartoes-Credito/Classic/Pages/Cartao-Credito-Caixa-Classic.aspx?ref=tig.pt) é uma dessas exceções e utilizo-se sempre que possa.

Existem algumas grandes vantagens da utilização de cartões de crédito:

- Aumento da Liquidez
- Soma de pontos / CashBack
- Quando morrermos vamos utilizar mais 1 mês de ordenado do que se pagássemos tudo a pronto 😛 ([by Tim Ferriess](http://www.ebay.com/sch/i.html?%5Ftrksid=p5197.m570.l1313&%5Fnkw=4+hour+work+week&%5Fsacat=0&%5Ffrom=R40&ref=tig.pt))

Neste caso aconselho o cartão Caixa Classic pelos seus escalões de CashBack que considero dos melhores do mercado português, contudo se souberem de algum melhor avisem (os escalões já foram bem mais interessantes, 150/500/1000 em vez dos actuais 150/1250/1500 para todas as compras superiores a 36€, mas talvez por causa de pessoas como eu tiveram que reduzi-los).

Assim e em traços gerais, se utilizarem o Cartão Caixa Classic em todas as vossas transacções, no final do mês, dependendo do valor consumido, recebem uma percentagem dessas transacções de volta.

No fundo estamos a falar de um desconto sobre transacções que no dia-a-dia podem não ser muito significativas, mas na compra de um computador, uma joia ou uma viagem, compensam logo a utilização do cartão que não tem anuidade se consumirmos 300 euros (3.600 euros/ano) mensalmente com o cartão ou 3.600 por ano.

### Tabela de Cashback do Cartão Caixa Classic

| Volume de compras mensal | De €150 a €1.249,99 | De €1.250,00 a €1.499,99 | Igual ou superior a €1.500,00 |
| ------------------------ | ------------------- | ------------------------ | ----------------------------- |
| % de devolução1          | 0,75%               | 1,5%                     | 3%                            |

(1) Para um acumulado de compras de valor maior ou igual a € 150\. O valor de devolução tem o limite máximo de € 100

Com esta possibilidade de irem buscar até 100€ extra por mês, podem inclusivamente fazer compras online ou em lojas pelos vossos familiares e amigos para usufruir do CashBack do cartão e depois eles pagam-vos a transacção.

Outra excelente opção é utilizar este cartão para pagar publicidade online e outros serviços tendo assim sempre um “desconto” nos mesmos.

Com os pagamentos definidos para 100% nunca pagam juros a menos que percam o controlo e utilizem mais do que podem.

Pessoalmente vejo o meu Cartão Caixa Classic como mais uma conta à ordem onde consigo um rendimento extra para as despesas que já iria fazer de qualquer forma.

Vocês já utilizam este e outros métodos de obter rendimentos extra? Que outras formas utilizam para obter rendimentos extra?
### VigLink - Monetização com Afiliados
URL: https://tig.pt/viglink-monetizacao-afiliados/
Last updated: 2017-03-07T12:43:25.000Z
Hoje venho apresentar-vos a plataforma [VigLink](http://www.viglink.com/?vgref=87866&ref=tig.pt) que permite com o simples registo e adição de um snippet de JS no vosso website participar em milhares de programas de afiliados sem terem que se registar e ter aprovação em todos nem se preocuparem com os links quando estão a criar conteúdo.

[![viglink](https://tig.pt/content/images/2017/03/viglink.png)](http://www.viglink.com/?vgref=87866&ref=tig.pt)

Conheci a VigLink quando procurava uma plataforma para gerir as minhas campanhas de afiliados e fiquei surpreendido com a facilidade de utilização e os rendimentos gerados.

A plataforma VigLink permite-nos monetizar o nosso site com mais de 30.000 plataformas de afiliados tais como ebay, amazon, itunes entre muitas outras.

Assim venho partilhar convosco a minha experiência e se vocês quiserem experimentar a plataforma, se o fizerem pelo meu link de afiliado eu agradeço.

Site sem afiliados:  
[http://www.viglink.com](http://www.viglink.com/?ref=tig.pt)

Site com afiliados:  
[http://www.viglink.com/?vgref=87866](http://www.viglink.com/?vgref=87866&ref=tig.pt) (obrigado)

Vamos ao que interessa.

### Como funciona o VigLink?

VigLink está registado em todos os websites de afiliados e mais alguns, e estão constantemente a adicionar novos para que sem termos que nos preocupar com nada estejamos sempre a ganhar mais fontes de rendimento.

Ao nos registarmos no VigLink, é nos dado um pequeno código em JS para colocar no footer dos nossos websites de forma a que o VigLink possa fazer a sua magia e dar-nos rendimentos. (quem não quiser editar código, eles têm plugins para muitas plataformas como WordPress)

Quando um user clicka num link o VigLink verifica se o link existe como campanha de afiliados e se sim adiciona o código de afiliados do VigLink. Para além disso o VigLink contabiliza os clicks e analise se a pessoa que veio do nosso site lhes deu algum rendimento, para nos poderem dar a nós a nossa parte.

O VigLink consegue quantidades muito maiores de referals para estas plataformas conseguindo assim negociar melhores comissões, e está sempre à procura de novas fontes de rendimento.

Nós, esquecemo-nos que instalámos o VigLink e passamos a receber comissões automáticas de todos os links possíveis de monetizar do nosso website sem termos que nos preocupar com montantes mínimos em cada tipo de campanha ou corrigir todos os urls, etc.

Claro que os rendimentos directamente com um parceiro como a amazon serão muito superiores do que com a VigLink, mas por isso podemos escolher se o VigLink só coloca o link de afiliados em urls sem código de afiliados, ou se faz overwrite de todos os códigos de afiliados indepentemente de já ter código de afiliados no URL.

Eu não esperava muito desta plataforma mas a verdade é que sem grande esforço consegui adicionar mais 30\~40$ de rendimentos por mês (sites em português com pouco trafego, por isso nem imagino para outras línguas), e os pagamentos são certinhos para a nossa conta PayPal.

Querem um conselho, experimentem que eu estou bastante satisfeito, e se poderem registar-se com o meu url de afiliados da viglink, no primeiro ano a viglink partilha-me uma parte da comissão deles, não da vossa, pelo que agradeço.

Já conheciam a VigLink? Conhecem outras plataformas do género?
### Raspberry Pi no-ip client
URL: https://tig.pt/raspberry-pi-no-ip-client/
Last updated: 2019-01-31T23:07:16.000Z
Para que possamos utilizar o nosso RPi sem sabermos o IP público do mesmo, precisamos de um dynamic DNS como o serviço [no-ip.com](https://www.noip.com/?ref=tig.pt).

[![no-ip](https://tig.pt/content/images/2017/03/no-ip_3.jpg)](https://www.noip.com/?ref=tig.pt)

Para tal, devemos nos registar no website no-ip.com e criar um dynamic DNS.

Depois temos que instalar o cliente do no-ip.com no nosso RPi para que este actualize automaticamente o IP no servidor no-ip.com garantindo assim que está sempre conectável.

Se fizeram uma instalação simplista como eu vão precisar de instalar o gcc para compilar o código do no-ip

| 1 2 3 4 5 6 7 | apt-get installgcccd/usr/local/src wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz tar xzf noip-duc-linux.tar.gz cd noip-2.1.9-1makemakeinstall |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |

Quando correrem o make install será solicitado os vossos dados de login no serviço no-ip e poderão deixar as restantes configurações com os valores padrão. 

Podem lançar o processo manualmente com

| 1 | /usr/local/bin/noip2 |
| - | -------------------- |

Para consultar se o processo está activo e quais os dados utilizados basta 

| 1 | /usr/local/bin/noip2 \-S |
| - | ------------------------ |

Não sendo a forma mais correcta, podemos simplesmente editar o bootmisc.sh para adicionar noip2 no startup. 

| 1 | nano/etc/init.d/bootmisc.sh |
| - | --------------------------- |

Basta adicionar a seguinte linha no topo do ficheiro 

| 1 | /usr/local/bin/noip2 & |
| - | ---------------------- |

Para testar que ficou tudo ok, reiniciamos e vamos verificar se o noip2 correu automaticamente com o comando -S 

| 1 2 | shutdown \-r now noip2 \-S |
| --- | -------------------------- |

Se tudo correu bem, devemos ver o processo activo 

| 1 | Process XXXX, started as noip2 |
| - | ------------------------------ |

Agora levem o vosso RPi para onde quer que seja, liguem-no a um router (que esteja a fazer forward da porta 22 SSH e sFTP) ficam com o vosso RPi online no mesmo dynamic DNS.
### Raspberry Pi como servidor de backups
URL: https://tig.pt/raspberry-pi-servidor-backups/
Last updated: 2017-03-07T12:40:23.000Z
[Raspberry Pi](http://www.raspberrypi.org/?ref=tig.pt) é uma máquina bastante económica e versátil podendo ser adaptado a qualquer tipo de aplicação.

Neste caso vamos aproveitar o poder do RPi de se tornar um pequeno servidor de backups para que eu possa ficar descansado que diariamente serão feitos backups de todos os meus websites.

[![raspbian](https://tig.pt/content/images/2017/03/raspbian_logo-2.png)](http://www.raspbian.org/?ref=tig.pt)

Optando pelo [Raspbian](http://raspbian.org/?ref=tig.pt) por ser uma distro debian bastante estável e optimizada para o RPi, efectuamos uma simples intalação conforme indicado no website da distro, instalando apenas o core-system e server ssh para acesso remoto (headless).

Convém termos o nosso RPi com firmwares actualizados pelo que aconselho a instalação do rpi-update com os seguintes comandos:

| 1 2 | wget http://goo.gl/1BOfJ \-O/usr/bin/rpi-update &&chmod +x /usr/bin/rpi-update apt-get install binutils git-core |
| --- | ---------------------------------------------------------------------------------------------------------------- |

De seguida definimos o nosso RPi para utilizar 240Mb da sua Ram para CPU e apenas 16Mb para gráfica uma vez que vamos utiliza-lo apenas por Terminal ou SSH, não necessitamos de qualquer aceleração gráfica. 

| 1 2 | rpi-update 240 shutdown \-r now |
| --- | ------------------------------- |

Instalar servidor FTP para podermos aceder remotamente ao RPi para depositar os nossos backups. 

| 1 | apt-get install vsftpd |
| - | ---------------------- |

Backup das actuais configurações e edição do ficheiro para desactivar “anonymous connections” alterando simplesmente de YES para NO 

| 1 2 | cp/etc/vsftpd.conf /etc/vsftpd.conf.original nano/etc/vsftpd.conf |
| --- | ----------------------------------------------------------------- |

Agora é só configurarmos uma cron job no servidor web para fazer um backup diário para o nosso RPi por sFTP, e com o preço do GB em discos externos ou Pens USB a baixar cada vez mais, nunca um backup foi mais barato. 

Num futuro artigo explico como configurar o RPi para actualizar um dnydns tal como o no-ip no vosso RPi para que seja qual for o vosso IP não tenham que alterar as configurações dos servidores web.

Podemos vir a utilizar este RPi para muitas outras funções tais como requestes periódicos para verificar se o website ainda está online, semelhante aos serviços do pingdom.com, com notificações por push para o nosso iPhone se o servidor for a baixo, entre muitas outras possibilidades.
### Things - Gestor de Tarefas para Mac
URL: https://tig.pt/things-gestor-tarefas-mac/
Last updated: 2019-01-31T23:02:46.000Z
Para os que ainda não conhecem, o [Things](https://culturedcode.com/things/?ref=tig.pt) é um GTD (Getting Things Done) da [Cultured Code](https://culturedcode.com/?ref=tig.pt) para Mac e iOS.

Como o nome indica, o Things é um Gestor de Tarefas e ajuda-nos a gerir e concretizar tarefas.

![](https://tig.pt/content/images/2017/03/hero-mac1.jpeg)

O processo de gerir tarefas é algo a que todos estamos habituados quer nas tarefas pessoais do dia-a-dia, quer a nível prpfissional, contudo nem todos o fazemos de uma forma eficaz e eficiente.

Nunca dei muito valor aos softwares de gestão de tarefas mas a verdade é que mais cedo ou mais tarde acabamos por nos esquecer de alguma coisa que tínhamos por fazer.

Ao logo dos últimos anos acabei por experimentar diversos softwares como o [Wunderlist](https://www.wunderlist.com/?ref=tig.pt) e [Omnifocus](https://www.omnigroup.com/omnifocus/?ref=tig.pt) mas o Things foi aquele que realmente me permitiu mudar radicalmente a minha forma de gerir tarefas. O Things baseia-se na filosofia GTD (que aconselho a [leitura do livro](https://www.amazon.co.uk/Getting-Things-Done-Stress-free-Productivity/dp/0749922648/ref=sr%5F1%5F1?ie=UTF8&qid=1347385682&sr=8-1&ref=tig.pt)) mas tem uma curva de aprendisagem muito pequena. Ao contrário de outros softwares mais complexos, em vez de nos preocuparmos na melhor forma de gerir as nossas tarefas, o Things permite-nos registar e fazer tarefas quase como se de um postit de papel se trata-se. Simples e eficaz, e com cliente para Mac, iPhone e iPad, permite-nos criar e marcar como feitas as nossas tarefas em qualquer altura, e agora com sincronismo pela Cloud de forma instantânea e gratuita entre todos os dispositivos.

A grande vantagem do Things deve-se a facilidade com que nos permite “despejar” toda e qualquer tarefa que tenhamos na cabeça acabando com “open-loops” (algo que temos por fazer que está constantemente a vir-nos à memória como um “ahh não me possso esquecer de…”). Estes Open-Loops acabam por nos consumir muito mais do que achamos, constantes interrupções à nossa rotina quotidiana, que nos tira produtividade. Assim que escrevemos as tarefas num lugar seguro seguro, que sabemos que não vamos perder/esquecer, os mesmos desaparecem de imediato do nosso pensamento deixando de nos incomododar.

Aconselho vos a fazerem o download da versão Trial do site da CultureCode e inserirem todas as coisas que se lembrem agora. (Ex. “despejar o lixo”, “comprar café”, “pagar IRS”, tudo. Desta forma vamos nos habituando a ir registando as tarefas, das mais importantes às mais triviais.)

No inicio pode parecer algo estranho, mas conforme se forem habituando a escrever cada tarefa de que se lembrem, vão sentindo-se libertos de preocupações. Existe outra vantagem de utilizar estes sofwares de gestão de tarefas, pois para além de garantir que não nos esquecemos de nenhuma tarefa, permite-nos organizar acções com tags tais como “telefone”, “internet” ou “o nome de uma pessoa” para mais tarde podermos filtrar as tarefas a fazer quando estivermos naquele local ou com aquela pessoa.

Acho que estes softwares também nos aumentam a motivação ao darem a noção de “*acomplishment*” de cada vez que marcamos uma tarefa como completa, dando o sentimento de realização e de que o dia está a ser produtivo ao estarmos a conseguir efectuar as tarefas pretendidas.

O Things permite-nos de uma forma muito clean criar, editar e completar tarefas sem nos preocupar-mos com detalhes, e mais tarde se necessário podemos organiza-las por projectos ou áreas, adicionar notas ou tags, ou até agendar para um dia ou delegar a outra pessoa.

Vocês já utilizavam softwares de gestão de tarefas?