Skip to content

Instantly share code, notes, and snippets.

cemerson / csharp-get-exception-details-in-html.cs
Last active July 18, 2024 13:22
Get C# Exception Details String (HTML)
/* ---------- Usage ----------------------------------
string exceptionDetailsHtml = ExceptionHelper.GetExceptionDetailsInNicelyFormatted(ex, "HTML");
string exceptionDetailsText = ExceptionHelper.GetExceptionDetailsInNicelyFormatted(ex, "TEXT");
// ---------------------------------------------------- */
public static class ExceptionHelper
public static string GetExceptionDetailsInNicelyFormatted(Exception ex, string displayFormat = "TEXT")
cemerson / javascript-obfuscate-all-html-text.js
Created July 2, 2024 14:09
javascript - obfuscate all html text
function getRandomString(length) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let result = '';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
return result;
cemerson / tsql-transaction-template-rollback-catcherror.sql
Last active June 24, 2024 19:52
TSQL: Template for transaction
-- Start a transaction
-- Your T-SQL statements go here
-- Example:
-- If everything is successful, commit the transaction
cemerson / sql-empty-entire-database-ignore-constraints.sql
Created May 17, 2024 19:49
SQL: delete all data from all tables ignoring constraints
-- Step 1: Disable all foreign key constraints
-- Step 2: Generate delete statements for all tables
-- This part will dynamically generate the delete statements
-- Collect all table names in the current database
SELECT @sql += 'DELETE FROM ' + QUOTENAME( + '.' + QUOTENAME( + '; '
FROM sys.tables t
cemerson / autohotkey-excel-extract-hyperlinks-from-selected-cells-cemerson.ahk
Last active March 18, 2024 14:23
AutoHotkey/Excel: Extract Hyperlinks from Selected Cells
cemerson / chatgtp-fix-export-button-hack.js
Created February 9, 2024 11:01
ChatGPT: Fix app export buttons (hack)
async function fixChatGPTExport() {
chatConf = (await invoke('get_app_conf')) || {};
actionsArea = document.querySelector('form>div>div>div');
function shouldAddButtons(actionsArea) {
// first, check if there's a "Try Again" button and no other buttons
const buttons = actionsArea.querySelectorAll('button');
const hasTryAgainButton = Array.from(buttons).some((button) => {
return !/download-/.test(;
cemerson /
Created January 16, 2024 13:37
MS Excel - Delete All Worksheets at once but one

In Microsoft Excel, there isn't a built-in feature to delete all worksheets except one directly. However, you can use a VBA (Visual Basic for Applications) macro to achieve this. Here's a step-by-step guide:

Press Alt + F11 to open the VBA editor. In the editor, insert a new module by right-clicking on any item in the Project Explorer, selecting Insert, and then choosing Module. Copy and paste the following VBA code into the module: vba Copy code Sub DeleteAllSheetsExceptOne() Dim ws As Worksheet Dim wsToKeep As Worksheet

cemerson /
Created November 16, 2023 13:34
SSL: Generate self signed cert via powershell

// Run in powershell as admin - change all ##values## as needed

$authorityCert = New-SelfSignedCertificate -Subject "CN=##MyCertFriendlyName##,OU=IT,O=##MyCompanyName## Certificate Authority,C=US" -KeyAlgorithm RSA -KeyLength 4096 -KeyUsage CertSign, CRLSign, DigitalSignature, KeyEncipherment, DataEncipherment -KeyExportPolicy Exportable -NotBefore (Get-Date) -NotAfter (Get-Date).AddYears(10)

cemerson /
Created November 15, 2023 11:14
Chrome: Fix the Your Connection is not Private issue for localhost dev work

In Chrome, browse to: chrome://flags/ . Search for “insecure” and you should see the option to “Allow invalid certificates for resources loaded from localhost.” Enable that option and restart your browser.Oct 18, 2023

cemerson / bookmarklet-rumble-com-sort-video-search-results-by-duration.js
Created November 13, 2023 10:58 Bookmarklet sort video search results by duration
/* Sort video search results page by duration (low to high) */ javascript:(function() {%0A %2F%2F Get all the <li> elements with the class 'video-listing-entry'%0A const videoEntries %3D document.querySelectorAll('')%3B%0A%0A %2F%2F Convert the NodeList to an array for easier sorting%0A const videoEntriesArray %3D Array.from(videoEntries)%3B%0A%0A %2F%2F Custom sorting function to sort by video duration%0A function compareDurations(a%2C b) %7B%0A %2F%2F Get the duration values from the data-value attribute of <span> elements%0A const durationA %3D a.querySelector('.video-item--duration').getAttribute('data-value')%3B%0A const durationB %3D b.querySelector('.video-item--duration').getAttribute('data-value')%3B%0A%0A %2F%2F Convert the duration strings to time in seconds for comparison%0A const timeA %3D convertDurationToSeconds(durationA)%3B%0A const timeB %3D convertDurationToSeconds(durationB)%3B%0A%0A %2F%2F Compare and return the result%0A ret