domingo, 20 de enero de 2019

martes, 21 de febrero de 2017

Instalación de MongoDB sobre Windows 32 bits

Instalar MongoDB sobre windows de 32bits es algo tedioso, ya que viene predeterminado para ambientes de 64 bits. Basandome en el tutorial de JournalDev How to Install MongoDB on Windows, Start, Uninstall he resumido éste a estos pasos:
Si no conocemos cual es nuestra arquitectura lo averiguamos de la siguiente manera:
en una terminal escribimos
wmic os get osarchitecture
nos proporciona la informacion necesaria

  1. Descargar versión de MongoDB para Windows 32bits del siguiente enlace descargar
  2. Instalar la aplicación
  3. Movemos la aplicación de la siguiente manera: abrimos una terminal en modo administrador y movemos la aplicacion instalada

    >move "Program Files\MongoDB" "C:\mongodb"
  4. Creamos los directorios donde se almacenaran las bases de datos, si lo hacen en el disco C escriben lo siguiente el la terminal como administrador:
    >cd \
    md \data\db
    si lo hacen en el disco D
    >D:
    md \data\db
  5. Iniciamos el servicio escribiendo en la terminal
    C:\MongoDB\bin\mongod.exe 
    
    
  6. Puede utilizar una ruta de acceso diferente para los archivos de datos mediante la opción -dbpath de mongod.exe, por ejemplo:
    C:\mongodb\bin\mongod.exe --dbpath D:\data\db
  7. Inicias el servicio asi:
    C:\mongodb\bin\mongo.exe
  8.  Para crear un servicio de MongoDB se debe crear el directorio para los archivos log en el mismo directorio de datos o en otro lado
    D:\>md \data\log
  9. Creamos un archivo mongod.conf que lo ubicaremos en el directorio de instalacion mongodb, con la siguiente información:

    logpath=D:\data\log\mongod.log
    dbpath=D:\data\db
    storageEngine=mmapv1
    esto se hace como administrador
  10. Para crear servicio

    C:\WINDOWS\system32>echo logpath=D:\data\log\mongod.log > C:\mongodb\mongod.conf

    C:\mongodb\bin\mongod.exe --config C:\mongodb\mongod.conf --install
    todo en linea de comandos
  11. Finalmente si queremos remover el servicio
    C:\mongodb\bin\mongod.exe --config C:\mongodb\mongod.conf --remove
    en la linea de comandos.
  12. Fin del mini tutorial

miércoles, 6 de mayo de 2015

Invictus por William Ernest Henley

Más allá de la noche que me cubre,
negra como el abismo insondable,
doy gracias al Dios que fuere
por mi alma inconquistable.

En las garras de las circunstancias
no he gemido ni llorado.
Sometido a los golpes del destino
mi cabeza sangra, pero está erguida.

Más allá de este lugar de ira y llantos
donde yace el horror de la sombra,
la amenaza de los años
me halla, y me hallará sin temor.

No importa cuán estrecho sea el camino,
ni cuán cargada de castigos la sentencia,
soy el amo de mi destino,
soy el capitán de mi alma.

Original en inglés 

Out of the night that covers me,
Black as the pit from pole to pole,
I thank whatever gods may be
For my unconquerable soul.

In the fell clutch of circumstance
I have not winced nor cried aloud.
Under the bludgeonings of chance
My head is bloody, but unbowed.

Beyond this place of wrath and tears
Looms but the Horror of the shade,
And yet the menace of the years
Finds and shall find me unafraid.

It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate:
I am the captain of my soul.

domingo, 3 de mayo de 2015

Angularjs - Descargar archivos del servidor

Para descargar un documento pdf que se encuentra en un servidor y se enlaza a través de una base de datos utilizando #angularjs, el procedimiento seguido por mi fue:
En la plantilla o página agregamos un enlace para descargar el documento

<!--- template or index.html -->

<a data-click-prevent="true" href="{{data.link}}">{{data.title}}</a>
o
<a data-click-prevent="true" href="#/document/123">{{data.title}}</a>

Crear un servicio tal como

<!-- create factory -->
Inyectamos $http

app.factory("services", ['$http', function($http) {
  var serviceBase = 'services/';
    var obj = {};
    obj.getDocument = function(numberID){
//        http://stackoverflow.com/questions/25781927/how-to-read-pdf-stream-in-angularjs
        <!-- document It belongs to our api -->
        return $http.get(serviceBase + 'document?id=' + numberID, {responseType: 'arraybuffer'})
           .success(function (data) {
               var file = new Blob([data], {type: 'application/pdf'});
               var fileURL = URL.createObjectURL(file);
               window.open(fileURL);
        });
    };
    return obj;
}]);

Luego creamos una directiva que evite que el enlace se redirija a la dirección de la api que controla nuestra aplicación; inyectando la factory creada con nombre "services"

    app.directive('clickPrevent', function(services) {
      return function(scope, element, attrs) {
        return element.on('click', function(e) {
          // attrs es el objeto que recoge los datos del enlace pulsado
          var doc = attrs.href.split('/')[2];
          // doc recoge el numero del documento pej 123 y lo pasa al servicio
          services.getDocument(doc);
          return e.preventDefault();
        });
      };
    });

mi api quedaria como

<?php

class api {

        private $db = NULL;
        private $mysqli = NULL;

        public function __construct(){
            parent::__construct();                // Init parent contructor
            $this->dbConnect();                    // Initiate Database connection
        }

        /**
         * [dbConnect Connect to Database]
         * @return [type] [description]
         */
        private function dbConnect(){
            $this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB);
        }

        /*
         * Dynmically call the method based on the query string
         */
        public function processApi(){
            $func = strtolower(trim(str_replace("/","",$_REQUEST['x'])));
            if((int)method_exists($this,$func) > 0)
                $this->$func();
            else
                $this->response('',404); // If the method not exist with in this class "Page not found".
        }


        function document(){
            $id = (int)$this->_request['id'];
            $sql = "SELECT files_id,link,title FROM `files` WHERE `files_id`= ?";
            //obtengo el link de descarga para proceder
            $sentencia = $this->mysqli->stmt_init();
            $sentencia->prepare($sql);
            $sentencia->bind_param('i', $id);
            $sentencia->execute();
            $sentencia->bind_result($files_id,$link,$title);
            $sentencia-> fetch();
            $root = "../releases/";
            $ruta = realpath($root.$link);
            $type = '';
            if( file_exists($ruta)){
                $size = filesize($ruta);
                if (function_exists('finfo_file')) {
                    $info = finfo_open(FILEINFO_MIME);
                    $type = finfo_file($info, $ruta);
                    finfo_close($info);
                }
                if ($type == '') {
                    $type = "application/force-download";
                }
                // Define headers
                header("Content-Type: $type");
                header("Content-Disposition: attachment; filename=".$title.".pdf");
                header("Content-Transfer-Encoding: binary");
                header("Content-Length: " . $size);
                // Download file
                readfile($ruta);
            }else {
                echo "document does not exist";
            }
        }

}
Eso es todo,  cambio y fuera.

Angularjs - Convertir texto plano a HTML

Bueno, esto fue un dolor de cabeza, convertir datos que provenían de JSON y al volcarlos en la página porque los enlaces, llámese tag <a> solo se veían en texto puro, pero indagando y realizando pruebas logre solucionar de la siguiente manera:
<!-- incluir en la fuente del index.html -->
<script src="angular.min.js"></script>
<script src="angular-sanitize.min.js"></script>
 luego en tu archivo .js principal de la aplicación, generalmente llamado app.js inyectamos la sanitización de la siguiente manera:
var app = angular.module('App', ['ngSanitize']);
en tu controlador lo usas de la siguiente manera, pasas el sanitizador que usa la variable $sce y usas la función intrínseca trustAsHtml para convertir el código de texto plano a HTML
    app.controller('Ctrl', function ($sce) {
        $scope.trustAsHtml = function(value) {
            return $sce.trustAsHtml(value);
        };
    });

y luego lo usas en tu plantilla o directo a tu página así: creas un objeto div con el siguiente enlace ng-bind-html ="función trustAsHtml(variable)" y listo, debe quedar:
<div ng-bind-html="trustAsHtml(variable-en-json)"></div>
Sencillo, pero costó trabajo llegar ahí, espero sea de gran ayuda, es todo por hoy, cambio y fuera

domingo, 26 de abril de 2015

Inicio con blogs

Hoy inicio formalmente la escritura de cosas en un blog, variados pero preferiblemente de computación, programación bash, php, HTML, css, JavaScript, jQuery, Angularjs y muchos más