› Foros › PC › Software libre
El objetivo:
Un sitio de referencia donde encontrar las soluciones para hacer funcionar el hardware de nuestro equipo, independientemente de la distribución, arquitectura o de cualquier otro factor.
Como conseguirlo:
Creando un sitio web que gestione las páginas con los pasos a seguir para la instalación de los drivers, por la distro a la que está dirigida, la arquitectura, versión y driver utilizado; que guarde los archivos necesarios (drivers, por ejemplo) para evitar que estos se pierdan (¿a quién no le ha ocurrido que siguiendo un tutorial se encuentre con que el enlace a un archivo no funcione?); que permita reportar bugs y errores durante la instalación de los drivers; un sistema de comentarios y votaciones para conseguir manuales de gran calidad; que cualquiera pueda proponer una versión mejorada de una página de pasos de instalación de un driver, pero sin perder en seguridad (se crean páginas individuales pendientes de moderación); una wiki explicando los comandos más comúnes en GNU/Linux para dar explicación a aquello que aparece en los pasos a seguir en la instalación de drivers...
... Es mucho trabajo, por eso, pido vuestra ayuda.
Esquema de la base de datos:
Este es el esquema que he pensado para la base de datos. No es un esquema definitivo, es solo mí idea, podéis hacer propuestas, por supuesto.
Borrador.
Snakefd99cb escribió:Bueno, mi opinión sobre algo privativo ya se conoce.
Pero eso de bugs, en algo privativo, ¿de qué sirve?
Snakefd99cb escribió:Alguna cosa suelta podría hacer. Pero lo que es comprometerme al 100% no puedo. Te soy sincero, bastante tengo con el trabajo y mis cosas.
blackgem escribió:AY, que me da un patatus, ojala tuviera tiempo, conocimiento y material para ayudar uff.
Esto si que es lo que hace falta, paginas centralizadas de donde sacar la información sin rebuscar en 20.000.000 y morirte cuando encuentras la informacion..., pero no es compatible con lo que tienes .
Aunque aun no me he tenido que pelear en un buen tiempo con drivers... (para WiFi si... para cada dia es mucho mas facil ello ^^, y para graficas paso de pijerias la verdad ).
Ahora que caigo..., para rematar la faena ya seria hacer un pequeño programita que examinara los dispositivos de tu PC y ofreciera distintas versiones de los drivers disponibles para ellos pudiendo elegir su instalacion, avisando de su comportamiento, si son privativos y si dan conflictos con otros..., ello conectandose a la base de datos Online claro ^^, algo como Everest juntandola con varias paginas dedicadas a drivers (incluyendo las oficiales y repositorios) .
e-Minguez escribió:FYI
http://kmuto.jp/debian/hcl/index.cgi
4eVaH escribió:Capitan, nunca he programado en python, pero no tengo problemas para aprender, en un momento dado podría ayudarte a la hora de picar código.
En realidad te podría ayudar en casi cualquier lenguaje, incluyendo html+css, javascript y php.
Saludos.
# -*- coding: utf-8 -*-
from django.db import models
class component(models.Model):
# Nombre del tipo de componente en español. Por ejemplo, "tarjeta gráfica"
es = models.CharField(max_length=70)
# Nombre del tipo de componente en inglés. Por ejemplo, "graphic card"
en = models.CharField(max_length=70)
# Una descripción de aquel tipo de componente al que se refiere en español.
description_es = models.CharField(max_length=250)
# Una descripción de aquel tipo de componente al que se refiere en español.
description_en = models.CharField(max_length=250)
# Un listado de rutas a imágenes
images = models.ManyToManyField(image)
class hardware(models.Model):
# La id del componente (padre). Es un número entero. Por ejemplo, si esta es una conceptronic C54RU (tarjeta inalámbrica USB) tendrá la id de "tarjeta inalámbrica" de la tabla componentes.
component = models.IntegerField()
# La marca del producto. Por ejemplo, Conceptronic.
mark = models.CharField(max_length=100)
# El modelo. En este caso, C54RU, aunque pueden ser más largos.
model = models.CharField(max_length=100)
# De un mismo modelo y marca pueden haber variantes incluso de un mismo chip. aquí se especifica.
variant = models.CharField(max_length=50)
# El chip, en este caso, rt73 (ralink).
chip = models.CharField(max_length=50)
# La salida al hacer lsusb, lspci que corresponde a este hardware.
lsx = models.CharField(max_length=200)
# Una descripción del hardware en español.
description_es = models.CharField(max_length=250)
# Una descripción del hardware en inglés.
description_en = models.CharField(max_length=250)
# Un listado de rutas a imágenes
images = models.ManyToManyField(image)
# Valor True o False. Especifica con True que la fila de datos es la que deben ver los usuarios al referirse a este articulo. Por ejemplo, puede haber una primera fila refiriendose a un articulo llamado "conceptronc C54Ru", pero que después, otro usuario envie una corrección con el nombre "conceptronic C54Ru" (notese la "i"). Un moderador da la razón a la corrección y la primera versión, deja de ser la publicada (la que ven "en primera plana" los usuarios) para pasar a verse la versión corregida.
published = models.BooleanField()
# Un número entero que se refiere a un id o un valor Nulo. En el caso anterior mostrado, la primera versión tendría un valor nulo, ya que no se basa en ningún articulo (es la primera versión) pero, la corrección sería hijo de la primera versión, ya que está basada en esta. En dicho caso, el valor sería la id de la fila padre.
father = models.IntegerField()
# Un valor numérico entero. Siguiendo el mismo ejemplo a los antes nombrados, imaginemos que se lanza una tercera versión basada en la segunda (no esta basada en la primera, es una modificación de la segunda versión). En dicho caso, "father" (el padre) sería la id de la segunda versión, pero, en todas las versiones se mantiene la id de la primera versión, la original, y se llama "first_father". De esta manera todos los comentarios y soluciones enlazarán siempre al componente independientemente de la versión en la que se encuentre.
first_father = models.IntegerField()
# Valoración del 0 al 4 del hardware, siendo ya la valoración calculada.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Votos actuales en la valoración del hardware.
stars_votes = models.IntegerField()
# Valor numérico entero. La id de usuario que envia esta fila de información.
user = models.IntegerField()
# Fecha en la que se envió la fila.
date = models.DateField(auto_now)
class solution(models.Model):
####### No debe confundirse entre "solution" y "page". La tabla "solution" incluye información sobre un procedimiento posible para hacer funcionar un determinado hardware. Por ejemplo, para nuestra Conceptronic C54RU con chip rt73 podemos usar los drivers de Serialmonkey, ndiswrapper o los drivers oficiales de ralink (privativos). Una página será la explicación de como utilizar un método en un idioma, para una arquitectura y una distribución. Por ejemplo, puede haber una página en español explicando como usar los drivers de serialmonkey para x86 en la distro Debian, otra página en inglés para como usar los drivers de serialmonkey para x86 en Debian, otra página en español de como usar ndiswrapper en x86_64 en Gentoo...
# Valor numérico entero. Es la id de "first_father" de la tabla hardware.
hardware = models.IntegerField()
# Valor True o False. Sigue la misma idea que el published de la tabla hardware.
published = models.BooleanField()
# Un número entero que se refiere a un id o un valor Nulo. Sigue la misma idea que el "father" de la tabla hardware.
father = models.IntegerField()
# Un valor numérico entero. Sigue la misma idea que el "first_father" de la tabla hardware.
first_father = models.IntegerField()
# El nombre del método en español.
name_es = models.CharField(max_length=100)
# El nombre del método en inglés.
name_en = models.CharField(max_length=100)
# Una descripción del método en español.
description_es = models.CharField(max_length=250)
# Una descripción del método en inglés.
description_en = models.CharField(max_length=250)
# Valoración del 0 al 4 de si es bueno el método, siendo ya la valoración calculada.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Votos actuales en la valoración del método.
stars_votes = models.IntegerField()
# Valor numérico entero. La id de usuario que envia esta fila de información.
user = models.IntegerField()
# Fecha en la que se envió la fila.
date = models.DateField(auto_now)
# Valor True o False donde True indica que es un driver privativo.
privative = models.BooleanField()
class page(models.Model):
####### Las variantes de un manual que se encuentran en el mismo idioma, para la misma arquitectura y la misma distro o distros serán propuestas de mejora, pero si por ejemplo se hace una variante de un mismo manual pero en otro idioma (una traducción) no será una mejora, sino que se hace una página nueva que será directamente hija de "solution".
# Valor numérico entero. Es la id de "first_father" de la tabla solution.
solution = models.IntegerField()
# Un número entero que se refiere a un id o un valor Nulo. Sigue la misma idea que el "father" de la tabla hardware.
father = models.IntegerField()
# Un valor numérico entero. Sigue la misma idea que el "first_father" de la tabla hardware.
first_father = models.IntegerField()
# Valor True o False. Sigue la misma idea que el published de la tabla hardware.
published = models.BooleanField()
# Idioma en el que está la página. Para español "es" y para inglés "en".
lang = models.CharField(max_length=2)
# Es la distribución o distribuciones para las que está pensado el manual.
distros = modelsManyToManyField(distro)
# La arquitectura (o, para decir que es valido para todas las arquitecturas, "All") para la que está pensado el manual.
architectures = models.ManyToManyField(architecture)
# Valor numérico entero. La id de usuario que envia esta fila de información.
user = models.IntegerField()
# Fecha en la que se envió la fila.
date = models.DateField(auto_now)
# Valoración del 0 al 4 de la calidad de esta información.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Votos actuales en la valoración de la información.
stars_votes = models.IntegerField()
# El texto con los pasos a seguir para hacer funcionar el hardware.
text = models.TextField()
class comment(models.Model):
# Que tipo de comentario es. Puede ser un comentario ("comment") o un reporte de fallo o problema ("bug").
comment_type = models.CharField(max_length=8)
# Un valor del 0 al 4. Si es un comentario, Con el 0 no agradeces para nada la página y con el 4 mucho. Si es un reporte de fallo, con 0 no le das mucha importancia y con el 4 mucha.
stars = models.IntegerField()
# Un valor numérico o un valor nulo. Se refiere a la id del comentario o del bug al que responde.
reply = models.IntegerField()
# Valor numérico entero. La id de usuario que envia esta fila de información.
user = models.IntegerField()
# Fecha en la que se envió la fila.
date = models.DateField(auto_now)
# El titulo del comentario o bug.
title = models.CharField(max_length=40)
# El texto de la contestación
text = models.TextField()
class attached(models.Model):
# Nombre del adjunto.
name = models.CharField(max_length=40)
# Versión del adjunto.
name = models.CharField(max_length=20)
# Nombre del archivo en el servidor del adjunto.
name = models.CharField(max_length=100)
# Veces descargado el archivo.
downloads = models.IntegerField()
# El "first_father" de la fila en la tabla "page" donde debe aparecer la descarga.
pages = models.ManyToManyField(page)
# El "first_father" de la fila en la tabla "comment" donde debe aparecer la descarga.
comments = models.ManyToManyField(comment)
# Valor numérico entero. La id de usuario que envia esta fila de información.
user = models.IntegerField()
# Fecha en la que se envió la fila.
date = models.DateField(auto_now)
rcaba escribió:He estado mirando la base de datos y en principio creo que tiene todo lo necesario, he estado mirando los comentarios ya que lo poco que he trabajado con base de datos a sido con Oracle y no entiendo muy bien la sintaxis de Django, aunque estoy mirando el manual que nos has ofrecido para enterarme un poco mejor, en definitiva creo que esta bien para empezar.
Una preguntilla, as hecho la base de datos a pelo de cabeza o has hecho algun diagrama de clases o entidad-relacion? yo he tenido que hacerme un boceto que sino no veo claras las asociaciones asi sobre el papel, lo digo porque si lo has hecho podías subirlo ya que es mas fácil revisarlo.
Un Saludo y animo, ayudaremos en lo que se pueda.
e-Minguez escribió:El enlace era para que copiarais ideas, se que no es lo mismo, pero igual os sirve.
capitanquartz escribió:¿La escaneo? xD Tiene flechas en rojo y todo... incluso en una esquina dibujé una carita sonriente. La syntaxis es la de python.
rcaba escribió:capitanquartz escribió:¿La escaneo? xD Tiene flechas en rojo y todo... incluso en una esquina dibujé una carita sonriente. La syntaxis es la de python.
Sino te importa escanearla? en python todavía no he programado, lo he hecho sobretodo en c++ y algo en java, pero bueno tenía ganas de mirar python que esuchado cosas muy buenas.
Saludos.
Einy escribió:Pues nada suerte, por mi parte, aunque se me ocurriera en que ayudaros me temo que no tengo mucho tiempo disponible, por no decir nada, pero os doy mi ánimo .
Si la página va a servir de pequeño-gran repositorio de drivers y dar unas indicaciones básicas perfecto, ahora si va a ser un página llena de copy&paste's que se pueden encontrar en google en 2 minutos, retiro lo del ánimo eh .
Un saludo.
Einy escribió:Si la página va a servir de pequeño-gran repositorio de drivers y dar unas indicaciones básicas perfecto, ahora si va a ser un página llena de copy&paste's que se pueden encontrar en google en 2 minutos, retiro lo del ánimo eh .
pho escribió:Einy escribió:Si la página va a servir de pequeño-gran repositorio de drivers y dar unas indicaciones básicas perfecto, ahora si va a ser un página llena de copy&paste's que se pueden encontrar en google en 2 minutos, retiro lo del ánimo eh .
Alguien no se ha leido las intenciones de la paginaaa xD
PD: se nota que capi usa el theme blanco, ese azul con el theme verde no se acaba de ver muy bien
capitanquartz escribió:Por lo que veo, nadie había probado antes Django. Debo confesar que yo estoy empezando ahora y que no me está costando demasiado... está bien documentado. Animo a que los interesados en la programación que comiencen ya a leerse el libro de Django. Quienes no tuviesen experiencia anterior con python, yo les recomendaría empezar antes con python.
Un saludo.
pho escribió:Einy escribió:Si la página va a servir de pequeño-gran repositorio de drivers y dar unas indicaciones básicas perfecto, ahora si va a ser un página llena de copy&paste's que se pueden encontrar en google en 2 minutos, retiro lo del ánimo eh .
Alguien no se ha leido las intenciones de la paginaaa xD
PD: se nota que capi usa el theme blanco, ese azul con el theme verde no se acaba de ver muy bien
hawk31 escribió:Apúntame a traducción y programación, que a lo mejor algo de C sirve xD.
Salu2.
sudo aptitude install cowsay
resadent escribió:Saludos y podéis ir asignandome tareas en cuanto querais
4eVaH escribió:resadent escribió:Saludos y podéis ir asignandome tareas en cuanto querais
Lo mismo digo.
jajavimo escribió:Me gustaria ayudarte, pero no tengo conocimientos sobre programación (de momento, porque estoy empezando con python).
Podría ayudarte como traductor, tengo un nivel medio de inglés pero ya he visto que tienes traductores.
No se a que te refieres con relaciones públicas, pero podría ayudarte en mis ratos libres.
The goal:
A reference site to find solutions to operate the hardware of our machine, independently of the distribution, architecture or any other factor.
How to get:
Creating a website to manage the pages with the step-by-step to install the drivers for the distribution that is geared to, architecture, version, and driver selected, saving the files (drivers, for example) to avoid they getting lost (To whom has not happened following a tutorial whith a not-working link to a file? ) Allow reporting bugs and errors during the installation of the driver; a comments' system and votes for achieve high quality textbooks, anyone can propose an improved version of a page of steps to install a driver, but without losing security (individual pages are created pending moderation), a wiki explaining the most common commands of GNU/Linux to give an explanation for what appears on the next steps in the installation of drivers...
... Much work, therefore, I ask you for help.
# -*- coding: utf-8 -*-
from django.db import models
class component(models.Model):
# Name of the component type in Spanish. For example, "tarjeta gráfica"
es = models.CharField(max_length=70)
# Name of the component type in English. For example, "graphic card"
en = models.CharField(max_length=70)
# A description of the component type in Spanish.
description_es = models.CharField(max_length=250)
# A description of the component type in English.
description_en = models.CharField(max_length=250)
# A list of paths to images
images = models.ManyToManyField(image)
class hardware(models.Model):
# Component ID (father). It's a entire number. For example, if it's conceptronic C54RU (a wireless USB card) it will have the "tarjeta inalámbrica" ID of the component table.
component = models.IntegerField()
# The brand. For example, Conceptronic.
mark = models.CharField(max_length=100)
# The model. In this case, C54RU, but it can be longer.
model = models.CharField(max_length=100)
# There may be variants of the same model and brand, even the same chip. Here it is specified.
variant = models.CharField(max_length=50)
# The chip, in this case, rt73 (ralink).
chip = models.CharField(max_length=50)
# Lsusb output, the lspci of this hardware.
lsx = models.CharField(max_length=200)
# A hardware description in Spanish.
description_es = models.CharField(max_length=250)
# A hardware description in English.
description_en = models.CharField(max_length=250)
# A list of paths to images
images = models.ManyToManyField(image)
# Boolean True or False. True specifies that the data row is that users should see when they refer to this component. For example, there may be a first row that refers a component called "conceptronc C54Ru" (without "i"), but after, another user sends a correction with the name "conceptronic C54Ru" (with "i"). A moderator accepts the correction and the first version is no longer published (the version that users see) to go to see the corrected version.
published = models.BooleanField()
# A entire number that refers an ID or a Null. In the previous case, the first version had a Null so it isn't based on any component (it is the first version) but the correction is the first version's son so it is based on the first one. In this case, tha asset is la its father's row ID.
father = models.IntegerField()
# A entire number. Following the same example, there is a third version based on the second one (it isn't based on the first version). In this case, "father" is the second version's ID id, but in all versions remains the first version's id, the original, and it's called "first_father". In this way all the comments and solutions will always link to the component regardless of the version which is.
first_father = models.IntegerField()
# Hardware valuation (0-4), Being already calculated the valuation.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Current votes in the hardware valuation.
stars_votes = models.IntegerField()
# A entire number. The user ID who sends this information row.
user = models.IntegerField()
# Date when the row was sended.
date = models.DateField(auto_now)
class solution(models.Model):
####### You musn't get confused between "solution" and "page". Th table "solution" has information about a possible procedure to make to work a certain hardware. For example, for our Conceptronic C54RU whith rt73 chip we can use the drivers of Serialmonkey, ndiswrapper or he official drivers of ralink (privative). A page will be the explication about use a method in a language, for an architecture and a distribution. For example, there may be a página en español explicando como usar los drivers de serialmonkey para x86 en la distro Debian, otra página en inglés para como usar los drivers de serialmonkey for x86 in Debian, another page in Spanish with ndiswrapper for x86_64 in Gentoo...
# A entire number. It is the ID of the "first_father" of the hardware's table.
hardware = models.IntegerField()
# Boolean True or False. It follows the same idea that the published of the hardware's table.
published = models.BooleanField()
# A entire number that refers an ID or Null. It follows the same idea that the "father" of the hardware's table.
father = models.IntegerField()
# A entire number. It follows the same idea that the "first_father" of the hardware's table.
first_father = models.IntegerField()
# The name of the method in Spanish.
name_es = models.CharField(max_length=100)
# The name of the method in English.
name_en = models.CharField(max_length=100)
# A description of the method in Spanish.
description_es = models.CharField(max_length=250)
# A description of the method in English.
description_en = models.CharField(max_length=250)
# Valuation (0-4) of the method, following the calculated valuation.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Currents votes of the method's valuation.
stars_votes = models.IntegerField()
# A entire number. The ID of the user who sends this information.
user = models.IntegerField()
# Date when the row was sended.
date = models.DateField(auto_now)
# Boolean True or False where True refers that it's a privative driver.
privative = models.BooleanField()
class page(models.Model):
####### The variants of a manual that are in a the same language, for the same architecture and the same distribution or other distributions will be proposed of improvement, but if there are a variant of the same manual in other language (a translation) it won't be a improvement, rather it is made a new page that will be directly son of "solution".
# A entire number. It is the ID of "first_father" of the solution 's table.
solution = models.IntegerField()
# A entire number that refers an ID or Null. It follows the same idea that the "father" of the hardware's table.
father = models.IntegerField()
# A entire number. It follows the same idea that the "first_father" of the hardware's table.
first_father = models.IntegerField()
# Boolean True or False. It follows the same idea that the published of the hardware's table.
published = models.BooleanField()
# Page's language. For Spanish "es" and for English "en".
lang = models.CharField(max_length=2)
# Distribution/s of the manual.
distros = modelsManyToManyField(distro)
# The architecture (if it is for all the architectures, "All") of the manual.
architectures = models.ManyToManyField(architecture)
# Entire number. The user Id that sends this information.
user = models.IntegerField()
# Date when the row was sended.
date = models.DateField(auto_now)
# Valuation (0-4) of the information.
stars = models.FloatField(max_digits=4, decimal_places=3)
# Current votes on the information's valuation.
stars_votes = models.IntegerField()
# The text with the steps to install the hardware (manual).
text = models.TextField()
class comment(models.Model):
# Comment's type. It can be a comment ("comment") or a bug ("bug").
comment_type = models.CharField(max_length=8)
# Valuation (0-4). A comment: with 0 you don't thank the page and with the 4 you thank the page a lot. A bug: with 0 you think it isn't important and with 4 you think that it's very important.
stars = models.IntegerField()
# A entire number or a Null.It refers th comment or bug's ID.
reply = models.IntegerField()
# A entire number. The user ID that sends this information.
user = models.IntegerField()
# Date whe the row was sended.
date = models.DateField(auto_now)
# Comment or bug's title.
title = models.CharField(max_length=40)
# The text with the reply.
text = models.TextField()
class attached(models.Model):
# Name of the attached.
name = models.CharField(max_length=40)
# Versión of the attached.
name = models.CharField(max_length=20)
# Name of the file on the attached's server.
name = models.CharField(max_length=100)
# Number of downloads.
downloads = models.IntegerField()
# The "first_father" of the row in the table "page" where the download should appear.
pages = models.ManyToManyField(page)
# The "first_father" of the row in the table "comment" where the download should appear.
comments = models.ManyToManyField(comment)
# A entire number. The user ID that sends this information.
user = models.IntegerField()
# Date when the information was sended.
date = models.DateField(auto_now)
analca3 escribió:Animo con todas mis ganas este proyecto, aunque no pueda colaborar ...No se nada de programacion. Pero bueno, yo os animo desde fuera.
PD: Como sugerencia: No se si la pagina va a estar en ingles solo. Me gustaria que estuviese tambien en español, ya que asi sera mas facil comprenderlo a los que no estamos muy avanzados en el idioma...
Salu2!!!
capitanquartz escribió:analca3 escribió:Animo con todas mis ganas este proyecto, aunque no pueda colaborar ...No se nada de programacion. Pero bueno, yo os animo desde fuera.
PD: Como sugerencia: No se si la pagina va a estar en ingles solo. Me gustaria que estuviese tambien en español, ya que asi sera mas facil comprenderlo a los que no estamos muy avanzados en el idioma...
Salu2!!!
Si, va a estar en español y en inglés. Es más, se va a traducir muchas cosas del español al inglés... (me arrepiento de no haberle dado tanta importancia al inglés desde pequeño... )
http://rapidshare.com/files/219670603/templates.7z.html
MD5: B94231943B8C5E34F4501322E6E658C0