Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - :ohk<any>

#1
PHP / Implementar PWA en drupal 8
5 Abril 2019, 21:07 PM
Estimados,

Mi pregunta es simple, si alguno de ustedes tiene experiencia implementando PWA (Progressive web app) en drupal 8.x, (específicamente versión 8.x, no versiones anteriores) si me puede pasar documentación relacionada o si podemos tener una conversación sobre el tema para despejar mis múltiples dudas al respecto.

Si por azares del destino hay algún experto en el tema, con gusto puedo pagar por los servicios de un curso.

Saludos cordiales
#2
Desarrollo Web / [Aporte] Echarts in Angular 2+
16 Agosto 2018, 18:10 PM
Buenas foro.

Hace tiempo que no hago un aporte, asi que voy a aprovechar los minutos libres de trabajo.

Echarts es una herramienta muy útil para hacer gráficas de distintos tipos en tiempo real, debido a su excelente apariencia visual es muy exitoso en su campo.
Hay herramientas similares? - Claro que si, incluso google tiene sus propias gratuitas y otras de pago por consumo.

Pero este manual en concreto tratara de como implementar el Echarts en Angular 6 utilizando mapas y nuestro amigo el GeoJson, esto para representar lo que gusten de manera global.
Les voy a dejar como adjunto el geojson que he utilizado y adaptado para este ejemplo.

Debo recalcar que es para angular 2+, (NO angularJs) probado específicamente en Angular 6.
Asumiré que tienen algun conocimiento basico de Angular e iré directamente a atacar los componentes.

Creamos un componente de nombre map o como gusten.

Ejecutamos el siguiente script en la consola ubicados en nuestro proyecto angular.

Código (bash) [Seleccionar]
ng g c /ruta/map

Algunos utilizan el .module en el mismo folder y otros no, para los que si, también adicionamos el module.

Código (bash) [Seleccionar]
ng g m /ruta/map

Ahora vamos a instalar el Echarts en nuestro angular 6, para esto hacemos: (Ojo, es para usuarios npm)

Código (bash) [Seleccionar]
npm install echarts --save
npm install ngx-echarts --save
npm install @types/echarts -D


Con esto instalamos las librerias necesarias dentro de node_modules.

Ahora necesitamos hacer 2 adiciones en nuestro codigo:

angular.json <-- dentro de los scripts

Código (javascript) [Seleccionar]

"scripts": [
  "node_modules/echarts/dist/echarts.min.js"
]


Ojo, en caso de tener más scripts debe separarlo por comas, respetando el formato JSON.

tsconfig.json

Código (javascript) [Seleccionar]

"paths": {
     "echarts": ["node_modules/echarts/dist/echarts.min.js"]
   },


Ojo, en caso de tener más phats debe separarlo por comas, respetando el formato JSON.

Hasta ahí únicamente hemos adicionado las librerías necesarias, aun no hemos implementado nada.
Para confirmar que esta funcionando todo sin problemas debemos correr el angular únicamente con objeto de prueba.

Código (bash) [Seleccionar]
ng serve

Si todo corre bien, paramos en ng serve y proseguimos a modificar nuestro componente creado de nombre map.
Como sabemos los componentes tienen la estructura similar de un archivo de estilos, un archivo de typescript, un archivo de html y un archivo spec.

Trabajaremos omitiendo el archivo spec, primero haremos lo mas simple, trabajando dentro de los estilos.

Debemos tener un archivo asi:

map.component.scss

Dentro del mismo ponemos lo siguiente:

Código (css) [Seleccionar]

.demo-chart {
   height: 100%;
   width: 90%;
}


Esto dependerá más de nuestros gustos y la forma de utilizar el mapa, yo quiero para mi ejemplo ocupar casi toda la pantalla.

Ahora nos vamos a el archivo de la vista:

map.component.html

Y adicionamos lo siguiente:

Código (html5) [Seleccionar]

<div echarts [options]="options" [loading]="!mapLoaded" class="demo-chart"></div>


No comentan errores en el HTML porque en angular eso no corre, no es como en PHP.
Una etiqueta mal cerrada tiene cárcel de 1 a 2 años  :xD.

Ahora bien, modificaremos el archivo TS.
Para esto debemos respetar la estructura y no cometer errores.

map.component.ts

Adicionamos en los imports lo siguiente:

Código (javascript) [Seleccionar]
import { HttpClient } from '@angular/common/http';
import * as echarts from 'echarts';


Ahora bien debemos tener una linea similar a esta:

Código (javascript) [Seleccionar]
export class MapComponent implements OnInit {

dentro de la misma adicionamos nuestra declaración de variables:

Código (javascript) [Seleccionar]

public mapLoaded:boolean = false;
public options: object = {};


Dentro del constructor inicializamos nuestro servicio http:

Código (javascript) [Seleccionar]
private http: HttpClient

Debería ser algo parecido a esto:

Código (javascript) [Seleccionar]
constructor(
   private http: HttpClient
 ) { }


Antes de proseguir debo explicar un poco de como se grafica el mapa, este se hace en base a un archivo de tipo json, que con tiene en sus propiedades el nombre del país y un polígono o multi polígono que delimita sus fronteras y nos permite apreciar de forma visual sus dimensiones geográficas y su localización.

Este geoJson es libre de usar, no tiene ninguna licencia, y el mismo lo deben subir a su proyecto angular.

Yo recomiendo que lo usen dentro de la carpeta  src/assets y dentro una carpeta map/json
Y ahí dentro poner nuestro archivo, les dejo la URL para que puedan bajarla.

https://drive.google.com/open?id=1m95xce2ZpUeeQ3YE1jKrvwTVSsLGl7vi

Yo lo tengo asi:

assets/map/json/world.geo.json

Ahora, trabajaremos dentro de la funcion ngOnInit() {}

Utilizaremos nuestro servicio http:

Código (javascript) [Seleccionar]
this.http.get('assets/map/json/world.geo.json')

Con esto le estamos diciendo de donde utilizaremos el json para graficar.
Pondre el codigo completo:

Código (javascript) [Seleccionar]

this.http.get('assets/map/json/world.geo.json')
     .subscribe(geoJson => {
       // hide loading:
       this.mapLoaded = true;
       // register map:
       echarts.registerMap('World', geoJson);

       this.options = {
         title: {
           text: 'World Questionnaire filled',
           subtext: 'Questionnaire added by country',
           sublink: '#',
           left: 'center',
           top: 'top'
         },
         tooltip: {
           trigger: 'item',
           formatter: function (params) {
             var value:any = (params.value + '').split('.');
             value = value[0];
             return params.seriesName + '<br/>' + params.name + ' : ' + value + ' Questionnaire(s)<br/>';
           }
         },
         toolbox: {
           show: true,
           orient: 'vertical',
           left: 'right',
           top: 'center',
           feature: {
             dataView: { readOnly: false },
             restore: {},
             saveAsImage: {}
           }
         },
         visualMap: {
           min: 0,
           max: 10,
           text: ['High', 'Medium', 'Low'],
           realtime: false,
           calculable: true,
           inRange: {
             color: ['lightskyblue', 'yellow', 'orangered']
           }
         },
         series: [
           {
             name: 'World Population (2010)',
             type: 'map',
             mapType: 'World',
             roam: true,
             itemStyle: {
               emphasis: { label: { show: true } }
             },
             data: [
               { name: "Afghanistan", code: "AFG", value: 0 },
               { name: "Aruba", code: "ABW", value: 0 },
               { name: "Angola", code: "AGO", value: 0 },
               { name: "Albania", code: "ALB", value: 0 },
               { name: "United Arab Emirates", code: "ARE", value: 0 },
               { name: "Argentina", code: "ARG", value: 0 },
               { name: "Armenia", code: "ARM", value: 0 },
               { name: "Antarctica", code: "ATA", value: 0 },
               { name: "French Southern and Antarctic Lands", code: "ATF", value: 0 },
               { name: "Australia", code: "AUS", value: 0 },
               { name: "Austria", code: "AUT", value: 1 },
               { name: "Azerbaijan", code: "AZE", value: 0 },
               { name: "Burundi", code: "BDI", value: 0 },
               { name: "Belgium", code: "BEL", value: 0 },
               { name: "Benin", code: "BEN", value: 0 },
               { name: "Burkina Faso", code: "BFA", value: 0 },
               { name: "Bangladesh", code: "BGD", value: 0 },
               { name: "Bulgaria", code: "BGR", value: 0 },
               { name: "The Bahamas", code: "BHS", value: 1 },
               { name: "Bosnia and Herzegovina", code: "BIH", value: 0 },
               { name: "Belarus", code: "BLR", value: 0 },
               { name: "Belize", code: "BLZ", value: 0 },
               { name: "Bermuda", code: "BMU", value: 0 },
               { name: "Bolivia", code: "BOL", value: 3 },
               { name: "Brazil", code: "BRA", value: 0 },
               { name: "Brunei", code: "BRN", value: 0 },
               { name: "Bhutan", code: "BTN", value: 0 },
               { name: "Botswana", code: "BWA", value: 0 },
               { name: "Central African Republic", code: "CAF", value: 0 },
               { name: "Canada", code: "CAN", value: 0 },
               { name: "Switzerland", code: "CHE", value: 0 },
               { name: "Chile", code: "CHL", value: 2 },
               { name: "China", code: "CHN", value: 1 },
               { name: "Ivory Coast", code: "CIV", value: 0 },
               { name: "Cameroon", code: "CMR", value: 0 },
               { name: "Democratic Republic of the Congo", code: "COD", value: 0 },
               { name: "Republic of the Congo", code: "COG", value: 0 },
               { name: "Colombia", code: "COL", value: 0 },
               { name: "Costa Rica", code: "CRI", value: 4 },
               { name: "Cuba", code: "CUB", value: 0 },
               { name: "Northern Cyprus", code: "-9", value: 0 },
               { name: "Cyprus", code: "CYP", value: 0 },
               { name: "Czech Republic", code: "CZE", value: 0 },
               { name: "Germany", code: "DEU", value: 0 },
               { name: "Djibouti", code: "DJI", value: 0 },
               { name: "Denmark", code: "DNK", value: 0 },
               { name: "Dominican Republic", code: "DOM", value: 0 },
               { name: "Algeria", code: "DZA", value: 0 },
               { name: "Ecuador", code: "ECU", value: 7 },
               { name: "Egypt", code: "EGY", value: 0 },
               { name: "Eritrea", code: "ERI", value: 0 },
               { name: "Spain", code: "ESP", value: 0 },
               { name: "Estonia", code: "EST", value: 0 },
               { name: "Ethiopia", code: "ETH", value: 0 },
               { name: "Finland", code: "FIN", value: 0 },
               { name: "Fiji", code: "FJI", value: 0 },
               { name: "Falkland Islands", code: "FLK", value: 0 },
               { name: "France", code: "FRA", value: 0 },
               { name: "Gabon", code: "GAB", value: 0 },
               { name: "United Kingdom", code: "GBR", value: 0 },
               { name: "Georgia", code: "GEO", value: 0 },
               { name: "Ghana", code: "GHA", value: 0 },
               { name: "Guinea", code: "GIN", value: 0 },
               { name: "Gambia", code: "GMB", value: 0 },
               { name: "Guinea Bissau", code: "GNB", value: 0 },
               { name: "Equatorial Guinea", code: "GNQ", value: 0 },
               { name: "Greece", code: "GRC", value: 0 },
               { name: "Greenland", code: "GRL", value: 0 },
               { name: "Guatemala", code: "GTM", value: 3 },
               { name: "French Guiana", code: "GUF", value: 0 },
               { name: "Guyana", code: "GUY", value: 0 },
               { name: "Honduras", code: "HND", value: 0 },
               { name: "Croatia", code: "HRV", value: 0 },
               { name: "Haiti", code: "HTI", value: 10 },
               { name: "Hungary", code: "HUN", value: 0 },
               { name: "Indonesia", code: "IDN", value: 0 },
               { name: "India", code: "IND", value: 0 },
               { name: "Ireland", code: "IRL", value: 0 },
               { name: "Iran", code: "IRN", value: 0 },
               { name: "Iraq", code: "IRQ", value: 0 },
               { name: "Iceland", code: "ISL", value: 0 },
               { name: "Israel", code: "ISR", value: 0 },
               { name: "Italy", code: "ITA", value: 0 },
               { name: "Jamaica", code: "JAM", value: 0 },
               { name: "Jordan", code: "JOR", value: 0 },
               { name: "Japan", code: "JPN", value: 0 },
               { name: "Kazakhstan", code: "KAZ", value: 0 },
               { name: "Kenya", code: "KEN", value: 0 },
               { name: "Kyrgyzstan", code: "KGZ", value: 0 },
               { name: "Cambodia", code: "KHM", value: 0 },
               { name: "South Korea", code: "KOR", value: 0 },
               { name: "Kosovo", code: "CS-", value: 0 },
               { name: "Kuwait", code: "KWT", value: 0 },
               { name: "Laos", code: "LAO", value: 0 },
               { name: "Lebanon", code: "LBN", value: 0 },
               { name: "Liberia", code: "LBR", value: 0 },
               { name: "Libya", code: "LBY", value: 0 },
               { name: "Sri Lanka", code: "LKA", value: 0 },
               { name: "Lesotho", code: "LSO", value: 0 },
               { name: "Lithuania", code: "LTU", value: 5 },
               { name: "Luxembourg", code: "LUX", value: 0 },
               { name: "Latvia", code: "LVA", value: 0 },
               { name: "Morocco", code: "MAR", value: 0 },
               { name: "Moldova", code: "MDA", value: 0 },
               { name: "Madagascar", code: "MDG", value: 0 },
               { name: "Mexico", code: "MEX", value: 0 },
               { name: "Macedonia", code: "MKD", value: 0 },
               { name: "Mali", code: "MLI", value: 0 },
               { name: "Malta", code: "MLT", value: 0 },
               { name: "Myanmar", code: "MMR", value: 3 },
               { name: "Montenegro", code: "MNE", value: 0 },
               { name: "Mongolia", code: "MNG", value: 0 },
               { name: "Mozambique", code: "MOZ", value: 0 },
               { name: "Mauritania", code: "MRT", value: 0 },
               { name: "Malawi", code: "MWI", value: 0 },
               { name: "Malaysia", code: "MYS", value: 0 },
               { name: "Namibia", code: "NAM", value: 2 },
               { name: "New Caledonia", code: "NCL", value: 0 },
               { name: "Niger", code: "NER", value: 0 },
               { name: "Nigeria", code: "NGA", value: 0 },
               { name: "Nicaragua", code: "NIC", value: 0 },
               { name: "Netherlands", code: "NLD", value: 0 },
               { name: "Norway", code: "NOR", value: 0 },
               { name: "Nepal", code: "NPL", value: 0 },
               { name: "New Zealand", code: "NZL", value: 0 },
               { name: "Oman", code: "OMN", value: 0 },
               { name: "Pakistan", code: "PAK", value: 0 },
               { name: "Panama", code: "PAN", value: 0 },
               { name: "Peru", code: "PER", value: 0 },
               { name: "Philippines", code: "PHL", value: 0 },
               { name: "Papua New Guinea", code: "PNG", value: 0 },
               { name: "Poland", code: "POL", value: 0 },
               { name: "Puerto Rico", code: "PRI", value: 8 },
               { name: "North Korea", code: "PRK", value: 0 },
               { name: "Portugal", code: "PRT", value: 0 },
               { name: "Paraguay", code: "PRY", value: 7 },
               { name: "Qatar", code: "QAT", value: 0 },
               { name: "Romania", code: "ROU", value: 0 },
               { name: "Russia", code: "RUS", value: 10 },
               { name: "Rwanda", code: "RWA", value: 0 },
               { name: "Western Sahara", code: "ESH", value: 0 },
               { name: "Saudi Arabia", code: "SAU", value: 0 },
               { name: "Sudan", code: "SDN", value: 0 },
               { name: "South Sudan", code: "SSD", value: 0 },
               { name: "Senegal", code: "SEN", value: 0 },
               { name: "Solomon Islands", code: "SLB", value: 0 },
               { name: "Sierra Leone", code: "SLE", value: 0 },
               { name: "El Salvador", code: "SLV", value: 0 },
               { name: "Somaliland", code: "-9", value: 0 },
               { name: "Somalia", code: "SOM", value: 0 },
               { name: "Republic of Serbia", code: "SRB", value: 0 },
               { name: "Suriname", code: "SUR", value: 0 },
               { name: "Slovakia", code: "SVK", value: 0 },
               { name: "Slovenia", code: "SVN", value: 0 },
               { name: "Sweden", code: "SWE", value: 0 },
               { name: "Swaziland", code: "SWZ", value: 0 },
               { name: "Syria", code: "SYR", value: 0 },
               { name: "Chad", code: "TCD", value: 0 },
               { name: "Togo", code: "TGO", value: 0 },
               { name: "Thailand", code: "THA", value: 0 },
               { name: "Tajikistan", code: "TJK", value: 0 },
               { name: "Turkmenistan", code: "TKM", value: 0 },
               { name: "East Timor", code: "TLS", value: 0 },
               { name: "Trinidad and Tobago", code: "TTO", value: 0 },
               { name: "Tunisia", code: "TUN", value: 0 },
               { name: "Turkey", code: "TUR", value: 0 },
               { name: "Taiwan", code: "TWN", value: 0 },
               { name: "United Republic of Tanzania", code: "TZA", value: 0 },
               { name: "Uganda", code: "UGA", value: 0 },
               { name: "Ukraine", code: "UKR", value: 0 },
               { name: "Uruguay", code: "URY", value: 0 },
               { name: "United States of America", code: "USA", value: 0 },
               { name: "Uzbekistan", code: "UZB", value: 0 },
               { name: "Venezuela", code: "VEN", value: 0 },
               { name: "Vietnam", code: "VNM", value: 0 },
               { name: "Vanuatu", code: "VUT", value: 0 },
               { name: "West Bank", code: "PSE", value: 0 },
               { name: "Yemen", code: "YEM", value: 0 },
               { name: "South Africa", code: "ZAF", value: 0 },
               { name: "Zambia", code: "ZMB", value: 0 },
               { name: "Zimbabwe", code: "ZWE", value: 0 }
             ]
           }
         ]
       }

     }, (err:any)=>{
       console.log('AQUI ERROR DEL MAPA: ',err);
     });


Entre las opciones podemos apreciar:

Código (javascript) [Seleccionar]
title: {
           text: 'World Questionnaire filled',
           subtext: 'Questionnaire added by country',
           sublink: '#',
           left: 'center',
           top: 'top'
         },


Ahí debemos poner nuestro texto de título, el subtexto y algun link.
Si conseguimos hacerlo todo bien, debemos correr el angular.

Código (bash) [Seleccionar]
ng serve

Seguramente correra en el puerto 4200, para acceder nos vamos al navegador y abrimos:

http://localhost:4200

Ahora bien, para que nos funcione debemos adicionar la ruta map a nuestro componente:

En el archivo:

app.routing.ts

Importamos nuestro componente:

Código (javascript) [Seleccionar]
import { MapComponent } from './components/map/map.component';

Posteriormente dentro de:

const appRoutes: Routes = [

Respetando el formato adicionamos nuestra ruta:

Código (javascript) [Seleccionar]
{path:'map', component: MapComponent},

Entonces cargamos el ng serve y debemos correrlo asi:

http://localhost:4200/map

Y debería mostrarnos algo similar a esto:



Les adjunto la documentación relacionada:

https://www.npmjs.com/package/ngx-echarts - En NPM
https://xieziyu.github.io/ngx-echarts/ - En su demo
https://ecomfe.github.io/echarts-examples/public/index.html#chart-type-geo - En github.
https://ecomfe.github.io/echarts-examples/public/editor.html?c=map-world-dataRange - El ejemplo especifico
https://github.com/xieziyu/ngx-echarts/blob/v2.x/README.md - otra informacion.

Espero les sirva.

Saludos!
--
OHK
#3
Buenas foro,

Busco recomendaciones de herramientas que se utilizan para el testing de software, ya sean de pago o libres.

Les agradezco de antemano.

Saludos cordiales
#4
Buenas foro,

En mi memoria extraible tengo esta carpeta y este contenido al cual no puedo acceder.



Cabe mencionar que estos archivos y carpeta están dentro de una carpeta sin nombre.

Alguien sabe a que se debe?

Alguna sugerencia de que hacer?

Saludos
#5
Bases de Datos / Duda con Postgresql
14 Noviembre 2017, 15:14 PM
Buenos días foro.

Tengo una duda sobre postgresql que no me permite avanzar y quizá sea algo sencillo que estoy olvidando u omitiendo.

Esta es la estructura de mi tabla:

Código (sql) [Seleccionar]

CREATE TABLE public.p_proyecto
(
    id_proyecto integer NOT NULL DEFAULT nextval(('p_proyecto_id_proyecto_seq'::text)::regclass),
    id_municipio integer,
    denominacion character varying(250) COLLATE pg_catalog."default",
    fase character varying(50) COLLATE pg_catalog."default",
    id_financiamiento integer,
    montofinanciamiento numeric(10,2),
    tiempoejecucion character varying(10) COLLATE pg_catalog."default",
    supervision character varying(50) COLLATE pg_catalog."default",
    estado character varying(1) COLLATE pg_catalog."default",
    usuarioregistrosistema character varying(50) COLLATE pg_catalog."default",
    fecharegistrosistema timestamp without time zone,
    CONSTRAINT pk_p_proyecto PRIMARY KEY (id_proyecto),
    CONSTRAINT fk_p_financiamiento_p_financiamiento FOREIGN KEY (id_financiamiento)
        REFERENCES public.p_financiamiento (id_financiamiento) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE,
    CONSTRAINT fk_p_municipio_p_municipio FOREIGN KEY (id_municipio)
        REFERENCES public.p_municipio (id_municipio) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;


El problema esta cuando quiero hacer un insert omitiendo el campo id_proyecto que debería ser adicionado de forma automática.
Pero me sale este error:

Código (php) [Seleccionar]

ERROR:  relation "p_proyecto_id_proyecto_seq" does not exist
SQL state: 42P01


Tanto en el pgadmin como en el PHP tengo el mismo error.
Hice algo mal al asignar el valor autoincrementable?

Saludos!
#6
Buenas foro, hace poco un amigo mío llevo su pc a un "técnico" porque tenia virus y el técnico hizo algo de su magia y cuando le devolvio el pc, no tenia virus efectivamente, pero tampoco tenía un sistema hecho en php, bajo xampp ni la base de datos.

Ló unico que quedó de su base de datos fueron las tablas, mysql y phpmyadmin, todo lo demás desapareció, incluyendo todo lo que estaba dentro de htdocs.

Mi pregunta es: Se puede recuperar los archivos tipo: frm, myd, myi, de alguna manera similar a recuperar tus documentos eliminados? O de alguna forma?

Los datos de htdocs no tienen importancia pero si la base de datos.

Alguna ayuda?

Saludos
#7
Buenas gente,

Descargue un efecto con jquery para hacer parpadear un texto, pero despues de un tiempo quiero que este efecto desaparezca, como lo consigo?

Código (javascript) [Seleccionar]

// al iniciar
$('#dato').efecto();
// despues de unos segundos
setTimeout(quita, 2500);

function quita()
{
$('#dato').remove();
}



En el ejemplo, funciona pero me elimina no solo el efecto sino tambien todo a donde lo aplico.
Por ejemplo si el efecto es que parpadee una tabla cada 1 segundo, al aplicar la funcion quita, el efecto desaparece junto con la tabla.
Como puedo hacer para simplemente eliminar el efecto?

Saludos
#8
Desarrollo Web / Ayuda con Jquery
21 Diciembre 2015, 03:24 AM
Buenas gente, tengo una tabla de este tipo:

Código (html4strict) [Seleccionar]

<table>
 <tbody>
     <tr>
            <td>dato 1</td>
            <td>dato 2</td>
            <input type="hidden" name="n1" id="n1" value="1">
     </tr>
     <tr>
            <td>dato 3</td>
            <td>dato 4</td>
            <input type="hidden" name="n1" id="n1" value="2">
     </tr>
     <tr>
            <td>dato 5</td>
            <td>dato 6</td>
            <input type="hidden" name="n1" id="n1" value="3">
     </tr>
 </tbody>
</table>


Y tengo una funcion en Jquery que me ayuda a moverme entre las filas de la tabla mediante el teclado y cuando presiono "ENTER" se activa un evento.
Este evento me permite hacer lo siguiente:

Código (javascript) [Seleccionar]

enter: function($el) {
alert($el.text());
}


"$el" es un objeto con el que puedo leer los datos que tiene esa fila.
Lo que quiero es poder aprovechar "$el" y obtener el valor que tiene el input que esta en modo oculto en esa misma fila.

Mas o menos algo asi:

Código (javascript) [Seleccionar]

alert($('#n1').val());


Si hago lo mencionado arriba lo unico que me muestra es el valor 1.
Que es lo que tiene el primer id n1 sin importar si mi foco esta en la segunda fila o tercera.

Lo que necesito es obtener el valor del input oculto que esta en la fila en la que hago el focus.

Me dejo entender?
Saludos
#9
Software / Existe este programa?
17 Diciembre 2015, 19:45 PM
Buenas gente,

Busco un software de preferencia gratiuto que me permita controlar las salidas de audio de mi pc.
Por ejemplo, todos los sonidos emitidos por mi reproductor de video que salgan por las vocinas y que todos los sonidos emitidos por mi navegador salgan por los auriculares.

Existe tal cosa?

Saludos




Bueno supongo que no existe algo asi.

Gracias de todas formas.
#10
Foro Libre / Funciona el usa y luego paga?
24 Noviembre 2015, 17:08 PM
Hola gente,

Estoy promocionando muchos de mis sistemas en mi pais, por televisión e internet y si lo adquieren de una región distante a la que me encuentro pretendo ofrecerlo con 30 dias de prueba, mi pregunta va a si, esa estrategia funciona de alguna manera?, que si el cliente al final de los 30 días alguna vez se interesa por comprar el software o siempre terminaran haciendo lo que todos hacen con el winrar.

Espero sus comentarios, saludos

--OHK
#11

Mil millones de personas usaron por primera vez la red social Facebook este pasado lunes, aseguró hoy el fundador y consejero delegado de la compañía, Mark Zuckerberg.

"Hemos logrado un hito importante. Por primera vez, 1.000 millones de personas usaron Facebook en un solo día", afirmó Zuckerberg en su página en la red social.

"El lunes, una de cada siete personas en el mundo usó Facebook para conectarse con sus familiares y amigos", afirmó Zuckerberg. El fundador de la red social dijo que el hito alcanzado el lunes es un paso en su objetivo de conectar a todo el mundo a internet.

Seguir leyendo: https://postlatino.com/mil-millones-de-personas-usan-por-primera-vez-facebook-en-un-mismo-dia/15285
#12
El periodista mexicano de Univision le quiso hacer una consulta sobre inmigración, pero el magnate lo ignoró y lo hizo expulsar; luego pudo volver a entrar y se enfrentaron
verbalmente.



El precandidato republicano a la Casa Blanca Donald Trump lo hizo de nuevo. El magnate, preferido entre los precandidatos conservadores, volvió a sumergirse en la polémica ayer, cuando echó al periodista mexicano de Univision Jorge Ramos de una conferencia de prensa.

Jorge Ramos, presentador de la cadena con sede en Miami, se paró y comenzó a realizar preguntas al aspirante a la candidatura republicana a la presidencia sobre su propuesta en materia de inmigración, la cual incluye poner fin a la ciudadanía automática para niños nacidos en Estados Unidos de padres que residen en la nación sin permiso.

Cuando Ramos, que ya había chocado con Trump antes de que empezara la carrera presidencial sobre temas relacionados con la inmigración, comenzó a hacer una pregunta, el magnate le dio la palabra a otro periodista. Ramos insistió y Trump se irritó.

Seguir leyendo: http://www.lanacion.com.ar/1822360-donald-trump-echo-al-periodista-latino-jorge-ramos-de-una-conferencia-de-prensa
#13
El emoji del dedo mayor levantado aterrizó en la nueva versión de la aplicación, que permite marcar conversaciones como no leídas. También está disponible el saludo vulcano de Star Trek.


Microsoft fue la primera empresa en agregar a su directorio de emojis en Windows 10 el de fuck you, un insulto empleado mundialmente representado con el dedo mayor levantado.

Es ahora WhatsApp la que permite utilizarlo en su aplicación de mensajería para Android. Así quedó en evidencia con la llegada de la versión de pruebas 2.12.210, en donde podía verse que el fuck you estaba disponible además en distintos colores de piel, una iniciativa encarada por varias empresas tecnológicas para favorecer la integración. La reciente actualización para Android lo incluye.

El emoji del dedo mayor levantado no es el único novedoso. Al lado aparece el del saludo vulcano, empleado por Spock en Star Trek.

Seguir leyendo: http://www.infobae.com/2015/08/25/1746267-whatsapp-sumo-un-gesto-obsceno-su-lista-iconos
#14

Por ahora nuestros smartphones están "limitados" a dos dimensiones en lo que concierne a tomar fotografías. Pero una nueva aplicación está en desarrollo para convertir tu móvil en un escáner 3D, lo cual podría llevar cualquier cosa en tu entorno directo a una impresora 3D o un programa de realidad aumentada.

Los responsables de esta aplicación se encuentran en los laboratorios de investigación de Microsoft. El proyecto lleva el nombre de "MobileFusion" y es una idea maravillosa, que permitirá a cualquier smartphone realizar modelos tridimensionales de cualquier objeto o persona a tu entorno, usando la misma cámara que trae tu móvil, dado que todo el trabajo lo hace mediante software. Lo que sí tendrás que hacer es caminar alrededor del objeto que estés escaneando.

Seguir leyendo: http://es.gizmodo.com/desarrollan-una-aplicacion-para-convertir-cualquier-sma-1726248073
#15

Cuba superó los tres millones de usuarios con acceso a la red de internet en 2014 al sumar 125.000 nuevos en ese periodo, según datos divulgados hoy por la Oficina Nacional de Estadística e Información (ONEI).

En una publicación sobre el uso de las tecnologías de la Información y las Comunicaciones (TIC) en su página web, la ONEI indicó, además, de aumentar los usuarios, las computadoras en manos de la población se cifraron en más de un millón (1.067,400) en 2014 y de ellas más de 533.000 contaban con conexión en la red.

Cuba es uno de los países con menor tasa de conectividad a internet del mundo, el 5 %, porcentaje que se reduce al 1 % en el caso de la banda ancha.
El acceso a internet desde los hogares está restringido a algunos sectores profesionales como médicos, periodistas e intelectuales.

Pero, además de la conexión desde los hoteles, en los últimos meses el servicio público se ha ampliado con la apertura de nuevas salas de navegación, que según ha anunciado la empresa estatal de telecomunicaciones Etecsa, que controla el sector en la isla, al cierre de 2015 serán unas 300 en todo el país.

A ello se ha sumado el nuevo servicio de 35 zonas de navegación por internet inalámbrico wifi en espacios públicos de varias ciudades de la isla, abierto desde el pasado 1 de julio, y las rebajas de las tarifas para los usuarios del servicio "Nauta", que permite acceder a una cuenta local de correo electrónico en los móviles.

La telefonía celular en Cuba sobrepasó los 3 millones de usuarios en abril pasado, y según ha anunciado el monopolio Etecsa, el plan de la compañía para el período 2015 y 2018 prevé crecimientos anuales de unas 800.000 líneas celulares.

Fuente: :http://www.telemundo47.com/noticias/Cuba-mas-de-3-millones-de-usuarios-de-internet-322505622.html
#16
Windows Hello, el sistema de autenticación biométrica que con la actualización de Windows 10 se incorporó a los dispositivos de Microsoft, pasó la "prueba de fuego" al probar su mecanismo con gemelos.

Con el propósito de incrementar la seguridad y acceso de terceros a los computadores, Microsoft lanzó este novedoso sistema que para algunos incrédulos no funcionaría al 100%.

Seguir leyendo: :http://www.bluradio.com/108077/sorprendente-sistema-de-identificacion-de-windows-10-puede-diferenciar-gemelos
#17

Yo tampoco me lo creía, pero llevo un rato probando la versión 46 de Chrome y lo he visto con mis propios ojos: el nuevo Google Chrome ya no utiliza tanta RAM. Pero la cosa no se queda ahí porque el rendimiento gráfico y el consumo de batería también han mejorado notablemente.

Se lo debemos a los desarrolladores de Chromium, el proyecto de código abierto del que se nutre Chrome. Llevan meses trabajando en solucionar la fuga de memoria. Era cada vez más inquietante la cantidad desorbitada de memoria RAM que el navegador llegaba a consumir.

En paralelo a esto, han implementado varias mejoras relacionadas con el rendimiento de OpenGL y javascript, así que las páginas cargan más rápido y Chrome ya no hará que nuestro Mac se vuelva lento.

Sin duda, Chrome 46 será una gran noticia cuando llegue al gran público, porque aún se encuentra en fase beta. Si no puedes esperar para probarlo, ya puedes descargar la última versión de Canary, la alternativa a Chrome que está siempre una build por delante.

Fuente original: :http://thenextweb.com/apps/2015/08/20/chrome-is-finally-getting-faster-on-mac/
#18
Noticia previa como referente: http://foro.elhacker.net/noticias/hackers_publican_enorme_lista_de_usuarios_del_sitio_de_citas_ashley_madison-t440275.0.html


En esta imagen de archivo, tomada el 10 de junio de 2015, el cibersitio Ashley Madison en Corea del Sur vista en la pantalla de un ordenador en Seúl. Piratas informáticos anunciaron una filtración masiva de datos de usuarios de Ashley Madison, una web de contactos especializada en infidelidades.

Empleados de más de dos decenas de agencias del gobierno estadounidense, con puestos en seguridad nacional o de justicia, están entre los cientos de trabajadores que estuvieron usando la red de internet en el gobierno para ingresar al sitio de citas extramaritales Ashley Madison y pagar membresías, se enteró The Associated Press.

La lista incluye al menos dos asistentes de fiscales federales, un administrador de información tecnológica del personal de apoyo de la Casa Blanca, un investigador del Departamento de Justicia, un jefe de división y un hacker del gobierno y empleado contraterrorismo en el Departamento de Seguridad Nacional. Otros visitaron desde redes operadas por el Pentágono.

Las políticas generales varían dependiendo la agencia sobre si los empleados pueden visitar páginas de internet como Ashley Madison en horas de trabajo, pero tal uso hace preguntarse a qué páginas de asuntos personales es aceptable que accedan los burócratas estadounidenses en horas de trabajo pagadas por los contribuyentes, en especial aquellos en posiciones delicadas que pudieran verse chantajeados.

Seguir leyendo: :http://www.elnuevoherald.com/noticias/finanzas/article31713249.html
#19
Intel RealSense y Project Tango se han unido para crear un prototipo que puede mapear lugares y distinguir la altura y profundidad de éstos.


El día de ayer fue la conferencia anual de desarrolladores de Intel, en la cual dio a conocer sus nuevos proyectos, siendo uno de los más llamativos el Intel RealSense, el cual permite que el aparato "vea en 3D", que ya se está abriendo camino entre los computadores.

Por otro lado, Google tiene la misma idea, con Project Tango, y es por eso que ahora ambas han unido fuerzas para crear un smartphone que sea capaz de percibir la profundidad .

En la conferencia, salió a la luz el prototipo, el cual realizó un mapeo del lugar, midiendo la altura, la anchura y la profundidad a través de sus cámaras. Una "foto" también sería suficiente para renderizar objetos en tres dimensiones, como un jarrón.

Seguir leyendo: :http://www.capital.cl/negocios/2015/08/19/090841-el-proyecto-de-intel-y-google-para-que-los-smartphones-vean-en-3d
#20

Google lanzó discretamente un sitio Web para su servicio de mensajería instantánea Hangouts, por lo que ahora los usuarios tienen una alternativa para utilizar el servicio de otra forma que no sea la extensión y aplicación para Chrome.

El sitio hangouts.google.com es el nuevo portal para que los usuarios inicien o sigan una conversación, una videollamada o conferencia grupal. El sitio cuenta con las mismas funciones que la aplicación móvil para iOS y Android, así como la extensión y aplicación para el navegador de Google.

La nueva versión Hangouts en la Web es compatible con otros navegadores, por lo que se puede aprovechar el servicio de mensajería desde Safari o Firefox sin necesidad de instalar ningún complemento al navegador.

Hangouts en Web tiene todas las funciones del servicio. Los usuarios no sólo pueden iniciar una conversación, sino también cambiar los ajustes de Hangouts y el estado del usuario, y mostrar desde qué dispositivo se escribe, entre otras modificaciones.

Seguir leyendo: :http://www.lanacion.com.py/2015/08/19/google-lanzo-un-sitio-web-para-su-servicio-de-mensajeria-instantanea/
#21

Esta opción nos permitirá conservar nuestros chats, audios e imágenes (todo cifrado) en nuestra cuenta de Google, de manera que podremos recuperarlo todo si cambiamos de teléfono. Así es como se configura:

1. Tenemos que tener instalada la versión 2.12.241 de WhatsApp. Si a la hora de leer esto todavia no está disponible en Google Play, puedes descargar el .apk desde whatsapp.com/android e instalarlo con un explorador de ficheros (la opción "Orígenes desconocidos" tiene que estar activada en los ajustes de seguridad).

2. En WhatsApp, vamos a Ajustes > Chats y llamadas > Copia de seguridad elegimos la frecuencia con la que queremos hacer los backups automáticos: diariamente, semanalmente, mensualmente (o "nunca", para desactivar la opción).

3. A continuación configuramos una cuenta de Google, aquella en la que queremos que se suban las copias de seguridad encriptadas. Tendremos que aceptar unos permisos.

4. Si queremos que las copias de seguridad no utilicen nuestro ancho de banda de datos móviles, podemos elegir que sólo se guarden cuando estemos conectados a una red WiFi.

Y eso es todo. En este mismo menú podremos ver en qué día se realizó la última copia. Los archivos se suben a las 3 AM con la frecuencia seleccionada.

Fuente: :http://es.gizmodo.com/como-utilizar-google-drive-para-hacer-una-copia-de-tus-1725017173
#22
El Assistive Context-Aware Toolkit (ACAT), que mejoró sustancialmente la productividad de Hawking, ahora está al alcance de otros con una condición similar, y gratis.



Desde hace dos años los ingenieros de Intel habían estado trabajando de cerca con el genio Stephen Hawking para crear un nuevo y mejor medio de comunicación, acorde al a condición de salud del ilustre personaje (padece una enfermedad motoneuronal relacionada con la esclerosis lateral amiotrófica).

Hace algunos meses vimos el primer mayor fruto de esta colaboración a través del Assistive Context-Aware Toolkit (ACAT), un nuevo sistema de software desarrollado a la justa medida de Hawking, y ahora la compañía anuncia la grata noticia de que ha decidido liberarlo al público, volviéndolo de código abierto y descargable desde este sitio.

Seguir leyendo: :http://www.lavoz.com.ar/tecnologia/el-software-que-le-permite-hablar-stephen-hawking-ahora-es-gratis-y-de-codigo-abierto
#23
El dispositivo busca el mejor canal con la conexión más rápida para conectarte; OnHub te mostrará cuánto ancho de banda utilizan tus gadgets.


Google quiere ponerle fin a las malas conexiones de internet con OnHub, su nuevo router inalámbrico.

De manera interesante, uno de los principales ganchos comerciales del OnHub es que se ve bien. El OnHub tiene una elegante estructura de color negro... se parece al Echo, el aparato de asistencia virtual de Amazon.

La mayoría de las personas no toma en cuenta la estética cuando están comprando un router inalámbrico. Sin embargo, el OnHub de Google fue diseñado para lucir bien por una buena razón.

"Muchos de nosotros mantenemos nuestro router en el suelo y fuera de la vista, donde no funciona tan bien", según dijo el martes Trond Wuellner, director de producto de Google. "Hemos sustituido los revoltosos cables y parpadeantes luces con una antena interna y una ingeniosa y útil iluminación, por lo que estaremos complacidos de colocar OnHub a la vista, donde el router funciona mejor".

Además de lucir bien para que obtengas una buena señal, el OnHub tiene otras características ingeniosas.

Seguir leyendo: :http://www.cnnexpansion.com/tecnologia/2015/08/19/conoce-onhub-el-router-inalambrico-inteligente-de-google
#24

Los infieles deben de estar temblando. Un grupo de piratas informáticos que atacaron el sitio de citas Ashley Madison, una web de contactos especializada en infidelidades, publicaron lo que sería una lista con la información de los clientes del sitio, su nombre, correo electrónico, número de tarjeta bancaria, las jugosas cantidades que en el han gastado y hasta sus fantasías sexuales.

El pasado 20 de julio, Ashley Madison admitió haber sido víctima de un ataque informático que puso en peligro la confidencialidad de alrededor de 37 millones de usuarios. Hoy, la base de datos, de más de 9GB, fue subida a la deep web mediante el servidor Onion, en donde es imposible rastrear al autor de la publicación.

Con la filtración de los datos, también vino un comunicado.

"Hemos explicado el fraude y la decepción que supone el servicio Ashley Madison, por lo que ahora es turno de que todos vean sus datos. Tengan en cuenta que este sitio está lleno de miles de perfiles falsos de mujeres. Es probable que tu hombre se registró en el servicio más grande del mundo para tener una aventura y ser infiel, pero es muy poco probable que lo haya logrado, solo lo intentó.
Esos hombres son basuras infieles que no merecen discreción. Por su lado, Ashley Madison prometió mantenerte en el anonimato, y no lo cumplió", explica el escrito.

Seguir leyendo: :http://noticias.univision.com/article/2435725/2015-08-19/estados-unidos/noticias/hackers-publican-lista-de-usuarios-de-ashley-madison
#25

El Piloto certificado, Alberto Ignacio Ardila Olivares leyó la siguiente información: / Orange ensaya en España la nueva generación de fibra óptica / Cinco Dias / La nueva generación de fibra óptica en el mundo de las telecomunicaciones empieza a tomar forma. Así, Orange tiene en marcha nuevas iniciativas tecnológicas de cara a mejorar la capacidad y la velocidad en sus redes de fibra en el mercado español. La compañía, que acaba de cerrar la adquisición de Jazztel, está probando con éxito sobre su infraestructura de fibra hasta el hogar (FTTH), la nueva evolución de la tecnología GPON, bautizada como XG-PON. Las pruebas se han hecho sobre clientes reales de la propia operadora.

Esta tecnología, según fuentes del sector, permite aprovechar de manera más eficiente la fibra desplegada hasta el hogar o negocio, posibilitando velocidades de bajada cuatro veces superiores y de subida dos veces mayores que las actuales. De esta forma, estas soluciones permitirán ofrecer velocidades de 1 Gbps por cliente. Este aspecto es clave dada la competencia entre las operadoras por ofrecer las mayores velocidades a los usuarios.

Seguir leyendo: :http://www.entornointeligente.com/articulo/6710370/Orange-ensaya-en-Espantilde;a-la-nueva-generacioacute;n-de-fibra-oacute;ptica-17082015
#26
'Proyecto Titán'. Así se llama el proyecto que prepara el vehículo autónomo y eléctrico de Apple, cuya existencia no ha sido confirmada por la empresa. Sin embargo, el diario británico The Guardian informa, refiriéndose a documentos internos de la empresa norteamericana, que el proyecto no solo es realidad, sino que se encuentra en un estado avanzado.

Según estos documentos, el gigante tecnológico está buscando localizaciones para probarlo en el área de la Bahía de San Francisco.

En mayo, ingenieros del departamento de proyectos especiales de Apple se reunieron con personal de Gomentum Station, un centro de pruebas para vehículos autónomos en California. Esta instalación, altamente protegida por el ejército norteamericano, cuenta con hasta 30 kilómetros de carreteras asfaltadas para realizar pruebas.

Seguir leyendo: :http://www.tecnopasion.com/apple-prepara-su-propio-coche-sin-conductor-15978/
#27

La red social del pájaro azul elimina esta restricción de palabras en los mensajes directos.

Ya es posible chatear por Twitter de forma ilimitada sin tener que pensar en cómo acortar una frase. Los 140 caracteres desaparecen de los mensajes directos de la red social tanto en su versión web como en su aplicación oficial. En este practicograma descubrirás cómo afecta este nuevo cambio y cuál es su objetivo.

1-Twitter se abre más allá de los 140 caracteres.

Se acabaron los mensajes directos (MD) de sólo 140 caracteres. Hasta ahora, los 'direct messages' estaban limitados al mismo número de caracteres que los tuits convencionales, pero esto ya no será así. Twitter ha decidido eliminar la restricción de los mensajes directos para facilitar las conversaciones entre sus usuarios.

De momento, el resto de publicaciones de la red social, es decir, los tuits del muro sí que seguirán limitados al mismo número de siempre. Así lo informó la compañía en su blog oficial.

  2-¿El pájaro azul intenta suplantar a WhatsApp?

El verdadero objetivo de Twitter es empezar a acercarse al mercado de lamensajería instantánea. Sin la restricción de caracteres, los usuarios de esta red social podrán chatear de forma privada tal y como lo hacen en WhatsApp, Line o Telegram. Un paso más hacia adelante en la búsqueda de nuevos nichos de negocio y una forma más de atraer usuarios.

3-Actualización progresiva en el móvil y el ordenador

El cambio se pone en marcha de forma progresiva. La eliminación de la restricción se hará efectiva tanto en móviles Android e iOS, TweetDeck, Twitter para Mac y la web oficial para pc.

Algunos usuarios ya han experimentado los cambios, otros verán cómo su panel de mensajes directos se actualiza en las próximas semanas.

Fuente: :http://internet-y-ordenadores.practicopedia.lainformacion.com/twitter/como-escribir-mensajes-de-mas-de-140-caracteres-en-twitter-23471
#28

Si es que tienes una computadora con licencia europea de Windows 10 y haces uso de juegos piratas, estos podrían ser desactivados sin tu consentimiento.

Los términos de uso del sistema operativo agregaron en esta versión 10 dice: "La compañía (Microsoft) podrá automáticamente revisar tu versión de software y bajar programas que prevengan el acceso a servicios, jugar títulos piratas o usar hardware no autorizado".

Aún no se conoce cómo el software reconocería "juegos piratas" en las computadoras de los usuarios de Windows 10.

Fuente: :http://www.rpp.com.pe/2015-08-15-windows-10-puede-desactivar-tus-juegos-piratas-noticia_826907.html
#29
Como cada año, Brikk se anticipa a Apple y ofrece una versión lujosa del próximo iPhone en preventa.


CIUDAD DE MÉXICO.- Sabemos que muchos esperan conocer y comprar el iPhone 6S o 6S Plus, pero también seguramente hay quienes ya están separando de su fortuna los dólares necesarios para comprar su próximo teléfono con diamantes incrustrados

Y sí, como cada año, la empresa Brikk ya ha comenzado a ofrecer en preventa el próximo iPhone (el 6S o 6S Plus en este caso) en edición de lujo.

En esta ocasión, esta edición especial incluirá 50 kilates de diamantes repartidos en todo el cuerpo del teléfono. Estos diamantes podrán ser de platino, oro amarillo u oro rosa.

Los iPhones 6S y 6S Plus serían presentados y lanzados en septiembre, de acuerdo a los rumores. Brikk afirma que tendrá su modelo de diamantes listo de cuatro a seis semanas después del lanzamiento oficial. Los modelos a la venta serían los de 128GB.

¿Quieren uno? Su precio será de 150 mil dólares (unos 2.45 millones de pesos) en el caso del iPhone 6, y 200 mil dólares (unos 3.27 millones de pesos) en el caso del iPhone 6S Plus. Para apartarlo, hay que dejar un depósito no reembolsable de 25 mil dólares (unos 409 mil pesos).

Fuente: :http://laverdadnoticias.com/ya-puedes-apartar-tu-iphone-6s-con-diamantes/569418/
#30

La unidad usa una técnica 3D que incrementa su capacidad. Está dirigida a empresas que busquen implementar servidores

La compañía coreana Samsung reveló el que hasta ahora es considerado el disco duro de mayor capacidad que se haya creado en un tamaño estándar, con la posibilidad de almacenar hasta 16 terabytes de datos.

Si bien existen dispositivos de almacenamiento más grandes, ninguno había logrado esa capacidad en un tamaño estándar de 2. pulgadas. Los intentos previos de otros competidores se habían acercado a la marca de los 10TB.

Según el diario británico The Independent, la compañía presentó el producto durante el Flash Memory Summit realizado en California esta semana, donde entregó detalles de cómo logró hacer caber tanta información en un dispositivo estándar. La compañía indicó que usó para ello varias nuevas tecnologías especiales y con una técnica de apilamiento en 3D.

De esta forma, lograron apilar memorias flash una sobre otra para hacer caber más, en vez de la forma tradicional plana en que las memorias se guardan en el disco duro. Esto significa que el disco es un SSD, que utiliza memorias flash, y por tanto es más veloz que tecnologías predecesoras.

Samsung dijo que estos discos pueden ser utilizados por las empresas que deseen montar sus propios servidores. Como demostración, la firma mostró un servidor que utilizaba 48 de estos discos, creando una capacidad de almacenamiento acorde a las demandas que cada vez más se generan en distintas empresas.

Fuente: :http://www.el-nacional.com/GDA/Samsung-presento-estandar-mayor-capacidad_0_683931714.html
#31
GNU/Linux / Comando equivalente en Linux
15 Agosto 2015, 16:25 PM
Buen dia gente,

Cual es el comando equivalente en Linux para vol() de windows?

en windows:

[C:\]vol C:

El volumen de la undidad C es OS/2.
El número de serie del volumen es: 0815:1611.


como seria en linux?

Saludos
#32
Hacking / Casos de Ingenieria Social
13 Agosto 2015, 16:38 PM
Buenas gente, nose si esto es un tema de hacking basico o avanzado, pero espero este donde debe.

Quisiera saber si hay un sitio, un libro, una revista, un blog o algo donde se recopilan las estrategias de ingenieria social mas destacadas o las que han sido utilizadas en los últimos 2 o 3 años, existe tal cosa?

De ser asi por favor facilitenme la dirección o donde puedo leer sobre ello.

[Edito] Aprovecho el mismo hilo para preguntar si es que la "Evil twin" se considera una técnica de ingenieria social.

Saludos
#33
Hola gente,

Tengo una pequeña duda, cuando tengo un formulario de busqueda que empieza a buscar en la base de datos cuando el usuario esta escribiendo.
Con Jquery escucho lo que escribe y cuento los caracteres y cuando ha escrito 3 o mas caracteres el sistema se pone a buscar en la base de datos.

Pero esto me esta causando problemas porque tengo mas de veintiseis mil registros y la base de datos sufre un poco porque empieza a buscar desde el tercer caracter ingresado, y aun sin haber terminado de buscar el usuario sigue enviando solicitudes porque sigue escribiendo, a veces escribe 20 caracteres y el servidor se pone lento.

Entonces creí adecuado poner un contador de tiempo, algo asi como contar 500 ms y recien empezar a buscar, osea empezar a buscar cuando el usuario ha dejado de escribir por al menos medio segundo, me dejo entender?

He visto posibles soluciones con el setTimeout(), pero necesito disparar el evento cuando se empieza a escribir después del tercer caracter ingresado y cuando ha dejado de hacerlo por mas de 500 ms.

Alguien me da una mano?

Saludos

--OHK--
#34
Buenas gente,

Estoy intentando utilizar un hotkey con jquery que funciona sin problemas, pero cuando hay una diferencia de compatibilidad de hotkeys tengo un gran problema.
Por ejemplo, le doy un hotkey al (Shift+Ctrol+S) para que pase algo y no da problemas.

Pero cuando le hago por ejemplo al (Ctrl+S) el navegador dispara la opción de guardar pagina y al mismo tiempo ejecuta la funcion que adiciono.
Y quisiera saber como puedo evitar que el navegador ejecute automáticamente su función por defecto.

No esta por demás decirles que la funcion .preventDefault() ya la he utilizado sin resultados positivos.

Mi código:

Código (javascript) [Seleccionar]


        $(document).keyup(function(e){
        if(e.which == 17) isCtrl=false;
        }).keydown(function (e){
        if(e.which == 17) isCtrl=true;
                // Ctrl + S
        if(e.which == 83 && isCtrl)
        {
        e.preventDefault();
        alert("Ha presionado el Ctrl + S");
        }
        });


En el caso explicito de mi código, cuando presiono Ctrl+S, me sale la alerta como debe ser, pasada la alerta se abre la opción del navegador.

Alguna idea?

Saludos
#35
Tal como lo dice en el título, el código presentado a continuación nos va a permitir ingresar a una base de datos Mysql utilizando PHP desde un archivo creado en excel de extensión .csv (delimitado por comas).

Este código nos va a permitir ingresar la cantidad de datos necesarios a una o multiples tablas y a una o diferentes columnas sin requerir de alteraciones en el código fuente,  de una base de datos sin requerimiento de configuraciones grandes o complicadas.

Para que este ejemplo este completo iniciaremos creando una tabla para nuestra base de datos en Mysql.

Código (php) [Seleccionar]

CREATE TABLE prueba;

CREATE TABLE IF NOT EXISTS `estudiante` (
`id_estudiante` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`nombre` varchar(100) NOT NULL,
`apellidos` varchar(100) NOT NULL,
`telefono` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Ahora que tenemos nuestra base de datos creada y nuestra tabla, revisaremos un poco el código de importación y sus dependencias para realizar una importación exitosa.

estructura



Como se puede apreciar, tenemos archivos de hojas de estilo, archivos de javascript y 6 archivos en PHP que realizan la carga. Es de vital importancia realizar una correcta configuración dentro de los archivos db.php y save.php.



Es importante notar que el archivo db.php cuenta con 170 líneas de código de las cuales no tocaremos ninguna otra que las lineas 8, 10 y 12.

En la linea 8 debemos poner el nombre del usuario de nuestra conexión a la base de datos.

En la linea 10 debemos poner el password de acceso a la base de datos relacionado a la cuenta.

Seguir leyendo...

Nos saltamos al final del ejemplo:

Con esto finalizamos el ingreso.

Mencionar que podemos realizar el ingreso a diferentes tablas de la base de datos desde el mismo archivo y no importa la dimensión de nuestro archivo en excel.

Aqui tengo un ejemplo con un archivo diferente y con datos diferentes en una base de datos diferente.



Como se puede apreciar, se ingresan a diferentes tablas, diferentes columnas y en desorden y el resultado es el mismo:



Fuente, archivos y ejemplo completo:

Revisar ejemplo completo y Archivos para Descarga

Si tienes dudas puedes responder a este tema.

Saludos!

@OHK
#36
Software / Godzilla 2014
15 Julio 2014, 17:06 PM

Descarga

[TITLE]:........................[ Godzilla
[DIRECTOR]:.....................[ Gareth Edwards
[RELEASE DATE]:.................[ 16 May 2014 (USA)
[GENRE]:........................[ Action | Sci-Fi | Thriller
[HDTV SUPPORT]:.................[ Yes
[NO OF FILES]:..................[ 1
[VIDEO]:........................[ MKV - x264
[AUDIO]:........................[ AAC - 2CH
[FILE SIZE]:....................[ 900MB
[RESOLUTION]:...................[ 1280x528
[FRAME RATE]:...................[ 23.976 fps
[LANGUAGE]:.....................[ English
[SUBTITLES]:....................[ NONE
[RUNTIME]:......................[ 01:56:00
[ENCODER]:......................[ ShAaNiG
[SOURCE]:.......................[ 1080p video/ QUAZiMOTO line
#37
Desarrollo Web / Problema en Jquery (ajax)
15 Julio 2014, 14:54 PM
Tengo un problema en la ejecución de un pedazo de cógido de javascript, que no entiendo porque no funciona quizá me puedan dar una mano.

Tengo mi documento 1.

Código (javascript) [Seleccionar]

          $("#codigo").blur(function(){

    $.ajax({
    beforeSend: function(){
    $('#status').html("Revisando...");
    },
    url: 'check.producto.php',
    type: 'post',
    data: $('#formid').serialize(),
    success: function(resp){

    alert(resp);

    if(resp == "Existe"){
    $("#codigo").attr("class", "form-control error");
    $("#codigo").attr("style", "border-color: red;");
    $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
    console.log(resp);
    }else{
$("#codigo").attr('class', 'form-control valid');
$("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
    console.log(resp);
    }

                                console.log(resp);
   
    },
    error: function(jqXHR, estado, error){
    console.log(estado)
    console.log(error)
    },
    complete: function(jqXHR, estado){
    console.log(estado)
    },
    timeout: 10000
    });

    });


Acá tengo el formulario

Código (html4strict) [Seleccionar]

<label for="codigo">
<strong>Codigo:</strong>
<input type="text" name="codigo" id="codigo" data-validation="required" class="form-control"/>
<div id="status"></div>
</label>


El caso es que tengo un formulario de varios campos, una vez que se pierde el focus sobre el campo código se hace una verificación mediante ajax, de que el dato ingresado existe o no, con el siguiente código.

check.producto.php

Código (php) [Seleccionar]

<?php

require("../../system/config/database.php");
require(
"../../system/database/DBMySQLi.php");

$db = new DB();
$codigo $_POST['codigo'];

$sql "SELECT codigo FROM producto WHERE codigo = '$codigo'";
$res $db->execute($sql);

if(
$res->num_rows>0){
echo "Existe";
}else{
echo "No existe";
}

exit;

?>



Entonces el código PHP verifica en la base de datos si el código existe o no y retorna un impreso de existe o no existe.

El problema se origina cuando entra al bucle de jquery del success:

Código (javascript) [Seleccionar]

                           success: function(resp){

    alert(resp);

    if(resp == "Existe"){
    $("#codigo").attr("class", "form-control error");
    $("#codigo").attr("style", "border-color: red;");
    $("#status").html("<span class='form-error help-block'>Este codigo ya existe.</span>");
    console.log(resp);
    }else{
$("#codigo").attr('class', 'form-control valid');
$("#status").html("<span class='form-valid help-block'>Codigo nuevo.</span>");
    console.log(resp);
    }

                                console.log(resp);
   
    }


El alert(resp); me demuestra que el valor retornado es "Existe".

Pero en el if(resp == "Existe"){ no entra al bucle.

Accede directamente al else, y en el console.log(resp); imprime "Existe".

No comprendo porque no accede por el If.

Alguna sugerencia?
#38
Desarrollo Web / Web hosting de tiempo reducido
19 Febrero 2014, 15:25 PM
Buenas gente,

Necesito un web hosting (de pago no es problema) que te permita adquirir un hosting por tiempo reducido, que no sea por un año como mínimo.

Sería indicado un mes, aunque con dos semanas tengo.

Conocen algún hosting que ofrezca este tipo de servicio?

Ojo: Php/Mysql (Al menos 1 base de datos).

Saludos
#39
Hola foro, perdón por esta pregunta que quizás para muchos de ustedes sea un poco tonta, pero para terminar mi educación en LAMP, me falta aprender 2 tecnologías que considero son muy importantes, entre ellas Phyton y Perl.

Y quería preguntar a los expertos acá, por cual de ambas tecnologías debería empezar y cual es mejor manejar a corto plazo, porque no quiero meterme en ambas solo quisiera meterme en una de lleno hasta conocer al menos un 40%.

Espero me puedan ayudar.

Saludos Cordiales.




Bueno, leyendo temas antiguos en el mismo foro y en otros sitios web, he ido marcando uno por uno, y he llegado a la conclusión de que Python es mucho mejor que Perl, incluso Google lo usa, entonces creo que me voy a inclinar por el mismo.

Saludos cordiales.
#40
YouTube y Netflix son responsables de la mitad del tráfico de datos en Norteamérica


Por otra parte, el tráfico de datos por redes P2P descendió por primera vez a menos del 10% del total en esa región.

Los analistas de la empresa canadiense Sandvine lanzan regularmente reportes sobre las tendencias mundiales del tráfico de datos en Internet, en el que reportan que por primera vez el intercambio de archivos por redes P2P bajó a menos del 10% del total del tráfico de datos en Norteamérica, una tendencia que se ha venido dando estos últimos años gracias a los servicios por streaming.

Este auge del streaming se puede ver además en que la descarga promedio mensual en la región del Asia-Pacífico de datos móviles ahora alcanzó 1GB, donde el 50% corresponde a streaming de video; y porque ahora en Norteamérica más del 50% de la descarga de datos desde servicios de Internet fijo corresponde a la suma de YouTube con Netflix.

El reporte asegura que en Norteamérica el 31,6% del tráfico de datos corresponde a YouTube, mientras que el otro 18,6% corresponde a Netflix, el que según la empresa tardó cuatro años en alcanzar la quinta parte del tráfico de datos en Estados unidos.

Fuente: :http://www.fayerwayer.com/2013/11/youtube-y-netflix-son-responsables-de-la-mitad-del-trafico-de-datos-en-norteamerica/
#41
Facebook no consigue comprar SnapChat ni por 3.000 millones


Tres mil millones no son suficientes. El gigante Facebook no ha podido comprar un enanito llamado, Snapchat, una red social juvenil que hace desaparecer fotos y vídeos 10 segundos después de su envío.

El precio que pagaba Facebook por SnapChat, del que ha informado The Wall Street Journal- es muy superior a sus ingresos, a su evaluación financiera incluso a sus usuarios, pero tienen algo que Facebook persigue desesperadamente, como se ha visto por la intentona, juventud. La misma que intentó obtener con la compra de Instagram.

Snapchat, creado por los jóvenes Bobby Murphy (24 años) y Even Spiegel (22 años) hace dos años en la universidad de Stanford, tiene 5 millones de usuarios diarios que envían 350 millones de mensajes, según los datos de esta red social. En diciembre, los usuarios eran tres millones y se envían 60 millones de fotos.

Hace unos meses, la red consiguió una financiación de 65 millones de dólares (48 millones de euros) y la empresa fue valorada en 850 millones de dólares (595 millones de euros).

En estos dos años, Snapchat ha ido añadiendo funcionalidades como el vídeo y, en octubre, su función Story, en donde las imágenes se mantienen vigentes durante 24 horas sin ser borradas.

Pese a que SnapChat es criticada frecuentemente porque su sistema sirve principalmente para enviar fotos picantes, por su carácter de autodestrucción en segundos, sus fundadores esperan que el valor de la empresa siga creciendo en usuarios y mensajes por lo que hasta el año que viene no tienen pensado escuchar ofertas.

"No puedes crear un negocio basado en el sexting", declaraba hace unos meses Spiegel a The New York Times, empleando el término que designa el envío de imágenes picantes a través de chats de texto. "Es un caso específico. Pero esto es mucho más".

La oferta de Facebook es la mayor de sus historia. Hasta ahora el récord lo tenía la adquisición de Instagram, por la que pagó mil millones de dólares (765 millones de euros). La aplicación de filtros fotográficos tenía 30 millones de usuarios y eso que, por entonces, solo servía para los iPhone. Ahora daba el triple por la sexta parte de usuarios.

La iniciativa de la primer red social refleja su preocupación por la fuga de usuarios jóvenes -o, al menos no aumento- como pusieron de manifiesto los directivos en la última presentación de resultados económicos de la red. SnapChat podría poner remedio a ese agujero, aunque también confiaban en Instagram para ello y, al parecer, no ha atajado el problema.

Fuente: :http://tecnologia.elpais.com/tecnologia/2013/11/14/actualidad/1384424484_214107.html
#42
PHP / API MySQLi
12 Noviembre 2013, 21:22 PM
Buenas foro.

Voy a dar una explicación un tanto superficial pero muy útil sobre el mysqli, voy a dejar una clase de abstracción y algunos ejemplos con los que podrán trabajar en adelante.

Primero lo primero:

Requieres una versión 5.3.6 o superior de PHP.

MySQLi, es el conector para bases de datos MySQL recomendado por PHP, para interactuar desde tu aplicación con una base de datos MySQL.

¿qué es exactamente mysqli y en qué se diferencia de mysql?

Básicamente, como bien se define en el manual oficial de PHP, mysqli es "una extensión mejorada del conector mysql".

Entre las principales diferencias, se encuentran además, sus dos grandes ventajas:


  • Permite trabajar en estilo orientado a objetos (también continúa proveyendo soporte para estilo procedimental);
  • Nos facilita una forma segura de filtrado de datos en sentencias SQL, para prevenir inyecciones SQL;

Sin dudas, mysqli es una gran ventaja frente al antiguo conector. Tiene una gran cantidad de clases, métodos, constantes y propiedades muy bien documentados.

Propiedades

Nuestra capa de abstracción, tendrá una única propiedad pública, destinada a almacenar los datos obtenidos tras una consulta de selección. El resto de las propiedades, serán de ámbito protegido, accesibles solo desde nuestra clase y clases que hereden de ésta.

Código (php) [Seleccionar]

class DBConnector {
   protected static $conn; # Objeto conector mysqli
   protected static $stmt; # preparacion de la consulta SQL
   protected static $reflection; # Objeto Reflexivo de mysqli_stmt
   protected static $sql; # Sentencia SQL a ser preparada
   protected static $data; # Array conteniendo los tipo de datos más los datos a ser enlazados.
   public static $results; # Coleccion de datos retornados por una consulta de selección
}


La consulta SQL, deberá ser seteada en los modelos (clases) donde se requiera, incluyendo marcadores de parámetros (embebidos con el signo ?), en la posición donde un dato deba ser enlazado. Un ejemplo de ella, podría ser el siguiente:

Código (php) [Seleccionar]
$sql = "INSERT INTO productos (categoria, nombre, precio)VALUES (?, ?, ?)";


Mientras que el array$data, deberá contener, como primer elemento, una string con el tipo de datos y los elementos siguientes, serán los datos a ser enlazados (todos de tipo string):

Código (php) [Seleccionar]
$data = array("isbd", "{$categoria}", "{$nombre}", "{$descripcion}", "{$precio}");

El primer elemento, siempre representará el tipo de datos correspondiente al marcador de parámetro que se desea enlazar. Siendo los tipos de datos posibles:
s (string), i (entero), d (doble) y b (blob).

Métodos

Conectar a la base de datos:

Código (php) [Seleccionar]

protected static function conectar() {
   self::$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
}


Requerirá 4 constantes predefinidas (se recomienda definir en un archivosettings): DB_HOST,DB_USER,DB_PASSyDB_NAME.

Archivo setting.php

Código (php) [Seleccionar]

define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "password");
define("DB_NAME", "nombre_de_la_base_de_datos");


Preparar una sentencia SQL (con marcadores de parámetros):

Código (php) [Seleccionar]

protected static function preparar() {
   self::$stmt = self::$conn->prepare(self::$sql);
   self::$reflection = new ReflectionClass('mysqli_stmt');
}


La clase ReflectionClass de PHP, cumple un papel fundamental: solo a través de ella podemos crear un objeto mysqli_stmtreflexivo, siendo ésta, la única alternativa que tenemos para preparar sentencias SQL con marcadores de parámetros, de forma dinámica.

La propiedad estática $sql (self::$sql) será creada por el único método público que tendrá la clase.

Enlazar los datos con la sentencia SQL preparada:

Código (php) [Seleccionar]

protected static function set_params() {
   $method = self::$reflection->getMethod('bind_param');
   $method->invokeArgs(self::$stmt, self::$data);
}


La propiedad estática $data que se pasa como segundo parámetro a invokeArgs, también será seteada por el único método público.

En este método (set_params), la variable temporal $method, llama reflexivamente (a través del método getMethoddereflectionClass), al método bind_paramde la clase mysqli.

En la siguiente instrucción, a través del método invokeArgsdeReflectionClass, le pasa por referencia a bind param, los datos a ser enlazados con la sentencia preparada (almacenados en el array $data). Podría decirse que invokeArgs, se comporta de forma similar a call_user_func_array().

Enlazar resultados de una consulta de selección:

Código (php) [Seleccionar]

protected static function get_data($fields) {
   $method = self::$reflection->getMethod('bind_result');
   $method->invokeArgs(self::$stmt, $fields);
   while(self::$stmt->fetch()) {
      self::$results[] = unserialize(serialize($fields));
   }
}


Este método es uno de los más "complejos y rebuscados", que incluso cuenta con algunas "pseudo-magias" un tanto "raras" como el uso de las funciones serialize y unserialize en la la misma instrucción. Pero analicémoslo detenidamente.

El parámetro $fields será recibido a través del único método público que crearemos en nuestra capa de abstracción (este método, a la vez, recibirá este dato, también como parámetro, pero opcional).

Este parámetro, será un array asociativo, donde las claves, serán asociadas al nombre de los campos, y el valor de esas claves, al dato contenido en el campo.

Si tuviese la siguiente consulta SQL:

Código (php) [Seleccionar]
SELECT nombre, descripcion, precio FROM producto WHERE categoria = ?

Mi array asociativo, podría paracerse al siguiente:

Código (php) [Seleccionar]

$fields = array("Producto" => "",
"Descripcion" => "",
"Precio" => "");


mysqli->bind_result() enlazará el campo producto.nombre a la clave Producto, producto.descripcion a la clave Descripcion y producto.precio a la clave Precio.

Las instrucciones:

Código (php) [Seleccionar]
$method = self::$reflection->getMethod('bind_result');
$method->invokeArgs(self::$stmt, $fields);


se comportan de forma similar, a sus homónimas en el método set_params. Llama reflexivamente al método bind_result de la clase mysqli y le pasa por referencia, el array $fields.

En el bucle while, estamos asociando iterativamente los datos obtenidos a nuestra propiedad pública$results. Pero ¿cómo lo hacemos? ¿para qué serializar y deserializar los datos?:

Código (php) [Seleccionar]

while(self::$stmt->fetch()) {
   self::$results[] = unserialize(serialize($fields));
}


En cada iteración, stmt->fetch nos está retornando nuestro array $fields, asociado al registro de la tabla, sobre el cuál se está iterando.

Es decir, que en cada iteración, stmt->fetch nos retornará algo como esto:

Código (php) [Seleccionar]
// contenido del array $fields
array("Producto" => "HD Magazine",
  "Descripción" => "Magazine digital de edición mensual sobre Software Libre, Hacking y Programación",
  "Precio" => "0.00");


Pero nuestro array $fields, ha sido pasado por referencia.

Ergo, en cada iteración, su contenido será modificado.

Si a mi propiedad estática $results, le agrego como elemento, un array que está siendo modificado por referencia en el momento que lo estoy asignando a mi propiedad estática, mi propiedad estática, será también, modificada en cada iteración.

Para prevenir eso, serializo mi array$fieldsy lo almaceno en$resultsserializado. Pero como luego necesitará recuperarlo, ahorro un paso y lo deserializo en la misma iteración.

Al serializarlo, estoy "mágicamente" emulando una "inmutabilidad" de los datos asociados.

Cerrar conexiones abiertas:

Código (php) [Seleccionar]

protected static function finalizar() {
   self::$stmt->close();
   self::$conn->close();
}


Un método público que ejecute todas las acciones:


Código (php) [Seleccionar]

public static function ejecutar($sql, $data, $fields=False) {
   self::$sql = $sql; # setear la propiedad $sql
   self::$data = $data; # setear la propiedad $data
   self::conectar(); # conectar a la base de datos
   self::preparar(); # preparar la consulta SQL
   self::set_params(); # enlazar los datos
   self::$stmt->execute(); # ejecutar la consulta
   if($fields) {
      self::get_data($fields);
   } else {
      if(strpos(self::$sql, strtoupper('INSERT')) === 0) {
         return self::$stmt->insert_id;
      }
   }
   self::finalizar(); # cerrar conexiones abiertas
}


La estructura de control de flujo condicional, que utiliza el método ejecutar(), es la encargada de discernir si se trata de una consulta de "lectura" a la base de datos para así, llamar al método get_data, o si se trata de una consulta de "escritura" (INSERT, UPDATE o DELETE). En ese caso, verifica si es una escritura de tipo "INSERT" para retornar la id del nuevo registro creado.

Clase Completa:

Código (php) [Seleccionar]

<?php
class DBConnector {

   protected static 
$conn# Objeto conector mysqli
   
protected static $stmt# preparación de la consulta SQL
   
protected static $reflection# Objeto Reflexivo de mysqli_stmt
   
protected static $sql# Sentencia SQL a ser preparada
   
protected static $data# Array conteniendo los tipo de datos más los datos a ser enlazados
   
public static $results# Colección de datos retornados por una consulta de selección

   
protected static function conectar() {
      
self::$conn = new mysqli(DB_HOSTDB_USERDB_PASSDB_NAME);
   }

   protected static function 
preparar() {
      
self::$stmt self::$conn->prepare(self::$sql);
      
self::$reflection = new ReflectionClass('mysqli_stmt');
   }

   protected static function 
set_params() {
      
$method self::$reflection->getMethod('bind_param');
      
$method->invokeArgs(self::$stmtself::$data);
   }

   protected static function 
get_data($fields) {
      
$method self::$reflection->getMethod('bind_result');
      
$method->invokeArgs(self::$stmt$fields);
      while(
self::$stmt->fetch()) {
         
self::$results[] = unserialize(serialize($fields));
      }
   }

   protected static function 
finalizar() {
      
self::$stmt->close();
      
self::$conn->close();
   }

   public static function 
ejecutar($sql$data$fields=False) {
      
self::$sql $sql# setear la propiedad $sql
      
self::$data $data# setear la propiedad $data
      
self::conectar(); # conectar a la base de datos
      
self::preparar(); # preparar la consulta SQL
      
self::set_params(); # enlazar los datos
      
self::$stmt->execute(); # ejecutar la consulta
      
if($fields) {
         
self::get_data($fields);
      } else {
         if(
strpos(self::$sqlstrtoupper('INSERT')) === 0) {
            return 
self::$stmt->insert_id;
         }
      }
      
self::finalizar(); # cerrar conexiones abiertas
   
}
}
?>



Realizando un INSERT:

La tabla:

Código (sql) [Seleccionar]

CREATE TABLE IF NOT EXISTS `productos` (
  `id_productos` int(11) NOT NULL AUTO_INCREMENT,
  `categoria` varchar(50) NOT NULL,
  `nombre` varchar(50) NOT NULL,
  `descripcion` varchar(200) NOT NULL,
  `precio` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id_productos`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


El codigo:

Código (php) [Seleccionar]

<?php 

require_once("setting.php");
require_once(
"connector.php");

// Estableciendo los parámetros a ingresar

$categoria "Muebles";
$nombre "Ropero";
$descripcion "Estante de ropa";
$precio 1200.50;

// Iniciando el Insert

$sql "INSERT INTO productos(categoria, nombre, descripcion, precio)VALUES(?,?,?,?)";

// Preparando los datos a insertar

$data = array("sssd""{$categoria}""{$nombre}""{$descripcion}""{$precio}");

// Ejecutando la Consulta

$insert_id DBConnector::ejecutar($sql$data);

// Imprimirá el ultimo ID ingresado

echo $insert_id;

?>



En caso de ser un update:

Código (php) [Seleccionar]

<?php 

require_once("setting.php");
require_once(
"connector.php");

// Estableciendo los parámetros a modificar

$id 1;
$nombre "Ropero 2";

// Iniciando el UPDATE

$sql "UPDATE productos SET nombre = ? WHERE id_productos = ?";

// Preparando los datos a insertar

$data = array("si""{$nombre}""{$id}");

// Ejecutando la Consulta

DBConnector::ejecutar($sql$data);

?>



En caso de ser un DELETE

Código (php) [Seleccionar]

<?php 

require_once("setting.php");
require_once(
"connector.php");

// Estableciendo los parámetros a eliminar

$id 1;

// Iniciando el DELETE

$sql "DELETE FROM productos WHERE id_productos = ?";

// Preparando los datos a insertar

$data = array("i""{$id}");

// Ejecutando la Consulta

DBConnector::ejecutar($sql$data);

?>



En caso de realizar un SELECT:

Código (php) [Seleccionar]

<?php 

require_once("setting.php");
require_once(
"connector.php");

// Parametros de busqueda

$categoria "Muebles";

// Iniciando el SQL

$sql "SELECT nombre, descripcion, precio FROM productos WHERE categoria = ?";

$data = array("s""{$categoria}");

$fields = array("Producto" => """Descripcion" => """Precio" => "");

// Ejecutando la Consulta

$values DBConnector::ejecutar($sql$data$fields);

foreach (
$fields as $key => $value) {
   echo 
$value."<br>";
}

?>



Espero les sirva.

Saludos cordiales
#43
Redes / Bloqueo de IP publica
26 Septiembre 2013, 16:27 PM
Buenas,

Estoy experimentando problemas con el acceso a una página web y creo que es un problema de redes (IP).

Explico el problema...

Soy dueño de una IP publica y ofrezco web hosting en mi pais, y hace poco logre tener de cliente a una compañia muy grande que anteriormente estaba de cliente con otra empresa de web hosting mucho mas grande y con mas capital, esta empresa sigue siendo quien les ofrece el dominio, pero el hosting esta con mi empresa.

Se puede acceder al sitio web desde cualquier computador del mundo (creo yo), este es el sitio para verificacion: :http://www.elceibo.com/

Ahora bien, la compañia que accedio a poner su hosting con nosotros desde hace poco tiempo, no puede acceder al sitio web, ninguna de sus computadoras puede acceder al sitio web, pero si acceden a otros sitios web, a todos en realidad, únicamente a su propio sitio web no pueden acceder.

Revisamos su red, buscando prohibiciones y no existe ninguna, buscamos algun programa tipo "main in the middle" y tampoco hay nada, su red esta bien, entonces creemos que la empresa anterior ha bloqueado el acceso al sitio web para ellos únicamente, ya que ellos tambien cuentan con una IP pública desde la cual acceden al internet.

Ahora bien, la pregunta... Hay alguna forma de detectar que se ha prohibido el acceso via IP desde los servidores del dominio?
Porque necesitamos dar una solución al problema y no podemos hacer acusaciones sin tener pruebas.

Espero puedan ayudarme.

Saludos
#44
PHP / Problema con los inputs y los arrays
21 Agosto 2013, 01:19 AM
Buenas foro,

Estoy teniendo un problema con unos inputs que no me están devolviendo la información que requiero, sino que me esta cortando la información a cuando llega a los 38 o 39 datos, para explicarme mejor pongo el ejemplo:

Tengo un html/php que me genera inputs repetidamente las veces necesarias declaradas en una variable.

Código (php) [Seleccionar]

<?php
$tope 
60;
$is 1;

while(
$is <= $tope){
?>

  <input type="text" size="6" name="peso[<?php echo $is?>]" id="peso[<?php echo $is?>]" value="0"/>
<?php
 $is 
++;
}


Que como veran en el código me genera un input 60 veces y que lleva de nombre peso[1], hasta peso[60].
A cada input se le pone una información (en números) y se presiona el botón de submit.

Y al recibir los valores me pasa esto:

Código (php) [Seleccionar]

[peso] => Array
        (
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
            [11] => 0
            [12] => 0
            [13] => 0
            [14] => 0
            [15] => 0
            [16] => 0
            [17] => 0
            [18] => 0
            [19] => 0
            [20] => 0
            [21] => 0
            [22] => 0
            [23] => 0
            [24] => 0
            [25] => 0
            [26] => 0
            [27] => 0
            [28] => 0
            [29] => 0
            [30] => 0
            [31] => 0
            [32] => 0
            [33] => 0
            [34] => 0
            [35] => 0
            [36] => 0
            [37] => 0
            [38] => 0
        )


No puedo recibir el valor del peso del 39 en adelante y hasta el 60.
Alguien sabe porque me esta pasando esto?

O es algo de teoría básica de PHP que desconozco y nunca podré hacer inputs válidos mayores a 38 datos, o que es lo que esta pasando...

Espero me puedan ayudar.

Saludos
#45
Desarrollo Web / Jquery para principiantes
18 Junio 2013, 17:52 PM
Hola gente,

Pongo un enlace de videos tutoriales que me ayudaron bastante con Jquery, es para principiantes, pero a pesar de ello son muy buenos y explicativos.

Claro que hay un problema y este es que esta totalmente en ingles, lo pongo de todas formas porque se que somos una comunidad multi lenguaje.

Sin mas aquí les dejo el Link:

http://blog.themeforest.net/screencasts/jquery-for-absolute-beginners-video-series/

Espero les sirva, Saludos