dpkg: error al procesar “pakete” (–configure)

porque el futuro es abierto usa linux/gnu

dpkg: error al procesar (–configure)
es un error que se da en debian y derivados como ubuntu cuando se rompe un pakete y no se puede eliminar para solucionarlo seguimos estos pasos
nos diregimos a una consola y ponemos

cd /var/lib/dpkg/info
despues
ls |grep “nombre del pakete roto sin comillas” ej ls |grep nvidia
depues sudo rm “el pakete.postinst”
ej sudo rm nvidia.postinst
luego sudo apt-get update y la vida sigue su curso.
este es un error frecuente por el que la gente reinstala todo porque al producirse este error el sytema de paketes no instalo o desintala nada

fuente: http://srinuxubuntu.homelinux.com/index.php/dpkg-error-al-procesar-acpid-configure/

Ver la entrada original

Anuncios
Publicado en Uncategorized

Replacing MySQL Full-text search with Sphinx

It’s very handy to have FT search out of the box, but there are several drawbacks attached. Problem is that MyISAM Full-text search is not designed to handle big amounts of text data. If you plan to index more than 1M documents you will probably need to take a look on the external search system like Lucene or Sphinx. For the usual LAMP-based service I personally would prefer to use Sphinx as it provides simple transition from MySQL FT and easy to integrate into any application (Sphinx could be queried via native APIs or via MySQL protocol).

Say we have table called <my_table> with `title` and `content` text fields. In MySQL you have to fire query like this:

SELECT * FROM <my_table> WHERE MATCH(`title`,`content`) AGAINST ('I love Sphinx');

Let’s see how could we do the same query with Sphinx.

There are two steps to run the Sphinx as a MySQL FT replacement. First you will need to pull all needed text data from MySQL to Sphinx. For that you have to configuresource and index definition in Sphinx search config. Second step is to run indexer program which will connect to MySQL and fetch all the desired data. Then fire up the search daemon which will serve queries. Simplified Sphinx configuration example is below:

You need to let Sphinx know where to look for the data (source configuration):

source my_source
{
    type      = mysql
    sql_host  = localhost
    sql_user  = sphinx
    sql_pass  = ********
    sql_db    = <my_database_name>
    sql_port  = 3306
    sql_query = SELECT id, title, description FROM <my_table>
}

Please note that id field in sql_query. This field MUST be positive integer and have to be unique across all the documents in collection. Auto_incremented integer primary key from MySQL table with work in this case like a charm.

Now we need to tell Sphinx where to store all that data and configure index:

index my_first_sphinx_index
{
    source        = my_source
    path          = <path_to_sphinx_home>/var/index1
    docinfo       = extern
    charset_type  = utf-8
}

That’s it. Let’s add few more required sections to complete configuration:

Indexer settings:

indexer
{
    mem_limit    = 256M
    write_buffer = 8M
}

and daemon configuration:

searchd
{
    listen                  = 9312
    listen                  = 9306:mysql41
    pid_file                = <sphinx_path>/var/searchd.pid
    max_matches             = 1000
}

Put blocks above to <sphinx_path>/etc/sphinx.conf file which will be your main Sphinx configuration file.
Please also make sure that <sphinx_path>/var directory is writable for user you planning to run sphinx daemon.

Now we have to perform initial indexing by running indexer binary

<sphinx_path>/bin/indexer my_first_sphinx_index -c <sphinx_path>/etc/sphinx.conf

indexer my_first_sphinx_index tells indexer to create index called my_first_sphinx_index described in sphinx config. To create all the indexes at once (if you have two or more) run indexer –all -c <sphinx_path>/etc/sphinx.conf

Now you have to run the search daemon apparently called searchd

<sphinx_path>/bin/searchd -c <sphinx_path>/etc/sphinx.conf

Now Sphinx should be able to answer queries.

Fire up mysql client and connect to brand new Sphinx installation:

$ mysql -h0 -P 9306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 2.0.3-id64-dev (rel20-r3043)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Please note server version. It is Sphinx! Now you can hire all power of Sphinx full-text query language!

mysql> SELECT * FROM my_first_sphinx_index WHERE
MATCH('I love Sphinx') LIMIT 0,5; SHOW META;
+---------+--------+
| id      | weight |
+---------+--------+
| 7637682 |   2652 |
| 6598265 |   2612 |
| 6941386 |   2612 |
| 6913297 |   2584 |
| 7139957 |   1667 |
+---------+--------+
5 rows in set (0.01 sec)

+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| total         | 51     |
| total_found   | 51     |
| time          | 0.013  |
| keyword[0]    | love   |
| docs[0]       | 227990 |
| hits[0]       | 472541 |
| keyword[1]    | sphinx |
| docs[1]       | 114    |
| hits[1]       | 178    |
+---------------+--------+
9 rows in set (0.00 sec)
mysql>

Please note – Sphinx returns document IDs, not a document content, so you need to query MySQL to fetch additional fields: SELECT * FROM <my_table> WHERE id IN (7637682, 6598265, …, 7139957)

Config above is fully working but very simple and provided as an example. You can download it from this website directly or using wget:

wget http://astellar.com/downloads/sphinx.conf

Another way to create initial Sphinx configuration is to adopt Sphinx configuration sample called sphinx-min.conf.dist bundled to the Sphinx RPM and Deb packets.

You could also learn more about Sphinx tips and tricks from my talks on various conferences and meetups, read blog posts about Sphinx and follow me on twitter.

If you are looking for help with Sphinx installation and integration, troubleshooting and fine tuning please contact me for a quote with your problem description.

Enjoy!

P.S. If you found this article useful please share it!

Publicado en Uncategorized

2 funciones javascript

la primera para checar todo y le saegunda para recorrer todo lo checado
function checkAll(checked){
$(“input”).each(function(){
$(this).prop(‘checked’,checar);
});
if(checar == true)
checar = false;
else
checar = true;

}
function RecorrerCheckbox(){
var VacantesModificar = [];
$(“input:checked”).each(function(){
if($( this ).is(‘:checked’) ){
str = $(this).attr(‘id’);
if(str != undefined){
VacantesModificar.push(str);
}
}
});
console.log(VacantesModificar);
}

Publicado en Uncategorized

execute function javascript in python

PyExecJS is a porting of ExecJS from Ruby. PyExecJS automatically picks the best runtime available to evaluate your JavaScript program, then returns the result to you as a Python object.

A short example:

>>> import execjs
>>> execjs.eval(“‘red yellow blue’.split(‘ ‘)”)
[‘red’, ‘yellow’, ‘blue’]
>>> ctx = execjs.compile(“””
… function add(x, y) {
… return x + y;
… }
… “””)
>>> ctx.call(“add”, 1, 2)
3
Of course, you can pick particular JavaScript runtime by get() function:

>>> default = execjs.get() # the automatically picked runtime
>>> default.eval(“1 + 2”)
3
>>> jscript = execjs.get(“JScript”)
>>> jscript.eval(“1 + 2”)
3
>>> node = execjs.get(“Node”)
>>> node.eval(“1 + 2”)
3
If EXECJS_RUNTIME environment variable is specified, PyExecJS pick the JavaScript runtime as a default:

>>> #execjs.get().name # this value is depends on your environment.
>>> os.environ[“EXECJS_RUNTIME”] = “Node”
>>> execjs.get().name
‘Node.js (V8)’
PyExecJS supports these runtimes:

[PyV8](http://code.google.com/p/pyv8/) – A python wrapper for Google V8 engine,
[Node.js](http://nodejs.org/)
Apple JavaScriptCore – Included with Mac OS X
[Mozilla SpiderMonkey](http://www.mozilla.org/js/spidermonkey/)
[Microsoft Windows Script Host](http://msdn.microsoft.com/en-us/library/9bbdkx3k.aspx) (JScript)

Publicado en Uncategorized

trigger mysql estructura y operadores

CREATETRIGGER <nombre>
{BEFORE|AFTER}
{INSERT|UPDATE|DELETE}
ON
<tablename>
FOR EACH ROW
BEGIN
<sentenciasSQL>
END;
Publicado en Uncategorized

Particiones de tablas Mysql

Cuando alguna de las tablas de tu base de datos llega a crecer tanto que el rendimiento empieza a ser un problema, es hora de empezar a leer algo sobre optimización. Índices, el comandoEXPLAIN, el registro de consultas lentas, … estas son herramientas básicas que todo el mundo debería conocer. Una característica algo menos conocida, aunque se introdujo en la versión 5.1 de MySQL, son las particiones.

En el hospital en que trabajo la mayor tabla con la que tenemos que lidiar es la que almacena todos y cada uno de los contratos de todos los trabajadores que alguna pasaron por el hospital desde que se fundó en los años 50. Esto supone sólo un par de cientos de miles de tuplas, lo cuál no debería dar muchos dolores de cabeza con una base de datos bien optimizada, consultas razonables, y un hardware decente. Sin embargo, hay personas que tienen que tratar con cantidades de datos realmente obscenas, que multiplican estos números por 10 veces 10.

Una solución que nos puede venir a la cabeza, sobre todo si la mayor parte de la información se almacena a modo de histórico y no se accede a ella frecuentemente, es dividir la tabla en varias porciones. Podríamos mantener una tabla para el año en curso y otra para el resto de años, por ejemplo; o una para cada uno de los años; una por lustro; por década… dependiendo de cómo se trabaje con los datos.

El particionado es un concepto parecido, aunque automatizado, que puede ahorrarnos muchos quebraderos de cabeza. Consiste en dividir los datos en particiones más pequeñas (hasta 1024) procurando, porque de otra forma sería absurdo, que sólo haya que acceder a una partición a la hora de buscar una tupla.

Se puede particionar una tabla de 5 maneras diferentes:

    • Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual

       

      1. ALTER TABLE contratos  
      2. PARTITION BY RANGE(YEAR(fechaInicio)) (  
      3.     PARTITION partDecada50 VALUES LESS THAN (1960),  
      4.     PARTITION partDecada60 VALUES LESS THAN (1970),  
      5.     PARTITION partDecada70 VALUES LESS THAN (1980),  
      6.     PARTITION partDecada80 VALUES LESS THAN (1990),  
      7.     PARTITION partDecada90 VALUES LESS THAN (2000),  
      8.     PARTITION partDecada00 VALUES LESS THAN (2010),  
      9.     PARTITION partDecada10 VALUES LESS THAN MAXVALUE  
      10. );  
    • Por listas: para construir nuestras particiones especificamos listas de valores concretos.
      1. ALTER TABLE contratos  
      2. PARTITION BY LIST(YEAR(fechaInicio)) (  
      3.     PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),  
      4.     PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),  
      5.     PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),  
      6.     PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),  
      7.     PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),  
      8.     PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,  
      9. 2007, 2008, 2009),  
      10.     PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,  
      11. 2017, 2018, 2019)  
      12. );  
    • Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
      1. ALTER TABLE contratos  
      2. PARTITION BY HASH(YEAR(fechaInicio))  
      3. PARTITIONS 7;  
    • Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
      1. ALTER TABLE contratos  
      2. PARTITION BY KEY()  
      3. PARTITIONS 7;  
    • Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones

Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)

  1. EXPLAIN SELECT COUNT(*)  
  2. FROM contratos  
  3. WHERE fechaInicio BETWEEN ‘1950-01-01’ AND ‘1955-12-31’  
select_type table type key rows Extra
SIMPLE contratos ALL   239796 Using where

Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)

  1. EXPLAIN PARTITIONS SELECT COUNT(*)  
  2. FROM contratos  
  3. WHERE fechaInicio BETWEEN ‘1950-01-01’ AND ‘1955-12-31’  
select_type table partitions type key rows Extra
SIMPLE contratos partDecada50 ALL   8640 Using where

Como véis, el número de tuplas que MySQL tiene que comprobar se ve disminunido en 2 órdenes de magnitud.

Tagged with:
Publicado en Uncategorized

Attribute definitions html

Attribute definitions

onload = script [CT]
The onload event occurs when the user agent finishes loading a window or all frames within a FRAMESET. This attribute may be used with BODY and FRAMESET elements.
onunload = script [CT]
The onunload event occurs when the user agent removes a document from a window or frame. This attribute may be used with BODY and FRAMESET elements.
onclick = script [CT]
The onclick event occurs when the pointing device button is clicked over an element. This attribute may be used with most elements.
ondblclick = script [CT]
The ondblclick event occurs when the pointing device button is double clicked over an element. This attribute may be used with most elements.
onmousedown = script [CT]
The onmousedown event occurs when the pointing device button is pressed over an element. This attribute may be used with most elements.
onmouseup = script [CT]
The onmouseup event occurs when the pointing device button is released over an element. This attribute may be used with most elements.
onmouseover = script [CT]
The onmouseover event occurs when the pointing device is moved onto an element. This attribute may be used with most elements.
onmousemove = script [CT]
The onmousemove event occurs when the pointing device is moved while it is over an element. This attribute may be used with most elements.
onmouseout = script [CT]
The onmouseout event occurs when the pointing device is moved away from an element. This attribute may be used with most elements.
onfocus = script [CT]
The onfocus event occurs when an element receives focus either by the pointing device or by tabbing navigation. This attribute may be used with the following elements: AAREA,LABELINPUTSELECTTEXTAREA, and BUTTON.
onblur = script [CT]
The onblur event occurs when an element loses focus either by the pointing device or by tabbing navigation. It may be used with the same elements as onfocus.
onkeypress = script [CT]
The onkeypress event occurs when a key is pressed and released over an element. This attribute may be used with most elements.
onkeydown = script [CT]
The onkeydown event occurs when a key is pressed down over an element. This attribute may be used with most elements.
onkeyup = script [CT]
The onkeyup event occurs when a key is released over an element. This attribute may be used with most elements.
onsubmit = script [CT]
The onsubmit event occurs when a form is submitted. It only applies to the FORM element.
onreset = script [CT]
The onreset event occurs when a form is reset. It only applies to the FORM element.
onselect = script [CT]
The onselect event occurs when a user selects some text in a text field. This attribute may be used with the INPUT and TEXTAREA elements.
onchange = script [CT]
The onchange event occurs when a control loses the input focus and its value has been modified since gaining focus. This attribute applies to the following elements: INPUT,SELECT, and TEXTAREA.
Publicado en Uncategorized