15 de junio de 2015

Data Uri o Base64 a imagen en ruby

bueno aqui voy a mostrar como hice para pasar una imagen que estaba en base64 en ruby y se guardo como una foto

require 'base64'

def splitBase64(uri)
  if uri.match(%r{^data:(.*?);(.*?),(.*)$})
    return {
      :type =>      $1, # "image/jpg"
      :encoder =>   $2, # "base64"
      :data =>      $3, # data string
      :extension => $1.split('/')[1] # "jpg"
      }
  end
end

def transf
    splitdata = splitBase64(data_url)
    data= splitdata[:data]
    File.open("/mifoto.jpg","wb") do |f|
    f.write(Base64.decode64(data))
    end
end

fuente

1 de junio de 2015

Enviando archivos a S3 desde ruby

Hola hace tiempo que no escribía y eso es porque no he tenido ganas jaja sin embargo he aprendido muchas cosas últimos meses así que por si las necesito usar vamos a anotarlo

Existe al menos 3 gemas que podemos usar para esto usemos las oficiales de Amazon:

AMAZON SDK V1


#!/usr/bin/env ruby

require 'aws-sdk-v1'

#parametros AMAZON
region='us-east-1'
accesskeyid='<mi_id>'
accesskey='<mi_key>'

#codigo
s3 = AWS::S3.new(:region=>region,:access_key_id => accesskeyid,:secret_access_key => accesskey)
bucket = s3.buckets['<mi_bucket>']
data ='<ruta>'
type = 'imagen/png'
extension = 'png'
#nombre pseudo random
name = ('a'..'z').to_a.shuffle[0..7].join + ".#{extension}"
obj = bucket.objects.create(name,data,{content_type:type,acl:"public_read"})
url = obj.public_url().to_s


AMAZON V2

#!/usr/bin/env ruby

require 'aws-sdk'
require 'base64'

#parametros
region='us-east-1'
accesskeyid='<mi_id>'
accesskey='<mi_key>'

#codigo
s3=Aws::S3::Resource.new(:access_key_id => accesskeyid,:secret_access_key=>accesskey,:region=> region)
#recuperar base64
imagen=Base64.encode64('<ruta/archivo.jpg>')
data = Base64.decode64(imagen)

obj = s3.bucket('<mi_bucket>').object('<mi_nombre>').upload_file(data)

9 de febrero de 2015

funcion javascript puede devolver mas de un valor al mismo tiempo

Hace poquito estaba leyendo un poco de javascript y esto lo encontre igual simpatico veamos el ejemplo:

function getSizes(width,height,depth){

      var area=width*height;
      var volumen=width*height*depth;
      var sizes=[area,volumen];
  return sizes;
}

Entonces obtendríamos los resultados asi:

var areaOne=getSize(2,2,3)[0];
var volumenOne=getsize(2,2,3)[1];

29 de enero de 2015

Secuencias en postgresql

bueno como siempre ando molestando y mas de un dolor de cabeza me sucedido con las famosas secuencias en postgresql asi que dejare algunos comando para operar con alguna de estas cosas:

La secuencia que se ocupara en estos ejemplos es acos_id_seq

Crear una secuencia
CREATE SEQUENCE acos_id_seq START 1;

Ver el ultimo valor usado en una secuencia
SELECT last_value from acos_id_seq;

Alterar el valor de la secuencia
ALTER SEQUENCE acos_id_seq RESTART WITH 120;

6 de octubre de 2014

problema de la rana

Estaba aburrido y me coloque a revisar una demo de esto de pruebas de programador y pues hice el problema de la rana.

una pequeña rana quiere llegar al otro lado del camina. la rana se encuentra en la posiciónX y quiere llegar a una distancia igual o mayor a Y. la ramita solo puede saltar siempre una distancia D.

Se necesita contar el mínimo numero de saltos que necesita la rana para llegar a Y. se necesita construir una función del tipo:

int solution(int X, int Y, int D)

Que dado tres números enteros X,Y y D , retorne el mínimo numero de saltos hacia una distancia igual o mayor a Y.

Como ejemplo daban algo similar a esto:

X = 25
Y = 100
D = 29

La función retornaría 3 porque la ramita hace el siguiente proceso;
  • primer salto queda en (25 + 29)= 54
  • segundo salto (25 + 29 + 29) = 83
  • tercer salto (25 + 29 + 29 + 29) = 112
Se asume que:
  • X, Y y D son enteros de rango desde el 1 al 1.000.000.000
  • X ≤ Y
  • La complejidad debe ser de O(1)

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int salto(int x,int y,int d);
int main(int argc,char *argv[])
{
 printf("saltos :%i\n",salto(atoi(argv[1]),atoi(argv[2]),atoi(argv[3])));
 return 0;
}
/**Solucion**/
int salto(int x,int y,int d){
int div,mod;
div=(y-x)/d;
mod=(y-x)%d;
 if(0<mod)
 return (div+1);
 else
 return div;
}

Lo pueden compilar así gcc -W saltos.c -o saltos y ejecutar ./saltos 25 100 29

22 de agosto de 2014

Getting Post Data from the View adaptado para la versión 2.X

bueno he estado trabajando últimamente ya que en mi casa no me pueden ver sin hacer nada, he estado trabajando y aprendiendo sobre el framework llamado Cakephp ya que se me encargo de hacer un sistema web,yo c quería usar PHP y no ruby on rails, revisando la literatura disponible, hay un ejemplo de un libro antiguo(2008 para mi ya es antiguo :p ) llamado "Cakephp Application Development", el código que sigue es el ejemplo:

Se debe crear un controlador users_controller.php con el siguiente código:
<?php 
class UsersController extends AppController {
          var $name = 'Users';
          var $uses = array();
          function index() {
          if (!empty($this->data)) {
          //data posted
          echo $this->data['name'];
          $this->autoRender = false;
}}}
?>

la correspondiente vista en /app/views/users/index.ctp con el siguiente código:

<php echo $form->create(null, array('action' => 'index'));?>
 <fieldset>
<legend>Enter Your Name</legend>
< echo $form->input('name'); ?>
</fieldset>
<?php echo $form->end('Go');?>

Todo eso funciona(supongo) en la versión 1.3 pero yo estoy usando la versión 2.x, después de averiguar un poco se puede hacer así:

Creen un controlador /app/Controller/UsersController.php con el siguiente código:

<?php
class UsersController extends AppController {
var $name = 't';
var $uses = array('t');
function index() {
         if (!empty($this->request->data)) {
         $this->autoRender = false;
         $this->layout = NULL;
         pr($this->request->data);
            }
         }
}?>

Creen una vista en /app/View/Users/index.ctp con el siguiente form:

<?php echo $this-Form->create('t', array('action' => 'index'));?>
<fieldset>
<legend>Enter Your Name</legend>
<?php echo $this->Form->input('name'); ?>
</fieldset>
<?php echo $this->Form->end('Go');?>

El pr les va a mostrar el arreglo completo con la variable name y el valor ingresado, para que sirve esto pues a mi no me sirvió para lo que quería pero si a alguien si le puede servir.

fuente