Show Dialog with Inputbox with default text highlighted

Documentação: [DOpus.Dlg](https://docs.dopus.com/doku.php?id=reference:scripting_reference:scripting_objects:dialog) Eu tive que fazer a minha própria função porque a função GetString, que o Directory Opus fornece, não permite que o texto default do input box venha já selecionado/highlighted para você poder escrever outra coisa no lugar sem precisar selecionar o que estava escrito e apagar. The return value is the entered string, or an empty value if the dialog was cancelled. The index of the button selected by the user will be available via the result property once this method returns. The left-most button is index 1, the next button is index 2, and so on. If a dialog has more than one button then by definition the last (right-most) button is the "cancel" button and so this will return index 0. Onde usei: **_CLIPBOARD_Paste_Smart**
function askUser(strTitle, strMessage, strDefaultValue, strButtons, strIcon) {
	var dlg = clickData.func.Dlg;
	dlg.window = clickData.func.sourcetab;
	dlg.title = strTitle;
	dlg.message = strMessage;
	dlg.buttons = strButtons;
	dlg.icon = strIcon; // warning error info question
	dlg.max = 0; // Faz com que o dlg seja do tipo input box. Se colocar um número maior do que 0, limita a quantidade de caracteres que podem ser escritos.
	dlg.defvalue = strDefaultValue;
	dlg.select = true; // Fa

Get file extension

var strFile_name = 'C:\Windows\notepad.exe'
var strFileExtension = getFileExtension(strFile_name);

function getFileExtension(fileName) {
    // Mesmo que o nome do arquivo tenha vários pontos, pega apenas o último em diante
    // Cacher Setup 2.47.3.exe
    // retorna apenas .exe
	return /\.[^\.]+$/.test(fileName);
}

Test if file or path exists

Documentação: - [DOpus.FSUtil](https://docs.dopus.com/doku.php?id=reference:scripting_reference:scripting_objects:fsutil).Exists (return bool) - verifica se o path existe. Path pode ser: - Absoluto: C:\\Windows - Absoluto: C:\\Windows\\ - Absoluto: C:\Windows\notepad.exe - Relativo: ..\\.. - Relativo: ..\\notepad.exe - URI: file:///C:/ - HTTP: http://www.microsoft.com - HTTPS: https://www.microsoft.com - FTP: ftp://ftp.microsoft.com - Windows Library: lib://Documents - EnvironmentVvariable: %USERPROFILE% - Directory Opus external control code: {sourcepath} - Directory Opus Collection: coll://Marked Pictures/Fotos Filhos - Directory Opus Alias: /mydocuments
if (DOpus.FSUtil.Exists(strPath)) {
	DOpus.Output('Existe o Path');
}

Resumo Hotstrings

Documentação Útil: - [Hotstrings](https://www.autohotkey.com/docs/v2/Hotstrings.htm) - [Send / SendRaw / SendInput / SendPlay / SendEvent](https://www.autohotkey.com/docs/v2/lib/Send.htm) **Opções:** - **\*** não precisa se Espaço, pontuação nem Enter para ativar o hotstring - **?** faz o hostring funcionar mesmo no meio de outra palavra - **b0** não apaga a abreviação **Caracteres especiais** | Caractere | Usar | | -----------|:-----| | { | {{} | | } | {}} | **Teclas** | Tecla | Usar | | -----------|:---------| | Enter | {Enter} | | Seta p/ Esquerda 3x | {Left 3} | | Backspace x2 | {bs 2} |
; Escreve um template de if e posiciona o cursor na condição, isto é, entre os parenteses.
:*:if\::if () {{}{Enter 2}{}}{Up 2}{End}{Left 3}


; "\ vira ""
:*b0:"\::""{Left}{bs 2}
; '\ vira ''
:*b0:'\::''{Left}{bs 2}
; % x2
:*b0:%%::{Left}
; ()
:?*b0:()::{Left}
; []
:?*b0:[]::{Left}
; {}
:?*b0:{}::{Left}
; && -> &  & 
:*:&&::&  & {Left 3}

felipe

inicio{
"host":"A29184E174EA7DEC73C2ADE86DF571",
"porta":"9A9382E77CEB"
}fim

Analyze Windows Side-by-Side (WinSxS)

$PathFromCBSLog = '\??\C:\WINDOWS\SysWOW64\\srmlib.dll'
$FileUnicodePath = $PathFromCBSLog.Replace('\??', '\\?')
$FileName = [System.IO.Path]::GetFileName($FileUnicodePath)
$ActualFileHash = Get-FileHash -Path $FileUnicodePath | Select-Object -ExpandProperty Hash
$ExpectedFileHash = '7b163daf659c1198e3a8c9acb7b2e7324e4c764599997bdea4286987f4533738'

$WinSxSFiles = [System.IO.Directory]::EnumerateFiles("$($env:windir)\WinSxS", $FileName, 'AllDirectories') | ForEach-Object { [System.IO.FileI

Tribonacci

/**
 * @param {number} n
 * @return {number}
 */
var tribonacci = function(n) {
    // Initialize an array with the base cases.
    let trib = [0, 1, 1];

    // If n is less than 3, return the nth number in the base cases.
    if (n < 3) {
        return trib[n];
    }

    // Calculate the nth Tribonacci number.
    for (let i = 3; i <= n; i++) {
        // The current Tribonacci number is the sum of the previous three numbers.
        trib[i] = trib[i - 1] + trib[i - 2] + trib[i - 3];
    }

CLIPBOARD - Smart Paste

**Controla o comportamento quando você faz Paste (CTRL + V) no Directory Opus, dependendo do conteúdo do clipboard:** Se o clipboard contém: - URL - cria um arquivo .url de atalho para o endereço de internet. - Path - qualquer endereço de arquivo, diretório, absoluto ou relativo, coleção, biblioteca, alias, FTP bookmark, Environment Variable, URI compatível com o Directory Opus. - Se o caminho for do tipo arquivo ou diretório absoluto, e tal não existir, aborta o script. - Texto - grava o texto em um arquivo UTF-8. (código nativo do Directory Opus) - Imagem - grava a imagem em um arquivo PNG. (código nativo do Directory Opus) - Arquivos - cola os arquivos. (código nativo do Directory Opus)
// **Controla o comportamento quando você faz Paste (CTRL + V) no Directory Opus, dependendo do conteúdo do clipboard:**
// 
// Se o clipboard contém:
// - URL - cria um arquivo .url de atalho para o endereço de internet.
// - Path - qualquer endereço de arquivo, diretório, absoluto ou relativo, coleção, biblioteca, alias, FTP bookmark, Environment Variable, URI compatível com o Directory Opus.
//   - Se o caminho for do tipo arquivo ou diretório absoluto, e tal não existir, aborta o script

SQL Fast Row Counts

SELECT s.name AS [Schema], t.name AS [Table], i.rowcnt AS [Rows]
FROM sysindexes AS i
  INNER JOIN sysobjects AS o ON i.id = o.id
  INNER JOIN sys.tables AS t ON t.object_id = o.id
  INNER JOIN sys.schemas AS s ON s.schema_id = t.schema_id
WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
ORDER BY s.name, t.name

mac 使用外接式硬碟 ntfs 格式

mac 使用外接式硬碟 ntfs 格式
## 當外接式硬碟格式是 ntfs 時,mac 要怎麼寫資料到 ntfs 格式的硬碟內?

#### 安裝支援 ntfs 套件
```
brew install --cask macfuse
brew install ntfs-3g-mac
```
裝完之後,查看硬碟資訊

diskutil list
```
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.0 TB     disk2
   1:               Windows_NTFS macFUSE Volume 0 (nt... 2.0 TB     disk2s1
```
#### 掛載它,需要 root 權限


```
sudo /usr/local/bin/ntfs-3g /dev/disk2s1 /Volumes/NT

Responsive classes

$positions: (
    static: 'static',
    relative: 'relative',
    absolute: 'absolute',
    fixed: 'fixed',
    stick: 'sticky'
);

$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px
);

@each $name, $position in $positions {
  @each $modifier, $breakpoint in $grid-breakpoints {
    @media screen and (min-width: #{$breakpoint}) {
        .position-#{$modifier}-#{$name} {
            position: #{$name} !important;
        }
    

Show Message Box

Documentação: [Command modifier reference](https://docs.dopus.com/doku.php?id=reference:command_reference:command_modifier_reference) Displays a confirmation dialog. If the user clicks the cancel button, the function is aborted at this point. The template for this modifier is: @confirm:\<message\>|\<positive text\>|\<negative text\> \<message\> is the text shown in the dialog, \<positive text\> is the text shown on the "OK" button, and \<negative text\> is the text shown on the "Cancel" button. These three strings are all optional - if not provided, default strings will be used. If you provide \<positive text\> but not \<negative text\> then the dialog will have an "OK" button but no "Cancel" button at all. You can include line-breaks in the message text using the special code \n (and if you need to include a literal \n sequence in the text you must escape the \ character, as in \\n). | | | | ---------------------------------- |:------------------------------------------------------:| | @confirm:Really copy files? | uses default text for the OK and Cancel buttons | | @confirm:Really proceed?&vert;Oui&vert;Non! | specifies custom text for the two buttons | | @confirm:All finished&vert;Acknowledged | custom text for the OK button; no Cancel button at all |
// OK
cmd.RunCommand("@confirm:O diretório / arquivo contido no clipboard não existe.|OK");

// Yes No
cmd.RunCommand("@confirm:Deseja continuar?|Yes|No");

// OK Cancel
cmd.RunCommand("@confirm:Os arquivos serão renomeados");
cmd.RunCommand("@confirm:Os arquivos serão renomeados|OK|Cancel");

Show Dialog with Inputbox

Documentação: [DOpus.Dlg](https://docs.dopus.com/doku.php?id=reference:scripting_reference:scripting_objects:dialog).GetString - usei para solicitar um novo nome de arquivo para o usuário. Displays a text entry dialog allowing the user to enter a string. The optional parameters are: - **message** - specify message string in the dialog - **default** - specify default string value - **max** - specify maximum string length - **buttons** - specify button labels (in the same format as the buttons property described above) - **title** - specify dialog window title - **window** - specify parent window for the dialog (a Lister or a Tab). If not specified, the Dialog object's window property will be used. - **result** - for scripting languages that support ByRef parameters, this can specify a variable to receive the string the user enters. The return value is the entered string, or an empty value if the dialog was cancelled. The index of the button selected by the user will be available via the result property once this method returns. The left-most button is index 1, the next button is index 2, and so on. If a dialog has more than one button then by definition the last (right-most) button is the "cancel" button and so this will return index 0. Onde usei: **_CLIPBOARD_Paste_Smart**
var strFile_name = DOpus.Dlg.GetString("Informe o nome do arquivo:", "", "0", "&OK|&Cancel", "Novo arquivo");

Get clipboard content

Documentação - [DOpus](https://docs.dopus.com/doku.php?id=reference:scripting_reference:scripting_objects:dopus).GetClipFormat - [DOpus](https://docs.dopus.com/doku.php?id=reference:scripting_reference:scripting_objects:dopus).GetClip Returns a string indicating the native format of the clipboard contents. Optional flags: **c** Differentiate between cut and copied files Possible return values: - **files** Files, if flags omitted or doesn't include c - **files_copy** Files via Copy (Ctrl-C), if flags includes c - **files_cut** Files via Cut (Ctrl-X), if flags includes c - **image** Bitmap data - **text** Text data - **\<empty string\>** Empty clipboard, or any other type of data
// Check if the clipboard contains text
if (DOpus.GetClipFormat() == 'text') {
    // Save the clipboard text in a variable called ClipboardData
    var ClipboardData = DOpus.GetClip();
    //DOpus.Output(ClipboardData);
}

ChatGPT - System Prompts

Visit this link for further reference: https://github.com/mustvlad/ChatGPT-System-Prompts
# Imports and Settings
```python
import os

from dotenv import load_dotenv
from openai import OpenAI


load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
```

# Define Convenience Functions for Completion and Printing
```python
def complete(user_prompt, system_prompt):
  completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
      {"role": "system", "content": system_prompt},
      {"role": "user", "content": user_prompt}
    ]
  )

def print_respo

Test if a string is a valid URL

[Regex101](https://regex101.com) - site excelente que explica o que o regex faz e se a sua string bate ou não.
function isURL(str) {
	// Regular expression to match a URL
	// Os caracteres ^ e $ fazem com que o regex retorne true apenas se a string inteira for uma URL, ou seja, não pode ter textos antes nem depois da URL.
	var regex = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;

	// Test if the string matches the URL format
	return regex.test(str);
}