<!doctype html>
<html lang="es">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />

    <meta name="description" content="Conjunto de herramientas de uso cotidiano por los desarrolladores como Ver tu IP, Generador de Claves, Calculo de letra de DNI, urls amigables, sha1, md5, base64, encriptar" />
    <link rel="canonical" href="https://basnek.com/tools/" />
    <meta property="og:locale" content="es_ES" />
    <meta property="og:type" content="website" />
    <meta property="og:title" content="Tools by Basnek.com" />
    <meta property="og:description" content="Conjunto de herramientas de uso cotidiano por los desarrolladores como Ver tu IP, Generador de Claves, Calculo de letra de DNI, urls amigables, sha1, md5, base64, encriptar" />
    <meta property="og:url" content="https://basnek.com/tools/" />
    <meta property="og:site_name" content="Tools by Basnek.com" />
    <meta name="twitter:card" content="summary_large_image" />
    <link rel="canonical" href="https://basnek.com/tools/" />


    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <title>Tools by Basnek.com</title>

    <!-- Google Tag Manager -->
    <script>
        (function(w, d, s, l, i) {
            w[l] = w[l] || [];
            w[l].push({
                'gtm.start': new Date().getTime(),
                event: 'gtm.js'
            });
            var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s),
                dl = l != 'dataLayer' ? '&l=' + l : '';
            j.async = true;
            j.src =
                'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
            f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', 'GTM-PP73WM2');
    </script>
    <!-- End Google Tag Manager -->

</head>

<body>
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PP73WM2" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->

    <h1>Tools by Basnek.com</h1>

    <div class="container overflow-hidden">



        <ul class="nav nav-tabs" id="myTab" role="tablist">
            <li class="nav-item" role="presentation">
                <button class="nav-link active" id="herramientas-tab" data-bs-toggle="tab" data-bs-target="#herramientas" role="tab" aria-controls="herramientas" aria-selected="true">Genéricas</button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="lipsum-tab" data-bs-toggle="tab" data-bs-target="#lipsum" role="tab" aria-controls="lipsum" aria-selected="false">Lipsum</button>
            </li>
            <li class="nav-item" role="presentation">
                <buttona class="nav-link" id="editor-tab" data-bs-toggle="tab" data-bs-target="#editor" role="tab" aria-controls="editor" aria-selected="false">Editor</button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="tags-tab" data-bs-toggle="tab" data-bs-target="#tags" role="tab" aria-controls="tags" aria-selected="false">Tags</button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="testcolors-tab" data-bs-toggle="tab" data-bs-target="#testcolors" role="tab" aria-controls="testcolors" aria-selected="false">Test Colors</button>
            </li>
                        <li class="nav-item" role="presentation">
                <button class="nav-link" id="terminal-tab" data-bs-toggle="tab" data-bs-target="#terminal" role="tab" aria-controls="terminal" aria-selected="false">Terminal Snippets</button>
            </li>

            <li class="nav-item" role="presentation">
                <button class="nav-link" id="sitemap-tab"><a href="https://basnek.com/tools/verificatusitemap/" target="_blank">Verifica tu Sitemap</a></button>
            </li>
            <li class="nav-item" role="presentation">
                <button class="nav-link" id="ias-tab" data-bs-toggle="tab" data-bs-target="#ias" role="tab" aria-controls="ias" aria-selected="false">Catalogo de IAs</button>
            </li>

        </ul>
        <div class="tab-content" id="myTabContent">
            <div class="tab-pane fade show active" id="herramientas" role="tabpanel" aria-labelledby="herramientas-tab">

                <div class="container mt-2">
                    <table class="table table-bordered">
                        <tbody>
                            <tr>
                                <th>Generador de Claves v.2</th>
                                <td>
                                    <ul>
                                        <li>BURRO@85@fresa</li>
                                        <li>cinco25LUNA</li>
                                        <li>Azul-84</li>
                                        <li>LAGARTO#89.lilas-65@</li>
                                    </ul>
                                </td>
                                <td><a href="./?hash=20250526084553">Generar nueva contraseña</a><br>verificar la seguridad en: <a href="https://password.kaspersky.com/" targe="_blank">https://password.kaspersky.com/</a></td>
                            </tr>
                            <tr>
                                <th>Mi IP</th>
                                <td>66.249.93.134<br>Europe<br>IPv4: 66.249.93.134<br>Failed to fetch IP</td>
                                <td>Europe<br>Failed to fetch IP                                    <br>
                                    
                                </td>
                            </tr>
                            <tr>
                                <th>NIE/CIF</th>
                                <td>
                                    <form>
                                        <label for="dni_input">Ingresa la parte númerica DNI:</label>
                                        <input type="text" id="dni_input" name="dni_input" value="77285018">
                                        <button type="button" onclick="miTools.calculateDniLetter();">Calcular letra del DNI</button>

                                    </form>

                                </td>
                                <td>
                                    <p id="result_dni"></p>
                                </td>
                            </tr>
                            <tr>
                                <th>Friendly URL</th>
                                <td>
                                    <form id="frm_friendly_url" name="frm_friendly_url" method="post" action="">

                                        Texto: <input name="frm_friendly_url_texto" type="text" id="frm_friendly_url_texto" value="" size="50" placeholder="Introduzca un texto..." /><br>
                                    </form>
                                </td>
                                <td><input name="j_frm_friendly_url_resultado" type="text" id="j_frm_friendly_url_resultado" value="" size="50" readonly="" />
                                </td>
                            </tr>
                            <tr>
                                <th>String 2 MD5</th>
                                <td>
                                    <form id="frm_md5" name="frm_md5" method="post" action="" onsubmit="return false;">
                                        <label for="frm_md5_texto"></label>
                                        String 2 SHA1:
                                        <input name="frm_md5_texto" type="text" id="frm_md5_texto" value="" size="50" />
                                        <input type="button" name="frm_md5_procesar" id="frm_md5_procesar" value="Send" />
                                    </form>
                                </td>
                                <td>
                                    <div id="j_frm_md5_resultado" style="display:none;">
                                        <span id="j_frm_md5_resultado_texto"></span>
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <th>String 2 SHA1</th>
                                <td>
                                    <form id="frm_sha1" name="frm_sha1" method="post" action="" onsubmit="return false;">
                                        <label for="frm_sha1_texto"></label>
                                        String 2 SHA1:
                                        <input name="frm_sha1_texto" type="text" id="frm_sha1_texto" value="" size="50" />
                                        <input type="button" name="frm_sha1_procesar" id="frm_sha1_procesar" value="Send" />
                                    </form>
                                </td>
                                <td>
                                    <div id="j_frm_sha1_resultado" style="display:none;">
                                        <span id="j_frm_sha1_resultado_texto"></span>
                                    </div>
                                </td>
                            </tr>

                            <tr>
                                <th>AntiSpam</th>
                                <td>
                                                                        <form id="frm_antispam" name="frm_antispam" method="get" action="">
                                        <input name="frm_antispam_email" type="text" id="frm_antispam_email" value="" size="60" placeholder="Dirección de email" />
                                        <input type="submit" name="frm_antispam_procesar" id="frm_antispam_procesar" value="Send" />
                                    </form>
                                </td>
                                <td>                                 </td>
                            </tr>




                            <tr>
                                <th>Buscando por Consola</th>

                                <td>
                                    <label>Qué buscar:</label>
                                    <input type="text" id="dato" oninput="generarComandos()"><br>
                                    <label>En qué fichero:</label>
                                    <input type="text" id="fichero" oninput="generarComandos()">
                                </td>
                                <td>
                                    <label>Comando 1: <button onclick="copiarAlPortapapeles('comando1')">📋</button></label><br>
                                    <textarea id="comando1" class="codeblock" rows="2" readonly style="width:100%"></textarea>
                                    <br><br>

                                    <label>Comando 2: <button onclick="copiarAlPortapapeles('comando2')">📋</button></label><br>
                                    <textarea id="comando2" class="codeblock" rows="4" readonly style="width:100%"></textarea>

                                </td>
                            </tr>




                            <tr>
                                <th>Encriptar</th>
                                <td>
                                    <form id="frm_crypt_encode" name="frm_crypt_encode" method="post" action="">
                                        <input name="frm_crypt_encode_frase" type="text" id="frm_crypt_encode_frase" value="" size="20" placeholder="Tu Frase/Palabra Secreta:" /> <br>
                                        <textarea name="frm_crypt_encode_texto" type="text" id="frm_crypt_encode_texto" value="" rows="3" cols="80" placeholder="Tu contenido a encriptar:"></textarea>
                                        <br><input type="submit" name="frm_crypt_encode_procesar" id="frm_crypt_encode_procesar" value="Send" />


                                        
                                    </form>
                                </td>
                                <td> <pre>fkIoInc2ZsA=</pre>                                </td>
                            </tr>
                            <tr>
                                <th>Desencriptar</th>
                                <td>
                                    <form id="frm_crypt_decode" name="frm_crypt_decode" method="post" action="">
                                        <input name="frm_crypt_decode_frase" type="text" id="frm_crypt_decode_frase" value="" size="20" placeholder="Tu Frase/Palabra Secreta:" /> <br>
                                        <textarea name="frm_crypt_decode_texto" type="text" id="frm_crypt_decode_texto" value="" rows="3" cols="80" placeholder="Tu contenido a encriptar:"></textarea>
                                        <br><input type="submit" name="frm_crypt_decode_procesar" id="frm_crypt_decode_procesar" value="Send" />


                                        
                                    </form>
                                </td>
                                <td> <pre></pre>                                </td>
                            </tr>


                            <tr>
                                <th>Base64 - Encode</th>
                                <td>
                                    <form id="frm_base64_encode" name="frm_base64_encode" method="post" action="">
                                        <label for="frm_base64_encode_texto"></label>
                                        String:
                                        <input name="frm_base64_encode_texto" type="text" id="frm_base64_encode_texto" value="" size="50" />
                                        <input type="submit" name="frm_base64_encode_procesar" id="frm_base64_encode_procesar" value="Send" />
                                        

                                    </form>
                                </td>
                                <td> <pre></pre>                                </td>
                            </tr>

                            <tr>
                                <th>Base64 - Decode</th>
                                <td>
                                    <form id="frm_base64_decode" name="frm_base64_decode" method="post" action="">
                                        <label for="frm_base64_decode_texto"></label>
                                        String:
                                        <input name="frm_base64_decode_texto" type="text" id="frm_base64_decode_texto" value="" size="50" />
                                        <input type="submit" name="frm_base64_decode_procesar" id="frm_base64_decode_procesar" value="Send" />
                                                                            </form>

                                </td>
                                <td><pre></pre>                                </td>
                            </tr>


                            <tr>
                                <th>Cadena a Frase</th>
                                <td>
                                    <form id="frm_cadena_a_frase" name="frm_cadena_a_frase" method="post" action="">

                                        Texto: <input name="frm_cadena_a_frase_origen" type="text" id="frm_cadena_a_frase_origen" value="" size="50" placeholder="Introduzca un texto..." /><br>
                                    </form>
                                </td>
                                <td><input name="j_frm_cadena_a_frase_origen_resultado" type="text" id="j_frm_cadena_a_frase_origen_resultado" value="" size="50" readonly="" />
                                </td>
                            </tr>


                            <tr>
                                <th>Tarjetas de crédito para pruebas</th>
                                <td>
                                    <form id="creditCardForm">
                                        <div class="mb-3">
                                            <label for="cc_card_number" class="form-label">Card Number</label>
                                            <input type="text" class="form-control" id="cc_card_number" name="cc_card_number" readonly>
                                        </div>
                                        <div class="row">
                                            <div class="col-md-6 mb-3">
                                                <label for="cc_expiry" class="form-label">Expiration Date</label>
                                                <input type="text" class="form-control" id="cc_expiry" name="cc_expiry" readonly>
                                            </div>
                                            <div class="col-md-6 mb-3">
                                                <label for="cc_cvc" class="form-label">CVC</label>
                                                <input type="text" class="form-control" id="cc_cvc" name="cc_cvc" readonly>
                                            </div>
                                        </div>
                                        <div class="mb-3">
                                            <label for="cc_card_type" class="form-label">Card Type</label>
                                            <input type="text" class="form-control" id="cc_card_type" name="cc_card_type" readonly>
                                        </div>
                                        <button type="button" class="btn btn-primary" id="generateCard">Generate Card</button>
                                    </form>
                                </td>
                                <td>
                                    <p>🌿 ¿Buscas darle personalidad a tu espacio verde? En <a href="https://macetitas.es/macetas-originales/">Macetitas.es encontrarás macetas originales únicas</a> que sorprenderán a todos.</p>
                                    <hr>
                                    <p>💻 ¿Quieres velocidad, seguridad y soporte de primera para tu web? Descubre por qué <a href="https://www.comvive.es/hosting/">Comvive es la empresa hosting de confianza para tu proyecto</a>.</p>
                                </td>
                            </tr>

                        </tbody>
                    </table>
                </div>

            </div>

            <div class="tab-pane fade" id="lipsum" role="tabpanel" aria-labelledby="lipsum-tab">

                <div class="p-2 border bg-light">
                    <h2>Lorem Ipsum</h2>
                    <hr>
                    <form name="frm_lipsum" id="frm_lipsum" onSubmit="objectTag();return false;">
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td width="36%" valign="top">
                                    <table width="98%" border="0" cellpadding="2" cellspacing="4" class="caja" valign="baseline">
                                        <tr>
                                            <td width="104" align="right" nowrap>
                                                <p>Tipo de contenido : </p>
                                            </td>
                                            <td width="216" align="left">
                                                <p>
                                                    <input name="theFiller" type="radio" value="lorem" checked onClick="setSelMenu(this.value)">
                                                    Lorem Ipsum
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>&nbsp;</p>
                                            </td>
                                            <td align="left">
                                                <p>
                                                    <input type="radio" name="theFiller" value="cicero" onClick="setSelMenu(this.value)">
                                                    Cicero Speech
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>&nbsp;</p>
                                            </td>
                                            <td align="left" nowrap>
                                                <p>
                                                    <input type="radio" name="theFiller" value="corp" onClick="setSelMenu(this.value)">
                                                    Corporate Mumbo-Jumbo
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>&nbsp;</p>
                                            </td>
                                            <td align="left">
                                                <p>
                                                    <input type="radio" name="theFiller" value="shakespeare" onClick="setSelMenu(this.value)">
                                                    Shakespeare
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>&nbsp;</p>
                                            </td>
                                            <td align="left">
                                                <p>
                                                    <input type="radio" name="theFiller" value="quijote" onClick="setSelMenu(this.value)">
                                                    El Quijote
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td align="right">
                                                <p>Formato: </p>
                                            </td>
                                            <td align="left">
                                                <p>
                                                    <select name="theFormat">
                                                        <option value="para" selected>Paragraphs</option>
                                                        <option value="cont">Continuous text</option>
                                                        <option value="ul">Unordered list</option>
                                                        <option value="ol">Numbered list</option>
                                                    </select>
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td align="right">
                                                <p>Cantidad: </p>
                                            </td>
                                            <td align="left">
                                                <p>
                                                    <input name="theAmount" type="text">
                                                    <input type="button" name="Submit" value="Procesar" onClick="objectTag();">
                                                </p>
                                            </td>
                                        </tr>

                                    </table>
                                </td>
                                <td width="100%" valign="top" align="left">
                                    <div align="left" class="caja" id="box"></div>
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>

            </div>
            <div class="tab-pane fade" id="editor" role="tabpanel" aria-labelledby="editor-tab">
                <div class="p-2 border bg-light">
                    <h2>Editor</h2>

                    <textarea name="editor1"></textarea>

                </div>

            </div>
            <div class="tab-pane fade" id="tags" role="tabpanel" aria-labelledby="tags-tab">
                <div class="p-2 border bg-light">
                    <h2>TAGS para test HTML</h2>

                    <label for="textarea"></label>
                    <textarea name="textarea" id="textarea" cols="45" rows="5">
                            <h1>Heading 1</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <h2>Heading 2</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <h3>Heading 3</h3>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <h4>Heading 4</h4>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <h5>Heading 5</h5>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <h6>Heading 6</h6>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <div class="content_separator">&nbsp;</div>
        <h2>Images in text</h2>
        <p>Curabitur faucibus risus quis lectus. <a href="#">Donec vehicula</a>. Pellentesque nec, lectus. Nullam dictum sem. Phasellus varius. Vestibulum in felis in mauris consequat molestie</p>
        <p><img alt="" class="alignleft" height="75" src="https://basnek.com/images/logo.png" width="75" /></p>
        <p>Consectetur adipiscing elit. In nisi. Duis condimentum est nec augue blandit scelerisque. Phasellus varius. Vestibulum in felis in mauris consequat molestie. Sem nec pellentesque condimentum, turpis massa ultricies nisi, at molestie justo eros ac velit.</p>
        <p><img alt="" class="alignright" height="75" src="https://basnek.com/images/logo.png" width="75" /></p>
        <p>Curabitur euismod mi ac neque. Cras vel tortor molestie <a href="#">tortor luctus</a> facilisis. Nulla a nunc. Vivamus est. Integer ac sem quis ipsum dignissim sodales. Nam pulvinar sem eu nibh. Suspendisse non nulla et ligula bibendum facilisis. Suspendisse potenti. Vivamus leo.</p>
        <p>Nulla lacus tortor, ornare vitae, vulputate vitae, sed quis magna. Pellentesque urna urna, bibendum non, ornare in, sollicitudin quis, est.</p>
        <div class="clearer">&nbsp;</div>
        <div class="content_separator">&nbsp;</div>
        <h2>Messages</h2>
        <div class="success">Success!</div>
        <div class="notice">Notice</div>
        <div class="error">Error..</div>
        <div class="content_separator">&nbsp;</div>
        <h2>Blockquote</h2>
        <blockquote>
            <p><span>"</span> Praesent orci nisi, interdum quis, tristique vitae, consectetur sed, arcu. Ut at sapien non dolor semper sollicitudin. Etiam semper erat quis odio. Quisque commodo suscipit velit. Nulla facilisi. <span>"</span></p>
            - Duis justo quam</blockquote>
        <div class="content_separator">&nbsp;</div>
        <h2>Lists</h2>
        <h3>Unsorted list</h3>
        <ul>
            <li>Blandit in, interdum a</li>
            <li>Ultrices non lectus</li>
            <li>Nunc id odio</li>
            <li>Fusce ultricies</li>
        </ul>
        <h3>Ordered list</h3>
        <ol>
            <li>Blandit in, interdum a</li>
            <li>Ultrices non lectus</li>
            <li>Nunc id odio</li>
            <li>Fusce ultricies</li>
        </ol>
        <h3>Definition list</h3>
        <dl>
            <dt>title</dt>
            <dd>definition</dd>
            <dd>definition</dd>
            <dt>title</dt>
            <dt>title</dt>
            <dd>definition</dd>
            <dt>title</dt>
            <dd>definition</dd>
        </dl>
        <div class="content_separator">&nbsp;</div>
        <h2>Tables</h2>
        <h3>Data table</h3>
        <table class="data-table">
            <tbody>
                <tr>
                    <th>Property 1</th>
                    <th>Property 2</th>
                    <th>Property 3</th>
                    <th>Property 4</th>
                </tr>
                <tr class="even">
                    <td>Value 1.1</td>
                    <td>Value 1.2</td>
                    <td>Value 1.3</td>
                    <td>Value 1.4</td>
                </tr>
                <tr>
                    <td>Value 2.1</td>
                    <td>Value 2.2</td>
                    <td>Value 2.3</td>
                    <td>Value 2.4</td>
                </tr>
                <tr class="even">
                    <td>Value 3.1</td>
                    <td>Value 3.2</td>
                    <td>Value 3.3</td>
                    <td>Value 3.4</td>
                </tr>
                <tr>
                    <td>Value 4.1</td>
                    <td>Value 4.2</td>
                    <td>Value 4.3</td>
                    <td>Value 4.4</td>
                </tr>
            </tbody>
        </table>					
                        </textarea>
                    <hr />
                    <h1>Heading 1</h1>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <h2>Heading 2</h2>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <h3>Heading 3</h3>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <h4>Heading 4</h4>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <h5>Heading 5</h5>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <h6>Heading 6</h6>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <div class="content_separator">&nbsp;</div>
                    <h2>Images in text</h2>
                    <p>Curabitur faucibus risus quis lectus. <a href="#">Donec vehicula</a>. Pellentesque nec, lectus. Nullam dictum sem. Phasellus varius. Vestibulum in felis in mauris consequat molestie</p>
                    <p><img alt="" class="alignleft" height="75" src="https://basnek.com/images/logo.png" width="75" /></p>
                    <p>Consectetur adipiscing elit. In nisi. Duis condimentum est nec augue blandit scelerisque. Phasellus varius. Vestibulum in felis in mauris consequat molestie. Sem nec pellentesque condimentum, turpis massa ultricies nisi, at molestie justo eros ac velit.</p>
                    <p><img alt="" class="alignright" height="75" src="https://basnek.com/images/logo.png" width="75" /></p>
                    <p>Curabitur euismod mi ac neque. Cras vel tortor molestie <a href="#">tortor luctus</a> facilisis. Nulla a nunc. Vivamus est. Integer ac sem quis ipsum dignissim sodales. Nam pulvinar sem eu nibh. Suspendisse non nulla et ligula bibendum facilisis. Suspendisse potenti. Vivamus leo.</p>
                    <p>Nulla lacus tortor, ornare vitae, vulputate vitae, sed quis magna. Pellentesque urna urna, bibendum non, ornare in, sollicitudin quis, est.</p>
                    <div class="clearer">&nbsp;</div>
                    <div class="content_separator">&nbsp;</div>
                    <h2>Messages</h2>
                    <div class="success">Success!</div>
                    <div class="notice">Notice</div>
                    <div class="error">Error..</div>
                    <div class="content_separator">&nbsp;</div>
                    <h2>Blockquote</h2>
                    <blockquote>
                        <p><span>"</span> Praesent orci nisi, interdum quis, tristique vitae, consectetur sed, arcu. Ut at sapien non dolor semper sollicitudin. Etiam semper erat quis odio. Quisque commodo suscipit velit. Nulla facilisi. <span>"</span></p>
                        - Duis justo quam
                    </blockquote>
                    <div class="content_separator">&nbsp;</div>
                    <h2>Lists</h2>
                    <h3>Unsorted list</h3>
                    <ul>
                        <li>Blandit in, interdum a</li>
                        <li>Ultrices non lectus</li>
                        <li>Nunc id odio</li>
                        <li>Fusce ultricies</li>
                    </ul>
                    <h3>Ordered list</h3>
                    <ol>
                        <li>Blandit in, interdum a</li>
                        <li>Ultrices non lectus</li>
                        <li>Nunc id odio</li>
                        <li>Fusce ultricies</li>
                    </ol>
                    <h3>Definition list</h3>
                    <dl>
                        <dt>title</dt>
                        <dd>definition</dd>
                        <dd>definition</dd>
                        <dt>title</dt>
                        <dt>title</dt>
                        <dd>definition</dd>
                        <dt>title</dt>
                        <dd>definition</dd>
                    </dl>
                    <div class="content_separator">&nbsp;</div>
                    <h2>Tables</h2>
                    <h3>Data table</h3>
                    <table class="data-table">
                        <tbody>
                            <tr>
                                <th>Property 1</th>
                                <th>Property 2</th>
                                <th>Property 3</th>
                                <th>Property 4</th>
                            </tr>
                            <tr class="even">
                                <td>Value 1.1</td>
                                <td>Value 1.2</td>
                                <td>Value 1.3</td>
                                <td>Value 1.4</td>
                            </tr>
                            <tr>
                                <td>Value 2.1</td>
                                <td>Value 2.2</td>
                                <td>Value 2.3</td>
                                <td>Value 2.4</td>
                            </tr>
                            <tr class="even">
                                <td>Value 3.1</td>
                                <td>Value 3.2</td>
                                <td>Value 3.3</td>
                                <td>Value 3.4</td>
                            </tr>
                            <tr>
                                <td>Value 4.1</td>
                                <td>Value 4.2</td>
                                <td>Value 4.3</td>
                                <td>Value 4.4</td>
                            </tr>
                        </tbody>
                    </table>

                </div>

            </div>
            <div class="tab-pane fade" id="testcolors" role="tabpanel" aria-labelledby="testcolors-tab">
                <div class="p-2 border bg-light">
                    <h2>Test Colors</h2>

                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                                                <div class="bloques">
                                <input value="#fff" class="j_color" />
                                <input value="" />
                            </div>
                    
                </div>

            </div>
            
            <div class="tab-pane fade" id="ias" role="tabpanel" aria-labelledby="ias-tab">
                <div class="p-2 border bg-light">
                    <h2>Catalogo de IAs en uso</h2>
                    <hr>

<h3>🧠 Asistentes conversacionales</h3>
<ul>
  <li><a href="https://chat.openai.com/" target="_blank" rel="noopener noreferrer"><strong>ChatGPT</strong></a><br>
    Asistente conversacional de OpenAI que genera textos, responde preguntas, escribe código y más. Ideal para tareas creativas, estudio o trabajo.
  </li>
  <li><a href="https://chat.deepseek.com/" target="_blank" rel="noopener noreferrer"><strong>DeepSeek</strong></a><br>
    DeepSeek es una IA china con modelos de lenguaje avanzados y de código abierto. Su chatbot destaca por su eficiencia y gran rendimiento.
  </li>
  <li><a href="https://x.ai/" target="_blank" rel="noopener noreferrer"><strong>Grok</strong></a><br>
    Grok es la IA conversacional de xAI, empresa de Elon Musk, integrada en X. Ofrece respuestas inteligentes con humor, disponible para usuarios Premium+.
  </li>
</ul>

<h3>🎨 Creatividad / Diseño / Imágenes</h3>
<ul>
  <li><a href="https://pika.art/" target="_blank" rel="noopener noreferrer"><strong>Pika.art</strong></a><br>
    Herramienta que transforma descripciones de texto o imágenes en vídeos realistas de hasta 10 segundos. Útil para animación y contenido visual.
  </li>
  <li><a href="https://www.midjourney.com/" target="_blank" rel="noopener noreferrer"><strong>Midjourney</strong></a><br>
    IA que genera imágenes artísticas desde texto. Muy usada para concept art, ilustración y creatividad profesional.
  </li>
  <li><a href="https://leonardo.ai/" target="_blank" rel="noopener noreferrer"><strong>Leonardo.Ai</strong></a><br>
    Generador de imágenes desde texto con calidad profesional. Ideal para diseño, cómics y videojuegos.
  </li>
  <li><a href="https://runwayml.com/" target="_blank" rel="noopener noreferrer"><strong>Runway ML</strong></a><br>
    Permite generar y editar imágenes y vídeos con IA. Útil para animación, efectos y producción creativa.
  </li>
</ul>

<h3>✍️ Escritura / Redacción / Corrección</h3>
<ul>
  <li><a href="https://www.jasper.ai/" target="_blank" rel="noopener noreferrer"><strong>Jasper</strong></a><br>
    IA para redacción publicitaria y marketing. Ideal para contenido web, anuncios, blogs y redes sociales.
  </li>
  <li><a href="https://www.scribbr.com/ai-proofreader/" target="_blank" rel="noopener noreferrer"><strong>Scribbr AI</strong></a><br>
    Corrige gramática y estilo de textos académicos. Útil para ensayos, tesis o papers científicos.
  </li>
</ul>

<h3>🎙️ Voz y Audio</h3>
<ul>
  <li><a href="https://www.elevenlabs.io/" target="_blank" rel="noopener noreferrer"><strong>ElevenLabs</strong></a><br>
    Generador de voz realista desde texto, con múltiples idiomas y acentos. Ideal para narración y doblaje.
  </li>
  <li><a href="https://www.voicemod.net/" target="_blank" rel="noopener noreferrer"><strong>Voicemod</strong></a><br>
    Modificador de voz en tiempo real con efectos divertidos. Muy usado en videojuegos y streaming.
  </li>
</ul>

<h3>📈 Datos / Productividad / Automatización</h3>
<ul>
  <li><a href="https://www.notion.so/product/ai" target="_blank" rel="noopener noreferrer"><strong>Notion AI</strong></a><br>
    Asistente integrado en Notion para redactar, resumir, traducir o estructurar ideas y contenidos.
  </li>
  <li><a href="https://www.chatpdf.com/" target="_blank" rel="noopener noreferrer"><strong>ChatPDF</strong></a><br>
    Analiza cualquier PDF y permite hacerle preguntas. Ideal para resumir o extraer contenido clave.
  </li>
</ul>

<h3>👩‍🏫 Educación / Aprendizaje</h3>
<ul>
  <li><a href="https://socratic.org/" target="_blank" rel="noopener noreferrer"><strong>Socratic (by Google)</strong></a><br>
    IA educativa que responde dudas con explicaciones claras. Útil para estudiantes de primaria a universidad.
  </li>
  <li><a href="https://www.khanacademy.org/khan-labs" target="_blank" rel="noopener noreferrer"><strong>Khanmigo</strong></a><br>
    Asistente IA de Khan Academy para aprender paso a paso. Ideal para refuerzo escolar y autoaprendizaje.
  </li>
</ul>

                </div>
            </div>


            <div class="tab-pane fade" id="terminal" role="tabpanel" aria-labelledby="terminal-tab">
                <div class="p-2 border bg-light">
                    <h2>Terminal Snippets</h2>
                    <a href="#ts-listar">Listar</a> | <a href="#ts-buscar">Buscar</a> | <a href="#ts-tar">Des/Comprimir</a> | <a href="#ts-misc">Miscelaneos</a> | <a href="#ts-mysql">MySql</a>
                    <hr>
                    <h3 id="ts-listar">Listar</h3>
                    <strong># Listar ficheros con atributos</strong>
                    <pre>ls -lhaG</pre>
                    <strong># Listar ficheros con atributos ordenado x Fecha DESC (FreeBSD)</strong>
                    <pre>ls -lhaGt --time-style=+"%Y-%m-%d %H:%M:%S" | sort -r</pre>
                    <strong># Listar ficheros con atributos ordenado x Fecha DESC (Debian)</strong>
                    <pre>ls -lhAt --time-style=+"%Y-%m-%d %H:%M:%S" | grep -v '^total'</pre>
                    <strong># Limpiando? Listar carpetas con +100 ficheros .log (FreeBSD)</strong>
                    <pre>find . -type d -exec sh -c 'echo -n "{} "; find "{}" -maxdepth 1 -type f -name "*.log" | wc -l' \; | awk '$NF > 100'</pre>
                    <strong># Carpetas Tamaños</strong>
                    <pre># Linux
find -P ./ -maxdepth 1 -type d -exec echo -n "{} -> " \; -exec du -sh {} \;
# Windows PoserSehell
Get-ChildItem -Directory | ForEach-Object { "{0} -> {1:N2} MB" -f $_.FullName, ((Get-ChildItem -Path $_.FullName -File | Measure-Object -Property Length -Sum).Sum / 1MB) }
</pre>
                    <strong># Carpetas Tamaños c/ Ficheros</strong>
                    <pre># Linux
find -P ./ -maxdepth 1 -type d -exec sh -c 'printf "%s -> %s archivos, %s\n" "{}" "$(find "{}" -type f | wc -l)" "$(du -sh "{}" | cut -f1)"' \;
</pre>

                    <strong># Listar Ficheros de mas de x días [Borrrar]</strong>
                    <br><textarea rows="1" cols="80">find . -maxdepth 1 -type f -mtime +90</textarea> [-delete] <br>
                    <br><textarea rows="1" cols="80">find . -maxdepth 1 -type f -mtime +60 -name '*actuaciones.pdf' </textarea> [-print | -delete] <br>
                    <strong># Listar Total de Ficheros </strong><br>
                    <pre>find . -maxdepth 1 -type f | wc -l</pre>
                    <strong># Contar ficheros por extensión (por ejemplo, solo .pdf) </strong><br>
                    <pre>find actuaciones -type f -name "*.pdf" | wc -l</pre>
                    <strong># Listar X ficheros más antiguos primero </strong>
                    <pre>find . -type f -printf '%T@ %p\n' | sort -n | head -n 10 | awk '{ cmd="date -d @"$1" +\"%Y-%m-%d %H:%M:%S\""; cmd | getline fecha; close(cmd); print fecha, $2 }'</pre>
                    <strong># Listar los X ficheros mas recientes</strong>
                    <pre>find . -type f -printf '%T@ %p\n' | sort -nr | head -n 10 | awk '{ cmd="date -d @"$1" +\"%Y-%m-%d %H:%M:%S\""; cmd | getline fecha; close(cmd); print fecha, $2 }'</pre>

                    <hr>
                    <h3 id="ts-buscar">Buscar</h3>
                    <strong># Buscando en el access log registros de un referer especifico</strong>
                    <br><textarea rows="1" cols="80">grep "https://www.dominio.com/" /path/to/your/access.log > output.log</textarea><br>
                    <strong># Buscando en logs compactados</strong>
                    <br><textarea rows="1" cols="80">bzgrep -i "your_search_pattern" daemon.log.0.bz2</textarea><br>
                    <strong># Buscar en ficheros una cadena específica</strong>
                    <br><textarea rows="1" cols="90"> find . -name "*.php" -not -path '*path2exclude*' -exec grep -l 'LoQueQuierasBuscar' {} \;</textarea><br>
                    <textarea rows="1" cols="90"> find . -name "*.log" -exec grep -l 'LoQueQuierasBuscar' {} \;</textarea><br>
                    <textarea rows="3" cols="90"> grep -o -b '"sku":71353' ./2023/09/Paquetes-2023-09-29.log | awk -F: '{start=$1-2; if(start<0) start=0; end=$1+150+length($2); cmd="dd if=./2023/09/Paquetes-2023-09-29.log bs=1 skip="start" count="end-start" 2>/dev/null"; system(cmd)}'
                    </textarea><br>
                    <textarea rows="2" cols="90"> grep -P -A 1 -B 1 'Sincronizado campo \[[0-9]+\]>>\s*\{ID: \[71353\]\}' ./2023/09/Create-Success-2023-09-29.log</textarea><br>

                    <strong># extraer un fragmento en un fichero opc: destacarlo</strong>
                    <br>
                    <textarea rows="1" cols="90">grep -C 3 'combustible' ./app/views/descontaminacionesMod.php</textarea><br>
                    <textarea rows="1" cols="90">cat ./app/views/descontaminacionesMod.php | grep --color=auto 'combustible'</textarea><br>

                    <strong># Buscar versiones de fichero de hasta 180 días listado con detalles y full path</strong>
                    <pre>find -P ./ -maxdepth 1 -type d -exec echo -n "{} -> " \; -exec du -sh {} \;find . -type f -name "setup-slug-table.php" -mtime -180 -exec ls -dlhaG '{}' \;</pre>
                    <strong># Buscar ficheros de mas de x tamaño (ref: k,M,G,T,P)</strong>
                    <pre>sudo find . -type f -size +3G -exec ls -lhaG {} \;</pre>
                    <strong># Ficheros por carpetas</strong>
                    <pre>find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;</pre>

                    <hr>
                    <h3 id="ts-tar">Des/Comprimir</h3>
                    <strong># Ejecución standard: </strong>
                    <pre>tar czvf 20250526_084554-copia.tar.gz carpeta/</pre>
                    <strong># ver contenido de un .tar.gz</strong>
                    <pre>tar -ztvf my-data.tar.gz
tar -tvf my-data.tar.gz
tar -tvf my-data.tar.gz 'search-patter'
</pre>
                    <strong># extraer algo específico</strong>
                    <pre>tar -zxvf fichero.tar.gz --wildcards '*path/to/file'</pre>
                    <strong># extraer todo en ruta actual</strong>
                    <pre>tar xzvf nombre.tar.gz</pre>
                    <strong># tar gz con exclude </strong>
                    <pre>tar czvf 20250526_084554-copia.tar.gz  ../web/ --exclude='../web/carpeta/*'  --exclude='../web/wp-content/*'</pre>
                    <strong># tar gz con exclude freeBSD</strong>
                    <pre>tar czvf FICHERO.tar.gz --exclude='web/htdocs/clientes/'  --exclude='web/htdocs/cloud/' --exclude='web/htdocs/cms/anuncios/' web/</pre>
                    <strong># tar gz carpetas 1 a 1 en ruta actual freeBSD</strong>
                    <pre>for folder in */; do tar -czf "${folder%/}.tar.gz" "$folder"; done</pre>
                    <hr>
                    <h3 id="ts-misc">Miscelaneos</h3>
                    <strong># Tail excluyendo. Buscando algo en el access log pero obviando ciertas llamadas</strong>
                    <textarea rows="1" cols="160">tail -f access | grep "POST" | grep -Ev "wc-ajax|wp-cron|admin-ajax"</textarea>
                    <strong># Tail INcluyendo. Buscando algo en el access log pero con ciertas llamadas</strong>
                    <textarea rows="1" cols="160">tail -f access | grep "POST" | grep -E "wc-ajax|wp-cron|admin-ajax"</textarea>
                    <strong># Prompt </strong>
                    <pre>export PS1="$USER@\h \w/ $ "</pre>
                    <strong># Ejecutar scripts con salida a log y seguimiento en pantalla</strong>
                    <pre>php piezas2.php | tee piezas2-$(date "+%Y%m%d_%H%M").log</pre>
                    <strong># Transferencia SCP</strong>
                    <pre>scp -P 50722 ./20250526_084554-copia.tar.gz  usuario@host:./carpeta-destino/</pre>


                    <strong># Espacio en Disco disponible </strong>
                    <pre>df -h</pre>
                    <strong># Optimizar Ficheros </strong>
                    <pre>for file in *; do /usr/bin/convert "$file" -quality 70% "$file"; done</pre>
                    <strong># Windows Power Shell</strong>
                    <pre>Get-ChildItem -Path "C:\" -Recurse | Where-Object { $_.PSIsContainer } | ForEach-Object { $_ | Select-Object FullName, @{Name="Size (MB)"; Expression={"{0:N2}" -f ((Get-ChildItem -Path $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB)}}}</pre>
                    <strong># Changelog Linux</strong>
                    <br><textarea rows="1" cols="160">find . -type f -newermt "2025-05-26 00:00:00" ! \( -name "*.log" -o -path "*logs*" \)  -ls > changelog.txt && cat changelog.txt</textarea><br>
                    <strong># Changelog Windows</strong>
                    <br><textarea rows="1" cols="160">Get-ChildItem -Path . -File -Recurse | Where-Object { $_.LastWriteTime -gt "2025-05-26 00:00:00" } </textarea><br>
                    <br><textarea rows="1" cols="160">(Get-ChildItem -Path . -File -Recurse | Where-Object { $_.LastWriteTime -gt "2025-05-26 00:00:00" } | Select-Object Mode, LastWriteTime, Length, FullName | Format-Table -HideTableHeaders -AutoSize | Out-String) 
 </textarea><br>


                    <strong># Windows Power Shell</strong>
                    <pre>Get-ChildItem -Path "C:\" -Recurse | Where-Object { $_.PSIsContainer } | ForEach-Object { $_ | Select-Object FullName, @{Name="Size (MB)"; Expression={"{0:N2}" -f ((Get-ChildItem -Path $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB)}}}</pre>

                    <hr>
                    <h3 id="ts-mysql">MySql</h3>
                    <strong># MySql Dump</strong>
                    <pre>mysqldump -u root -p$(cat /sites/mysql.inc) suspiro_db > suspiro_db_$(date "+%Y%m%d_%H%M%S").sql;</pre>
                    <strong># OJO: Borrar Tablas de una DB </strong>
                    <pre>mysql -uroot -p$(cat /sites/mysql.inc) -D BaseDeDatos -e "show tables" | awk '{print "DROP TABLE IF EXISTS " $1 ";"}' | mysql -uroot -p$(cat /sites/mysql.inc) BaseDeDatos</pre>
                    <strong># Importar un Dump</strong>
                    <pre>mysql -uroot --max_allowed_packet=16M -p$(cat /sites/mysql.inc) --default-character-set=utf8 suspiro_db <  FicheroDump.sql</pre>

                    <strong># Extraer de un Dump a lo Bestia (Mi caso 9gb)</strong>
                    <br><textarea cols="80" rows="4"> sed -n '/-- Current Database: `bd_wordpress`/,/-- Current Database: `beachdesigners_com`/p' 35_all_databases_dump.sql > extracted.sql
</textarea><br>
                </div>

            </div>
        </div>
    </div>



    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    <script src="./jquery.md5.js" type="text/javascript"></script>
    <script src="./jquery.sha1.js" type="text/javascript"></script>
    <script src="https://cdn.ckeditor.com/4.13.0/standard/ckeditor.js"></script>
    <script src="tools.js" type="text/javascript"></script>

    <script>
        function generarComandos() {
            const dato = document.getElementById('dato').value;
            const fichero = document.getElementById('fichero').value;
            const datoEscapado = dato.replace(/'/g, "'\\''");

            const comando1 = `find . -name "*.log" -exec grep -l '${datoEscapado}' {} \\;`;
            document.getElementById('comando1').value = comando1;

            const comando2 = `grep -o -b '${datoEscapado}' ${fichero} | awk -F: '{start=$1-2; if(start<0) start=0; end=$1+350+length($2); cmd="dd if=${fichero} bs=1 skip="start" count="end-start" 2>/dev/null"; system(cmd)}'`;
            document.getElementById('comando2').value = comando2;
        }

        function copiarAlPortapapeles(id) {
            const textarea = document.getElementById(id);
            textarea.select();
            textarea.setSelectionRange(0, 99999); // Para móviles
            document.execCommand("copy");

            const button = textarea.previousElementSibling.querySelector("button");
            const original = button.textContent;
            button.textContent = "✅ Copiado";
            setTimeout(() => button.textContent = original, 1500);
        }
    </script>

</body>

</html>