Skip to content

Instantly share code, notes, and snippets.

View tsabian's full-sized avatar
🏡
I may be slow to respond.

Tiago Oliveira tsabian

🏡
I may be slow to respond.
View GitHub Profile
//
// JavaScriptConvertible.swift
//
// Created by Tiago Almeida de Oliveira on 31/05/24.
// Copyright © 2024. All rights reserved.
//
import Foundation
protocol JavaScriptConvertible {
Aqui está um exemplo simples de como você pode criar uma `UIViewController` para ser executada em um Playground do Xcode:
```swift
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
@tsabian
tsabian / gist:bf96033cc5d71e0f0e077b83821143e5
Created February 8, 2024 23:29
linux subsystem Failed to take /etc/passwd lock: Invalid argument
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_silent
sudo mkdir /var/lib/dpkg/info
sudo apt-get update
sudo apt-get -f install
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_silent

unowned self x weak self

unowned self e weak self são conceitos usados em Swift para gerenciar a captura de self (referência ao próprio objeto) em closures, principalmente para evitar ciclos de referência fortes (strong reference cycles) que podem causar vazamentos de memória. Eles são semelhantes, mas têm diferenças importantes em seu comportamento e uso:

  1. weak self:
    • Uma referência weak não mantém uma contagem forte para o objeto que ela referencia. Isso significa que o objeto pode ser desalocado mesmo que a referência weak ainda exista.
    • Em Swift, uma referência weak é sempre declarada como uma variável opcional (?). Se o objeto ao qual ela se refere for desalocado, a referência weak automaticamente se torna nil. Isso é útil para evitar o uso acidental de um objeto que já foi desalocado.
    • Usar weak self em uma closure garante que, se o objeto referenciado (self) for desalocado, a closure não o manterá vivo. O self dentro da closure se tornará nil nesse caso.
import SwiftUI
/*
case 3:
A multiplicação por 17 é usada para converter de 4 bits para 8 bits porque 17 é o valor máximo que pode ser representado em 4 bits.
Em um sistema de 4 bits, cada bit pode ter um valor de 0 ou 1, resultando em um total de 16 combinações possíveis (2^4 = 16). No entanto, para representar 256 valores possíveis em 8 bits, precisamos multiplicar cada valor de 4 bits por um fator que permita essa expansão.
Multiplicar por 17 é uma abordagem comum porque é o valor máximo que pode ser representado em 4 bits (1111 em binário). Ao multiplicar um valor de 4 bits por 17, obtemos um valor de 8 bits que está distribuído de forma mais uniforme ao longo do intervalo de 0 a 255.

Lista de comandos úteis para depuração no console do Xcode:

  1. po [expression/object]: Abreviação de "print object". Use para imprimir a descrição do objeto ou valor da expressão.

    po myVariable
  2. p [expression]: Abreviação de "print". Semelhante a "po", mas para tipos primitivos como int, float, enum, etc.

    p myIntegerVariable
/*
Para verificar se uma determinada taxa de amostragem é válida e suportada pelo dispositivo iOS em um aplicativo, você pode utilizar a API do `AVAudioSession`. Abaixo está um exemplo em Swift que demonstra como fazer essa verificação:
Neste exemplo, a função `isSampleRateSupported` tenta definir a taxa de amostragem preferida para a sessão de áudio e depois verifica se a taxa de amostragem atual da sessão corresponde à taxa solicitada. Se corresponder, isso indica que a taxa de amostragem é suportada pelo dispositivo.
Tenha em mente que este é um exemplo simplificado. Em um aplicativo real, você pode precisar considerar outros aspectos, como a manipulação de diferentes estados da sessão de áudio e a verificação de outras configurações de áudio relacionadas.
*/
import AVFoundation
@tsabian
tsabian / scriptSend
Created January 10, 2024 17:25
trava zap shrek
async function scriptSend(scriptText){
const lines = scriptText.split(/[\n\t]+/).map(line => line.trim()).filter(line => line);
main = document.querySelector("#main"),
textarea = main.querySelector(`div[contenteditable="true"]`)
if(!textarea) throw new Error("Não há uma conversa aberta")
for(const line of lines){
console.log(line)
@tsabian
tsabian / Random password.sh
Created January 8, 2024 13:45
Gerar senha aleatória seguindo as regras: - A senha diferencia maiúsculas de minúsculas; - Deve ter pelo menos 7 caracteres; - Deve ter no máximo 8 caracteres; - Não deve incluir nenhum caractere de símbolo (não letra ou número); - Não deve repetir nenhum caractere sequencialmente mais de 6 vezes
#!/bin/bash
# Gerar senha aleatória seguindo as regras:
# A senha diferencia maiúsculas de minúsculas.
# Deve ter pelo menos 7 caracteres.
# Deve ter no máximo 8 caracteres.
# Não deve incluir nenhum caractere de símbolo (não letra ou número).
# Não deve repetir nenhum caractere sequencialmente mais de 6 vezes.
set -e
#!/bin/bash
NC='\033[0m' # para limpar a cor
BLACK='\033[0;30m' # para preto
RED='\033[0;31m' # para vermelho
GREEN='\033[0;32m' # para verde
YELLOW='\033[0;33m' # para amarelo
BLUE='\033[0;34m' # para azul
MAGENTA='\033[0;35m' # para magenta
CYAN='\033[0;36m' # para ciano