Lucho_de_Tandil
Usuario (Argentina)
Seguramente alguno de ustedes conocen el aparatito que figura en la imagen superior, es uno entre los diferentes modelos de routers y cablemodem con conexión inalámbrica que fibertel instala en los hogares para que el usuario pueda disponer de conexión a internet. Observando las promociones de fibertel sale a la luz que la conexión de un equipo que disponga de conexión wi-fi tiene un costo mensual mayor que aquellos que no disponen de dicha conexión al mismo tiempo que en el proceso de instalación se cobra un extra si se elige el modelo inalámbrico, lo que no es muy ético que digamos si consideramos que casi no difiere el procedimiento de instalación al mismo tiempo que te cobran como nuevo un equipo que queda en comodato y que la companía les puede reclamar en cualquier momento. Si ya se dispone del servicio de internet de fibertel que no dispone de conexión wifi, la instalación del equipo que proveea de conexión inalámbrica lo cobran alrededor de $300, precio muy similar al que cuesta comprar un router nuevo como el siguiente: Que conectándolo al modem de fibertel permite contar cómodamente con conexión wifi con las siguientes ventajas: El router wifi es propiedad de su dueño por lo que puede hacer con el lo que quisiera. Se puede cambiar de proveedor de internet manteniendo la configuración de la red wifi (como el nombre de la red y su contraseña) Se tiene la libertad de cambiar el nombre, contraseña y otras configuraciones de la red wifi de forma rápida y sencilla ya sea por parte del mismo usuario o llamando a personal capacitado tantas veces como se desee. Nos veremos en siguientes post, Saludos!
Bueno, este el segundo post de la serie, la idea es hacer un pequeño y simple dibujo, en este caso dibujaré una casa. Google-ando un rato me encontré con una imagen de una casa de campo que me parecía bastante bonita por lo que decidí hacer un diseño parecido al de la foto, como la voy a necesitar de forma temporal para trabajar la agrego al documento a través de la opción importar del menú Archivo seleccionándola en la carpeta donde la tengo guardada. Comenzaremos la actividad con la herramienta de "Dibujar curvas y líneas rectas" Con la que recorreremos todo el contorno de la figura, comenzando por el perímetro general para así tener una silueta del objeto sobre la cual ir acomodando las otras partes. Una vez finalizado el paso anterior, se selecciona el color apretando en alguno de los cuadros coloreados de la sección inferior y se corre a un costado para continuar con el contorno de los siguientes elementos como el techo, las ventanas, etc. Continuamos con un trabajo similar al del paso anterior para todas las partes de la casa. Los colores de las formas creadas por ahora no tienen importancia, ya que se definirán más adelante. Se llegó al punto donde se definieron las formas básicas de la casa. Ahora con la herramienta de editar nodos podremos corregir cualquier irregularidad seleccionando alguna de las formas, tras lo que aparecerán puntos en cada uno de los vértices, que al seleccionarlos y arrastrarlos con el mouse se podrá cambiar su posición. Vista del dibujo con algunas correcciones efectuadas. Ahora podremos agregarle el humo que podria salir de la chimenea, para lo cual usaremos la herramienta de creación de círculos y posteriormente modificaremos la propiedad de desenfoque de cada uno de ellos Bien ahora ya finalizamos con el humo Ahora continuamos definiendo los colores de las partes que componen el dibujo, para lo cual podemos apliacar tanto colores sólidos como degradados Luego de algunos retoques llegamos al final del trabajo que si bien es muy simple, es una muestra de la facilidad de uso del programa y de los buenos resultados que se pueden lograr con poca inversión de tiempo.

¿por que no funciona el comunismo? Antes de poder dar una respuesta a esta pregunta hay que analizar cuales son los fundamentos del comunismo, que es lo que el pueblo nesesita y como se debe satisfacer esa nesesidad, si esta llevando a cabo en algun lugar del mundo en su forma pura, libre de corrupción y que garantize la libertad. El problema se puede centrar en la mentalidad inculcada por la sociedad apartir del momento en que nacemos, crecems y formamos nuestra personalidad, nuestros principios básicos, ideas, buscamos objetivos, situaciones que le den sentido a nuestras vidas o algo por lo que luchar. Todos tenemos algo que queremos alcanzar y pensamos metodos para conseguirlo. Todo nuestro ser se alimenta de nuestro entorno, las experiencias que se presentan en nuestras vidas exigen explicaciones que se forman a partir del punto de vista que nos es inculcado desde el principio y que se modifica con razonamientos y pensamientos que escapan de los parametros que tenemos definidos. El punto al que quiero llegar es que a causa de la globalización los parametros y los valores con los que nacemos se encuentran "diluidos", estando la mayoria con un conjunto de reglas que se toman como algo que es así y no hay otra. Ya que no nos dan alternativas a elegir y automaticamente pasamos a formar parte del sistema del que no se puede escapar facilmente y del que hay que buscar un cambio de enfoque para poder alejarse del mismo. Por lo que podria sacar como conclusión que uno de los enemigos del comunismo es la globalización en el sentido de un mundo donde existen ciertas reglas que rigen para todos y que son las bases del capitalismo. Este fenemo se podria apreciar en aquellas tribus alejadas de la "civilización" que no forman parte del mundo globalizado, que consiguen los recursos que posibilitan sus supervivencia atravez del trabajo colectivo de sus integrantes, o en el caso del imperio inca antes de su destrucción a manos de los colonizadores españoles, donde todos los recursos producidos se repartian de forma equitativa entre sus habitantes. Para que un sistema sea aceptado por la mayoria debe brindarle al pueblo lo que nesesita: los bienes impresindibles para sobrevivir, un sistema sanitario que asegure el bienestar fisico y psicológico, un sistema educativo de calidad que permita conseguir el cnocimiento nesesario para el desarrollo personal y que permita desarrollar cualquier tarea para posteriormente espacializarse en algo y que aliente a razonar, para formar puntos de vist independientes y propios, diversidad de lugares y espacios de esparcimiento, diversión y que se desarrollen actividades culturales, les debe proporcionar algo que aliente a la gente a seguir vivos, conseguir objetivos y que se asegure la libertad(que en el capitalismo esta demasiado ligada con el dinero). El comunismo como sistema para el mundo enter falla por que no puede satisfacer lo que uno nesesita, aparte el ser humano tiende a ser de por sí egoista y envidioso; el egoismo lleva al deseo de acaparar riquezas en vez de permitir que todos enten al mismo nivel y de sentirse superior al resto y la envidia pasa se produce por el echo del que tiene menos se cree inferior. Estas cualidades se ven acentuadas por las reglas de juego capitalistas. Solo un cambio social permitiria la existencia de un sistema diferente y que este no falle depende de que todos sus integrantes trabajen de forma honesta, sin intentar acaparar más de lo que realmente nesesitan. Se podria lograr atravez del trabajo de todo el pueblo, con la distribución equitativa de lo producido donde todos beneficiarian a todos. BUENO ESTE ES MI PRIMER POST, ESPERO QUE A ALGUIEN LE HAYA GUSTADO

La programación es como un listado de instrucciones que ejecuta una computadora. Lo principal en la programación es tener en claro exactamente como va a ser el programa que se pretende hacer y cada uno de los pasos necesarios para poder realizar las actividades para las cuales se desarrolla el programa y los recursos que vamos a necesitar como los espacios de almacenamiento temporal que son lugares que se usan en el programa para guardar resultados, cantidades, etc. El programa que se va a encarar Ahora vamos a encarar programar algo sencillo sin interfaz gráfica ni nada por el estilo, suponiendo que necesitemos un programa que nos calcule el promedio de una X cantidad de números y que exista un valor "-1" para indicar que no hay más números para cargar, el mismo lo podemos dividir en la siguiente estructura * Definimos que lugares necesitamos para guardar información temporal. -----Se crea un espacio "#Suma" para guardar la sumatoria. -----Se crea un espacio "#Cantidad" para guardar la cantidad de números. -----Se crea un espacio "#Promedio" donde guardaremos el resultado. * Definimos los valores iniciales que tendrán los espacios de almacenamiento -----Ponemos todo en cero *Mostramos un cartel indicativo -----Mensaje "Programa para calcular promedios" *Carga de números -----Pedimos que se cargue el número -----Nos fijamos que no se ingrese el "-1", si se ingresa, pasamos a "Calculo de promedio", en caso contrario volvemos "Carga de números" -----Contamos cuantos números se cargaron hasta el momento y la guardamos en "#Cantidad". -----Hacemos la sumatoria y la guardamos en "#Suma" *Cálculo del promedio -----Hacemos el cálculo del promedio con los datos del paso anterior y lo guardamos en "#Promedio" *Muestra del resultado -----Mostramos el valor de "#Promedio" Configuración del entorno Bien, antes de empezar a programar hay que instalar un editor de texto de programación, y un "Compilador" que es el programa que se encarga de "traducir" lo que uno escribe a lo que entiende la máquina. En Linux (Ubuntu, Xubuntu, Debian y derivados), abrimos una ventana de terminal y escribimos: Sudo apt-get install fpc Para instalar el compilador del lenguaje Pascal Sudo apt-get install geany Para instalar un editor de texto de programación Con lo cual luego del proceso de instalación ya podremos empezar a programar en pascal abriendo el geany y guardando los archivos con la extensión ".pas". En windows, nos descargamos el Turbo Pascal 7 y usamos su entorno de programación (disponible en la carpeta Bin) Lenguaje de programación Pascal Bien, ahora la estructura que definimos antes hay que transformarla en instrucciones que se van a escribir en un archivo de texto. Elegimos el Pascal como lenguaje de programación, hay muchos de ellos pero vamos a ir por el mas sencillo, ya que es el que se utiliza en las escuelas técnicas con orientación a informática y en el primer año de la carrera de Sistemas para comenzar a aprender a programar. El Pascal se compone de "palabras reservadas" que definen la estructura de escritura, encabezado, definición de variables, etc. Todo el "Código" será "leído" por la computadora de forma secuencial empezando desde el primer renglón del archivo hasta llegar al último. El Pascal se dice que es un lenguaje estructurado, existiendo estructuras: Condicionales: que de acuerdo a una condición definida la maquina lee uno u otro conjunto de lineas de código Repetición: o iteración: que de acuerdo a una condición definida repite un conjunto de lineas de código hasta que se deje de cumplir la condición definida. Entre otras que para ejemplo no vienen al caso Las variables son los espacios de almacenamiento temporal que se nombraron anteriormente, hay de varios tipos según lo que se quiere guardar: Integer: Guarda números enteros. Real: Puede guardar números con coma decimal. String: Puede guardar textos. Y varios más que no vamos a usar ahora. Las variables se definen en el programa escribiendo "Var NombreVariableSinEspacios:TipoVariable" Las palabras reservadas básicas son: Program: para iniciar un programa, es la primera palabra que debe estar en el programa, se escribe Program seguido del nombre del programa sin espacios y luego ";", así: "Program Promedio_PepitoFlores;" Var: se usa para definir las variables Begin: sirve para indicar donde comienza un bloque de código, los bloques de código agrupan las instrucciones que se ejecutarán juntas. End; :Sirve para indicar donde termina un bloque de código. End. :Indica donde finaliza el programa. While: Define que las instrucciones que están adentro se repitan de forma indefinida mientras se cumpla una condición, se usa: While Condición Do Begin .....Codigo_que_se_repetirá; End; También se deben tener en cuenta los "operadores" que sirven para indicar operaciones matemáticas entre números, variables, condiciones, etc, los básicos y que usaremos ahora son: "+" : Para la suma "- ": Para la resta "*" : Multiplicación "/ ": División ":=": Asignación Al finalizar una linea todas, escluyendo las que comienzan con If, While, Begin, terminan con ";". Comentarios: los comentarios son anotaciones que puede hacer el programador y que la computadora ignora, el objetivo de los comentarios es para explicar diferentes partes del programa, poniendo la frese a comentar entre llaves.Se usan asi: "{Frase a comentada}" Otras palabras Writeln: Muestra un mensaje en pantalla y permite mostrar el valor de una variable, se usa: "Writeln('Mensaje',Variable_a_mostrar);" Read: Pide que se ingrese un valor y al ingresarlo lo guarda en una variable, se usa: "Read(Variable);" Existen muchas más pero estas son las que utilizaremos por el momento Empezamos a escribir el código Bueno teniendo todo lo anterior vamos a crear un archivo de texto llamado Promedios.pas, prestando atención a que la extensión sea ".pas" y no ".txt", en caso de escribirlo con el block de notas. Aunque la mejor opción es utilizar el Geany en Linux o el editor de código de Pascal en windows que ya incluyen las opciones para poder generar el programa a partir del código que vamos a escribir. Para lo cual nuestro código va a quedar así: (el tabulado es necesario solo para que el código sea mas legible) Program Promedios; ...{Definimos que lugares para guardar las cosas que necesitamos.} ...Var Suma, Cantidad, Numero:Integer; ...Var Promedio:Real; Begin ......{Ponemos los valore iniciales a las variables} ......Suma := 0; ......Cantidad := 0; ......Numero := 0; ......Promedio := 0; ......{Mostramos mensaje} ......Writeln('Programa para calcular promedios'); ......{Carga de números} ......While Numero <> -1 do Begin {Repetimos mientras numero sea diferente a -1} ..........Cantidad := Cantidad + 1; {Aumentamos en 1 el valor de Cantidad} ..........Write('Ingrese un número, -1 para terminar: '); ..........Read(Numero); {Pedimos que se ingrese un numero} ..........Suma := Suma + Numero; {Se hace la sumatoria} ......End; ......{Cálculo del promedio} ......Promedio := Suma/Cantidad; ......{Muestra del resultado} ......Writeln('El promedio es: ',Promedio:4:2) {El ":4:2" agregado sirve para que el valor no sea mostrado con formato exponencial} End. Probamos como funciona El código terminado nos queda así: Ahora lo "Compilamos" para que nos haga el ejecutable (en Geany apretando F8) y "Ejecutamos" apretando F5, lo probamos cargando valores Y ya está. Bien finalizó el primer post de programación, esta solo es una introducción muy básica de lo que es la programación y solo pretende dar una muestra sencilla de la materia.

Luego de estar bastante tiempo sin publicar nada vuelvo con un nuevo post básico de programación, en este caso vamos a hacer un pequeño calendario donde podremos guardar actividades organizadas por fecha y hora en una base de datos SQLite 3. Bueno para empezar ejecutamos Gambas, Seleccionamos la opción de nuevo proyecto, Aplicación gráfica y luego tildamos la opción de Acceso a base de datos, continuamos con el asistente y al finalizar llegaremos a la siguiente pantalla donde vemos el formulario vació y las barras de herramientas. Ahora nos dirigiremos a la barra de proyecto (la que se encuentra a la izquierda de la pantalla y donde se puede ver la estructura de nuestro proyecto) y creamos dos módulos nuevos (eligiendo la correspondiente opción), uno llamado "Globales" donde definiremos las variables globales que se usarán dentro del programa y otro "BasedeDatos" donde estará el código que utilizaremos para realizar las operaciones de lectura y edición sobre la base de datos. Módulo "Globales" PUBLIC Conexion AS Connection 'Identificador de la conexión de base de datos Donde definimos la variable conexión que servirá de identificador para utilizar la base de datos. Módulo "BasedeDatos" Luego necesitamos definir la estructura de almacenamiento de datos, para lo cual crearemos una tabla que llamaremos "Actividades" con los campos, id, fecha y actividad, para lo cual necesitaremos del siguiente código (que posteriormente lo escribiremos dentro del módulo "BasedeDatos": DIM hTable AS Table hTable = hConn.Tables.Add("Actividades" WITH hTable _.Fields.Add("id", db.Serial, 0) _.Fields.Add("fecha", db.Date, 0) _.Fields.Add("actividad", db.String, 0) _.PrimaryKey = ["id"] _.Update END WITH Definimos el campo "id" como clave principal ya que podremos tener varias actividades situadas en la misma fecha y hora y a futuro nos simplificará el proceso de eliminación y edición de registros. Ahora para guardar datos utilizamos el siguiente código: 'Procedimiento para agregar una nueva actividad PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date) _DIM Resultado AS Result _Resultado = Conexion.Create("Actividades" _Resultado["fecha"] = Fecha _Resultado["actividad"] = Actividad _Resultado.Update _IF ERROR THEN __Message("No se puede crear el registro", "Aceptar" _ENDIF END Para eliminar los registros necesitamos del código: PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String) _DIM Resultado AS Result _Resultado = Conexion.edit("Actividades", "id=&1", id) _TRY Resultado.Delete _IF ERROR = FALSE THEN __Message("Actividad eliminada","Aceptar" _ELSE __Message("No se pudo eliminar el registro", "Aceptar" _ENDIF END Para poder cargar los registros en un control Tableview PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date) _DIM Resultado AS Result _DIM Fecha_ing AS Date _DIM Py AS Integer _'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente _Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC" _'Definimos la tabla _Tabla.Clear _Tabla.Columns.Count = 4 _Tabla.Rows.Count = Resultado.Count _Tabla.Columns[0].Text = "Hora" _Tabla.Columns[0].Width = 100 _Tabla.Columns[1].Text = "Actividad" _Tabla.Columns[1].Width = 250 _Tabla.Columns[2].Text = "Id" _Tabla.Columns[2].Width = 50 _py = 0 _DO WHILE Resultado.Available __'Cargamos los registros de la tabla actividades que coincidan con la fecha __IF Date(Resultado["fecha"]) = Fecha THEN ___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0) ___Tabla[py, 1].Text = Resultado["actividad"] ___Tabla[py, 2].Text = Resultado["id"] ___'Coloreamos los registros ___IF py MOD 2 = 0 THEN ____Tabla[py, 0].BackColor = &FAFEFF& ____Tabla[py, 1].BackColor = &FAFEFF& ____Tabla[py, 2].BackColor = &FAFEFF& ___ELSE ____Tabla[py, 0].BackColor = &DEFFE4& ____Tabla[py, 1].BackColor = &DEFFE4& ____Tabla[py, 2].BackColor = &DEFFE4& ___ENDIF ___py = py + 1 __ENDIF __Resultado.MoveNext() _LOOP END Para hacer la carga de base de datos: 'Procedimiento para abrir la base de datos o crearla en caso de que no exista PUBLIC SUB InicializaBase() _Globales.Conexion = NEW Connection _Globales.Conexion.Type = "sqlite3" _Globales.Conexion.Host = User.home _Globales.Conexion.Name = "" _TRY Globales.Conexion.Open() _IF NOT Globales.Conexion.Databases.Exist("Calendario" THEN __Message("La base de datos no existe, se creará una nueva", "Aceptar" __Globales.Conexion.Databases.Add("Calendario" __WAIT 0.5 _ENDIF _Globales.Conexion.Close() _Globales.Conexion.Host = User.home _Globales.Conexion.Name = "Calendario" _TRY Globales.Conexion.Open() _IF ERROR THEN __Message.Error("No se puede establecer conexión con la base de datos" _ELSE __IF NOT Globales.Conexion.Tables.Exist("Actividades" THEN ___CrearBase(Globales.Conexion) __ENDIF _ENDIF END Por lo que el código entero del archivo nos quedará: 'Creamos la tabla de la base de datos PUBLIC SUB CrearBase(hConn AS Connection) _DIM hTable AS Table _hTable = hConn.Tables.Add("Actividades") _WITH hTable __.Fields.Add("id", db.Serial, 0) __.Fields.Add("fecha", db.Date, 0) __.Fields.Add("actividad", db.String, 0) __.PrimaryKey = ["id"] __.Update _END WITH END 'Procedimiento para abrir la base de datos o crearla en caso de que no exista PUBLIC SUB InicializaBase() __Globales.Conexion = NEW Connection __Globales.Conexion.Type = "sqlite3" __Globales.Conexion.Host = User.home __Globales.Conexion.Name = "" __TRY Globales.Conexion.Open() __IF NOT Globales.Conexion.Databases.Exist("Calendario") THEN ___Message("La base de datos no existe, se creará una nueva", "Aceptar") ___Globales.Conexion.Databases.Add("Calendario") ___WAIT 0.5 __ENDIF __Globales.Conexion.Close() __Globales.Conexion.Host = User.home __Globales.Conexion.Name = "Calendario" __TRY Globales.Conexion.Open() __IF ERROR THEN ___Message.Error("No se puede establecer conexión con la base de datos") __ELSE __IF NOT Globales.Conexion.Tables.Exist("Actividades") THEN ___CrearBase(Globales.Conexion) __ENDIF _ENDIF END 'Procedimiento para agregar una nueva actividad PUBLIC SUB AgregarActividad(Conexion AS Connection, Actividad AS String, Fecha AS Date) _DIM Resultado AS Result _Resultado = Conexion.Create("Actividades") _Resultado["fecha"] = Fecha _Resultado["actividad"] = Actividad _Resultado.Update _IF ERROR THEN __Message("No se puede crear el registro", "Aceptar") _ENDIF END PUBLIC SUB Borrar_seleccionado(Conexion AS Connection, id AS String) _DIM Resultado AS Result _Resultado = Conexion.edit("Actividades", "id=&1", id) _TRY Resultado.Delete _IF ERROR = FALSE THEN __Message("Actividad eliminada","Aceptar") _ELSE __Message("No se pudo eliminar el registro", "Aceptar") _ENDIF END 'Procedimiento para mostrar la lista de actividades PUBLIC SUB MostrarActividades(Conexion AS Connection, Tabla AS TableView, Fecha AS Date) _DIM Resultado AS Result _DIM Fecha_ing AS Date _DIM Py AS Integer _'Hacemos la consulta a la base de datos, seleccionamos todos los campos y los ordenamos por fecha de forma ascendente _Resultado = Conexion.Exec("Select * from Actividades order by fecha ASC") _'Definimos la tabla _Tabla.Clear _Tabla.Columns.Count = 4 _Tabla.Rows.Count = Resultado.Count _Tabla.Columns[0].Text = "Hora" _Tabla.Columns[0].Width = 100 _Tabla.Columns[1].Text = "Actividad" _Tabla.Columns[1].Width = 250 _Tabla.Columns[2].Text = "Id" _Tabla.Columns[2].Width = 50 _py = 0 _DO WHILE Resultado.Available __'Cargamos los registros de la tabla actividades que coincidan con la fecha __IF Date(Resultado["fecha"]) = Fecha THEN ___Tabla[py, 0].Text = Time(Hour(Resultado["fecha"]), Minute(Resultado["fecha"]), 0) ___Tabla[py, 1].Text = Resultado["actividad"] ___Tabla[py, 2].Text = Resultado["id"] ___'Coloreamos los registros ___IF py MOD 2 = 0 THEN ____Tabla[py, 0].BackColor = &FAFEFF& ____Tabla[py, 1].BackColor = &FAFEFF& ____Tabla[py, 2].BackColor = &FAFEFF& ___ELSE ____Tabla[py, 0].BackColor = &DEFFE4& ____Tabla[py, 1].BackColor = &DEFFE4& ____Tabla[py, 2].BackColor = &DEFFE4& ___ENDIF ___py = py + 1 __ENDIF __Resultado.MoveNext() _LOOP END Formulario principal Luego en el formulario principal agregamos el componente Datechooser, que nos servirá para elegir la fecha para ver las actividades que concuerdan con aquella que se haya seleccionado y al mismo tiempo disponer de un valor de fecha para crear un nuevo registro. Una vez situado hacemos doble click sobre el lo que nos llevará a la ventana de edición de código del formulario situándonos en el evento de cambio de fecha. En dicho lugar escribimos el siguiente código: DIM Dia, Mes, Anio AS Integer Dia = DateChooser1.Day Mes = DateChooser1.Month Anio = DateChooser1.Year 'Mostramos las actividades del dia seleccionado BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) Donde definimos variables locales donde almacenamos los valores de los componentes de la fecha seleccionada para poder pasárselos como parámetro al procedimiento que muestra las actividades que concuerdan con día (procedimiento escrito anteriormente en el módulo "BasedeDatos". Luego creamos un control Tableview1 donde más tarde mostraremos las actividades guardadas Creamos controles * TextArea1 Para introducir la descripción de la actividad * Spinbox1 Para introducir el valor de la hora * Spinbox2: Para introducir el valor de los minutos Un botón agregar donde hacemos doble click para acceder al evento button_click y escribir el siguiente código: _DIM Dia, Mes, Anio AS Integer _'Validamos que se completen los campos nesesarios IF TextArea1.Text <> "" THEN _Dia = DateChooser1.Day _Mes = DateChooser1.Month _Anio = DateChooser1.Year _'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos _BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0)) _'Borramos el campo de actividad _TextArea1.Text = "" _'Actualizamos la lista de actividades _BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) ELSE _Message("Se debe completar el campo actividad", "Aceptar") ENDIF Y un botón para eliminar las actividades que se muestren en el control TableView1 (es importante definir la propiedad Mode = Single del TableView para poder elegir los registros), dentro del evento Button_click de dicho control escribimos el siguiente código: DIM Dia, Mes, Anio AS Integer Dia = DateChooser1.Day Mes = DateChooser1.Month Anio = DateChooser1.Year 'Borramos el registro BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text) 'Actualizamos la lista de actividades BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) En este ejemplo no cambiamos los nombres predeterminados de los controles, pero se puede hacer editando la propiedad "name" de los mismos, lo que en programas más grandes será de utilidad evitado posibles confusiones al momento de programar El código del formulario principal nos debe quedar así PUBLIC SUB Form_Open() _BasedeDatos.InicializaBase END PUBLIC SUB DateChooser1_Change() _DIM Dia, Mes, Anio AS Integer _Dia = DateChooser1.Day _Mes = DateChooser1.Month _Anio = DateChooser1.Year _'Mostramos las actividades del dia seleccionado _BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) END PUBLIC SUB Button1_Click() _DIM Dia, Mes, Anio AS Integer _'Validamos que se completen los campos nesesarios _IF TextArea1.Text <> "" THEN __Dia = DateChooser1.Day __Mes = DateChooser1.Month __Anio = DateChooser1.Year __'Guardamos la actividad ingresada en la tabla "Actividades" llamando al procedimiento AgregarActividad del modulo BasdeDatos __BasedeDatos.AgregarActividad(Globales.Conexion, TextArea1.Text, Date(Anio, Mes, Dia, SpinBox1.Value, SpinBox2.Value, 0)) __'Borramos el campo de actividad __TextArea1.Text = "" __'Actualizamos la lista de actividades __BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) _ELSE __Message("Se debe completar el campo actividad", "Aceptar") _ENDIF END PUBLIC SUB Button2_Click() _DIM Dia, Mes, Anio AS Integer _Dia = DateChooser1.Day _Mes = DateChooser1.Month _Anio = DateChooser1.Year _'Borramos el registro _BasedeDatos.Borrar_seleccionado(Globales.Conexion, TableView1[TableView1.Row, 2].Text) _'Actualizamos la lista de actividades _BasedeDatos.MostrarActividades(Globales.Conexion, TableView1, Date(Anio, Mes, Dia, 0, 0, 0)) END Y aquí ya tenemos la primera versión del programa finalizada, luego continuaremos agregándole características y afinando el código. También podremos generar un paquete instalable para las distribuciones de linux más conocidas. Link de descarga del proyecto gambas 2: https://drive.google.com/file/d/0B9MnFXiRgNREVEFtMlBHc3gycU0/edit?usp=sharing
El capitalismo, el consumismo y la esclavitud Existe una importe relación entre el consumismo y la "esclavitud del siglo XXI" (como se le puede llamar), que se caracteriza por la inexistencia de lazos físicos que aten a las personas, que se encuentran encerradas dentro de un reducido conjunto de opciones, pocas alternativas que en peor de los casos se decide entre la existencia miserable en condiciones precarias y de explotación, como la que sufren los trabajadores de la "gran" china capitalista, o situaciones deribadas de diversas adicciones y un oscuro futuro. Estos lazos son producto del sistema capitalista, donde en el afan de pocas personas de acaparar poder y riqueza, atravez de sus empresas crean nesesidades que motivan a la gente a consumir productos que antes de un previo bombardeo publicitario, y diversos sistemas que logran implantar en la sociedad valores que deriban en la modificacion de la mentalidad de gran parte de la población, creando así nuevas personas con una perspectiva materialista y donde el exito personal es alcanzar un estatus de riqueza basado en el consumo desmedido y sin importar las consecuencias que genera. Se nos quiere llevar a una nueva era donde todo es descartable y "barato", donde cada vez que los años transcurren se reduce la vida util de los productos y se busca que las posibles reparaciones sobre los mismos sean más costosas para lograr una relación costo beneficio lo más negativa posible para fomentar la compra de un producto nuevo. Por decir un ejemplo un televisor de los años 80 que tenia en casa funcionó asta hace unos dos años, cuando un nuevo televisor pantalla plana a lo sumo durará 5 años y cuando deje de funcionar ya no se encuentre el respuesto adecuado por ser obsoleto y se nesesite comprar uno nuevo, lo que tambien se aplica a otros rubros y produce enormes volumenes de basura que contamina el planeta. El consumismo implantado por el sistema capitalista que se encuentra en plena expansión por el mundo globalizado, genera el incremento de la demanda que se traduce en mayores cantidades de recursos a convertir en productos apartir del trabajo, lo que a su vez debido a la imagen de la empresa como propiedad privada sujeta a la desición de una persona o un grupo reducido de ellas, se trata a los trabajadores como un bien material más o una variable dentro de su contabilidad, donde se intenta reducir gastos para aumentar las ganancias y lograr más poder. El sistema nesesita para funcionar del gasto y la inversión, lo que hace que uno no pueda escapar de el es el echo de que para cubrir desde lo más básico e impresindible a cualquier bien inesesario debemos gastar, por lo que nesesitamos tener dinero de forma obligatoria para poder sobrevivir, y la forma honesta de conseguirlo es atravez del trabajo. Este sistema tambien fomenta la delincuencia, por ambición de gente que buscan el "camino facil" o aquellos se ven imposibilitados de acceder a una fuente de trabajo, ya sea por fallas en el sistema que no le permitieron alcanzar cierto nivel de educación requerido, no se les permitio acceder a ciertas herramientas o son objeto del prejuicio de aquellos que se creen estar en un nivel superior por gozar de condiciones que no poseen las otras personas y jamas intentaron acercarse a su punto de vista, ya que no se interesan en nadie y miran de estar bien con ellos mismos. El tener más bienes materiales no asigna un mayor estatus, y más si esta persona fuera aislada de la sociedad y fuera llevada a un lugar en el medio de la "nada" donde deberian aprender a sobrevivir. Por lo que se sacaria como conclusión que la gente promedio siempre estará por "debajo" de los empresarios al recibir solo lo minimo que la empresa puede pagar. y por los valores de la sociedad actual al verse en un nivel "inferior" querrá subir atravez del consumo de ciertos productos que supuestamente consumen la gente de "más nivel". La esclavitud se ve reflejada en los lugares donde más de manfiesto se encuentra el sistema capitalista, por ejemplo en china donde las corporaciones explotan a su "mano de obra barata" y no tienen otro camino que trabajar en grandes factorias donde no se les retribuye su esfuerzo de forma correcta y son castigados severamente, o en estados unidos u otros paises del primer mundo, donde se encuentra viva la tradicion del consumo donde millones de personas influenciadas por los medios de comunicación y cierta cultura impuesta son alentadas a consumir bienes que no nesesitan, es como si estuvieran obligados y esclavizados en casos más severos(como el caso de un adolescente que vendio su riñon para comprar un ipad) a comprar cosas que no nesesitan lo que no los hace del todo libres. Tambien está el peor resultado de la esclavitud como la trata y otros fenomenos nacidos de la perversion humana, que despojan de la humanidad a sus victimas convirtiendolas en una "mercancia" más a ser comercializada, el sistema actual fomenta el consumo se todos los productos, por lo que esto no es la esepción. Pero como en cualquier comercio debe existir demanda el sistema se encarga de generarla bombardeando a todos nosotros con ciertas basuras que buscan que afloren ciertas cosas dormidas, en algunos casos muy en el fondo y que gracias a su conciensia uno ni se dan cuenta que lo tienen y jamas sale a la luz, directamente n existen o en otros casos en mentes algo enfermas fomenta ciertos deseos que desenbocan en la nesesidad de consumir. Bueno, me despido y me gustaria que alguien leyera y comente algunos de mis "delirios" de las altas horas de la noche, nunca tengo certeza de que tan cerca o lejos de la verdad general me ecuentro y aun asi tal vez esa verdad no sea la que realmente deberia ser...
Hay situaciones con equipos informáticos que pueden acabar con la paciencia de hasta la de un hipotético gurú del yoga y la meditación, o al menos fastidiar al personal que se encuentra a cargo del manejo de la fotocopiadora. El problema no es con la máquina en si, la cual funciona perfectamente, la situación transcurre al intentar utilizar la computadora para imprimir documentos presentes en Pendrivers u otros dispositivos de almacenamiento en cualquier tipo de formato, sucede que la PC sufre de repentinos reinicios, lentitud desesperante y otros efectos misteriosos atribuidos a los famosos virus informáticos. La computadora entonces se transforma en un obstáculo incómodo de superar entre el archivo y el equipo de impresión y fotocopiado. Al parecer la solución no se hace constante y el remedio con el tiempo se hace peor que la enfermedad, antivirus que se morfan los recursos presentes de un ordenador no muy nuevo que digamos, numerosos programas situados en el inicio de windows, los virus de los que antes hablamos, el engorde característico de la mayoría de las versiones de windows (en este caso un Win XP) y quien sabe que otras porquerías. Al parecer la máquina se somete a periódicos controles técnicos pero siempre desembocan en la solución temporal, tal vez la computadora sea alérgica a alguna distribución de linux, por que la persona que se ocupa de su mantenimiento (situándose casi en el rol de médico) no lo tomó en cuenta al parecer. Esperemos que a la PC pueda encontrar alguna cura de su enfermedad, ya que el windows no es fácilmente combatible, se posesiona de todas las defensas posibles y se hace difícil de combatir no por la pc en si, ya que con un rato en el consultorio se libraría de la peste, sinó de los factores externos con los cuales corre serio riesgo de contagio o reincidencia. El problema es que muchos usuarios la mayoría de las veces no conocen el antídoto que le devuelve la vitalidad a la PC, le ahorra en consultas al servicio técnico y más que seguro que quien se relacione con dicho equipo no sufra consecuencias tales como dolores de cabeza recurrentes, frustración al ver que la computadora no cumple como debería entre otros síntomas de lidiar con windows. Pero bueno, no hace falta explicar por que el doctor no cura a su paciente, debe ser por que las repetidas visitas le dejan más plata y por que tal vez pueda lucrar con el reemplazo del equipo. Bien, ya me dejo de delirar por que lo más probable es que no me llamen para solucionar los problemas presentes al parecer ya hay alguien que los soluciona...

Esta ya es historia vieja, por suerte le llegé a agarra la mano para domar tán arisco aparato, pero hace días cuando creia que todo estaba solucionado, que la limpieza había sacado toda maldad, impureza y suciedad de su interior, al rato nomas ya se había renegado. Como si resabios de una facción revolucionaria resurgiera de las sombras para asestar otro golpe a la vil tiranía que como cual déspota dictador le propinaba luego de interminables horas de trabajos pesados de impresión. Rios de tinta diseminados por incontables páginas donde se diluían en el blanco inmaculado de las hojas dispuestas en su bandeja de entrada frente a la espesa y negrusca mezcla de colores de infinitas limpiezas de cabezales. No basto el despansurramiento y desarme total de la misma, esa vez hubo que interiorizarse más en las oscuras malezas que soponen la oscuridad de la carcaza y las cintas de contacto, había que llegar al núcleo del asunto, una pasada rápida no bastaba para parar de raíz las continuas insubordinaciones. Pero no queda otra que comprender que es imposible evitar que tales brotes de mala azarosidad me juegen en contra, que una parte de una hipotética pseudo consciencia anidando en los circuitos de la disocha máquina no pudiera encontrar argumentos para complicarme un poco la vida o que simplemente es desgaste propio del equipo sumado a una conjunción de variables como la viscosidad de la tinta, las cantidades almacenadas en los cartuchos, y oscuras razones no desencadenen en el no funcionamiento. Los sacerdotes de la noble orden de HP, podran alegar razones como la heregía de caer en pecados de recarga de cartucho, de no registración de producto, de no utilización de consumibles "santificados" por su mano entre otras cuestiones releidas en su biblia legal y no ética para paganos como nosotros que no venden su alma para comprar cartuchos "originales", pero los HdP saben muy bien que solon dicen sarzas para enbaucar a quien pobre corderito se digne creerles y comulgar entre sus filas. Pero ya me fui de tema, la escala final para la resolución de tan aquejante problema se simplificó al ablande de la tinta reseca en los inyectores, cosa que por suerte y gracia del destino no me demoró mucho y no resultó en daños irresolucbles para tan odioso aparato. Sim más me despido hasta otro rato de pavada y locura.

Y al parecer llegó el día del fin de la historia de amor odio con la impresora... aunque mi deseo es que solo sea una apariencia fruto del delirio plasmado en tan simple obra de arte (la imagen de arriba) creada con poco contenido imaginativo y 5 minutos, pero al parecer por desgracia no lo es, la impresora cumplió su ciclo, tal vez acelerado vertiginosamente por la utilización de tintas inadecuadas, o por el maltrato propinado por la feroz labor esclavizante a la que fuera sometida por los crueles designios del capitalismo voraz. No importa que fuere lo que aya sucedido, se llegó a un punto de irremediable no retorno donde como próxima escala será un taller de manualidades de reciclado o su desguace para posterior quita de partes para el feroz carnicero cirujano de impresoras. La única esperanza es el gestionado de un nuevo cabezal de impresión, ya que los actuales en una suerte de huelga perpetua se niegan a trabajar, conduciendo sendas gotas de tinta en una monótona tarea de manufactura donde los píxeles se materializan en tóxico líquido depositado sobre papel. Al parecer esta vez los insubordinados elementos revolucionarios lograron su propósito llegando tal vez a su meta final, ya no reciben mis ordenes y de oírlas dan caso omiso. pero en fin, no ganaron yo no me rindo y voy por más, aunque retome el control dentro de unos meses, aunque sacrifique algún fugaz presupuesto destinado a la compra de bizcochitos del desayuno de infinidad de jornadas, por que sé que al menos los rodillos y motores se mantienen firmes y leales a mi, no se agregaron a formar parte de las columnas golpistas y esperan impacientes el regreso al viejo orden. Bueno, aun aburrido finalizo este pequeño post hasta el momento que me vuelvan ganas de escribir cosas pocos cuerentes, Saludos!

Hoy les compartiré unos tips para hacer una miniagujereadora para hacer pequeños orificios en plasticos, placas de circuito impreso y otros materiales en las que todavía no la probé. Los materiales necesarios son: Motor de lectora de cd o similar de corriente directa (no paso a paso) Un cañito de lapicera para sujetar la mecha. Una mecha para metal de medio milimetro de diametro o menor (lo más caro y que no podremos encontrar reciclando otros componentes. Un poco de pegamento. Plasticos, madera, etc que puedan servir para hacer la estructura. Cable, medio metro o menos. Clip de bateria de 9 v. Interruptor, o en su defecto dos chapitas que hagan contacto. Aquí la imagen en cuestión de como quedó terminada la sección principal. Para hacerla cortamos un trozo de caño de lapicera con una tijera y lo metemos a presión en el eje del motor, luego introducimos la mecha por el otro extremo y añadimos una gota de pegamento intentando que la mecha se mantenga siempre en el centro. Obviamente le podremos agregar otros componentes para sujetarla y hacer un manejo más cómodo de la misma. La alimentación se recomienda hacerla con una fuente de alimentación de como máximo 9 V. Por ahora hice algunas pruebas con una pila de 9v conectandola directamente a los cables de alimentación, comprobando de no conectar al reves, ya que la mecha debe girar en una dirección para poder agujerear, por lo que más adelante cuando tenga tiempo me ocupo de hacer una carcasa para motar el motor, la batería, un conector de alimentación alternativa, un pulsador y otras cosas que se le puedan agregar. Hasta la próxima.