Proteger un PDF de copiar y pegar mediante imágenes en Ubuntu Linux

Después del tutorial sobre cómo convertir un fichero PDF en varios JPG en Ubuntu Linux y el fantástico tutorial de Carazo, convertir un fichero PDF en varios PNG con un sólo comando en Linux, aquí os paso una manera de proteger vuestros PDF de copiar y pegar mediante imágenes. Es decir, pasamos nuestro documento a imágenes JPG y después lo juntamos todo en un fichero PDF. Es cierto que con un OCR pueden obtener el texto, pero ya tienen que tomarse la molestia. De todas maneras, es mejor apoyar el conomiento libre dejando el PDF libre de restricciones, pero si necesitáis protegerlo, éste es un método. read more

Leer más » 4 Comentarios

Convertir un fichero PDF en varios JPG en Ubuntu Linux

Después del fantástico tutorial de Carazo, convertir un fichero PDF en varios PNG con un sólo comando en Linux, aquí os paso otra alternativa para hacerlo, en este caso para JPG.

Convertir un PDF a JPG es muy fácil desde Ubuntu Linux. Para empezar, abre la terminal y ejecuta lo siguiente:

sudo apt-get install imagemagick

Ahora, dentro del directorio donde tengas tu PDF, ejecuta lo siguiente:

convert -density 400 nombre_fichero.pdf nombre_imagenes.jpg

Donde nombre_fichero.pdf es el PDF a pasar a JPG y nombre_imagenes.jpg es la salida de las imágenes. read more

Leer más » 2 Comentarios

Insertar PDF en un documento LaTeX

Cuando uno está trabajando el LaTeX, resulta indispensable poder añadir una figura PDF dentro del documento. Esto resulta muy útil para añadir, por ejemplo, gráficos en PDF (vectorial) en vez de imágenes (raster).

Aquí os dejo con una plantilla que utilizo generalmente:

\begin{figure*}[h!] centering \centering \includegraphics[width=1textwidth]{nombre_fichero.pdf} \caption{Texto para la leyenda} \label{nombre_referencia} \end{figure*}

Si tenéis alguna pregunta o sugerencia no dudéis en comentar.

Leer más » 1 Comentario

SteamOS, la distribución de Linux de Valve

steamos

Valve ha anunciado SteamOS, un sistema operativo con núcleo Linux diseñado para la TV y el salón.

Esto, sin duda, es una noticia muy interesante ya que es un paso más hacia adelante para que Linux sea considerada una plataforma importante en el mundo de los videojuegos. Esto significará un mejor soporte por parte de AMD y NVIDIA ya que los controladores éstarán más refinados y serán más eficientes.

Y a ti, ¿qué te parece el anuncio de SteamOS?

Leer más » 2 Comentarios

Juego – Adivina la cueva del dragón – Python

Como ya dije otras veces, Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es Adivina la cueva del dragón, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

import random import time def displayIntro(): print() print('Te encuentras en un lugar lleno de dragones. Delante') print('tuya ves dos cuevas. En una vive un dragon afable que ') print('tiene escondido un tesoro para ti. El otro dragon') print('es agresivo y no dudara en comerte.') print() def chooseCave(): cave = '' while cave != '1' and cave != '2': print('Elige una de las dos cuevas (1 o 2)') cave = input() return cave def checkCave(chosenCave): print('Te acercas a la cueva...') time.sleep(2) print('Esta oscura y silenciosa...') time.sleep(2) print('y de repente un dragon se abalanza hacia ti,') print('abre la boca y...') print() time.sleep(2) friendlyCave = random.randint(1, 2) if chosenCave == str(friendlyCave): print('Te da el tesoro!') else: print('Te come de un solo bocado!') playAgain = 'yes' while playAgain == 'yes' or playAgain == 'y': displayIntro() caveNumber = chooseCave() checkCave(caveNumber) print('Juegas de nuevo? (yes o no)') playAgain = input() read more

Leer más » 3 Comentarios

Juego – Adivina el número – Python

Como ya dije la semana pasada, Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es Adivina el número, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

# This is a guess the number game. import random guessesTaken = 0 print('Hello! What is your name?') myName = input() number = random.randint(1, 20) print('Well, ' + myName + ', I am thinking of a number between 1 and 20.') while guessesTaken < 6: print('Take a guess.') # There are four spaces in front of print. guess = input() guess = int(guess) guessesTaken = guessesTaken + 1 if guess < number: print('Your guess is too low.') # There are eight spaces in front of print. if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: guessesTaken = str(guessesTaken) print('Good, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') if guess != number: number = str(number) print('Nope. The number I was thinking of was ' + number) read more

Leer más » 1 Comentario

Entrada de datos en consola con Python

Si quieres un programa en Python 3 sin interfaz gráfica y que la entrada de datos la realice el usuario durante la ejecución del programa y en consola la función a usar es la de input.

Veamos un sencillo ejemplo:

print('Nombre: ')
nombre = input()
print('Es un placer conocerte, ' + nombre)
Leer más » 2 Comentarios

Tres en raya en Python

Invent Your Own Computer Games with Python es un libro gratuito y libre que te enseña a programar juegos de ordenador en Python. Cada ciertos capítulos te muestra el código completo de un nuevo juego y luego te explica los conceptos de programación de dicho código.

Uno de los juegos más sencillos y más interesantes para aprender es el Tres en Raya, aquí os paso el código completo para ejecutarlo en Python 3 en adelante.

# Tic Tac Toe import random def drawBoard(board): # This function prints out the board that it was passed. # "board" is a list of 10 strings representing the board (ignore index 0) print(' | |') print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9]) print(' | |') print('-----------') print(' | |') print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6]) print(' | |') print('-----------') print(' | |') print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3]) print(' | |') def inputPlayerLetter(): # Let's the player type which letter they want to be. # Returns a list with the player's letter as the first item, and the # computer's letter as the second. letter = '' while not (letter == 'X' or letter == 'O'): print('Do you want to be X or O?') letter = input().upper() # the first element in the tuple is the player's letter, the second is # the computer's letter. if letter == 'X': return ['X', 'O'] else: return ['O', 'X'] def whoGoesFirst(): # Randomly choose the player who goes first. if random.randint(0, 1) == 0: return 'computer' else: return 'player' def playAgain(): # This function returns True if the player wants to play again, otherwise # it returns False. print('Do you want to play again? (yes or no)') return input().lower().startswith('y') def makeMove(board, letter, move): board[move] = letter def isWinner(bo, le): # Given a board and a player's letter, this function returns True if that # player has won. We use bo instead of board and le instead of letter so # we don't have to type as much. return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal def getBoardCopy(board): # Make a duplicate of the board list and return it the duplicate. dupeBoard = [] for i in board: dupeBoard.append(i) return dupeBoard def isSpaceFree(board, move): # Return true if the passed move is free on the passed board. return board[move] == ' ' def getPlayerMove(board): # Let the player type in his move. move = ' ' while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)): print('What is your next move? (1-9)') move = input() return int(move) def chooseRandomMoveFromList(board, movesList): # Returns a valid move from the passed list on the passed board. # Returns None if there is no valid move. possibleMoves = [] for i in movesList: if isSpaceFree(board, i): possibleMoves.append(i) if len(possibleMoves) != 0: return random.choice(possibleMoves) else: return None def getComputerMove(board, computerLetter): # Given a board and the computer's letter, determine where to move and # return that move. if computerLetter == 'X': playerLetter = 'O' else: playerLetter = 'X' # Here is our algorithm for our Tic Tac Toe AI: # First, check if we can win in the next move for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, computerLetter, i) if isWinner(copy, computerLetter): return i # Check if the player could win on his next move, and block them. for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, playerLetter, i) if isWinner(copy, playerLetter): return i # Try to take one of the corners, if they are free. move = chooseRandomMoveFromList(board, [1, 3, 7, 9]) if move != None: return move # Try to take the center, if it is free. if isSpaceFree(board, 5): return 5 # Move on one of the sides. return chooseRandomMoveFromList(board, [2, 4, 6, 8]) def isBoardFull(board): # Return True if every space on the board has been taken. Otherwise # return False. for i in range(1, 10): if isSpaceFree(board, i): return False return True print('Welcome to Tic Tac Toe!') while True: # Reset the board theBoard = [' '] * 10 playerLetter, computerLetter = inputPlayerLetter() turn = whoGoesFirst() print('The ' + turn + ' will go first.') gameIsPlaying = True while gameIsPlaying: if turn == 'player': # Player's turn. drawBoard(theBoard) move = getPlayerMove(theBoard) makeMove(theBoard, playerLetter, move) if isWinner(theBoard, playerLetter): drawBoard(theBoard) print('Hooray! You have won the game!') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'computer' else: # Computer's turn. move = getComputerMove(theBoard, computerLetter) makeMove(theBoard, computerLetter, move) if isWinner(theBoard, computerLetter): drawBoard(theBoard) print('The computer has beaten you! You lose.') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'player' if not playAgain(): break read more

Leer más » 2 Comentarios

Ejemplo de interfaz gráfica sencilla en Python con Tkinter

Está claro que para interfaces de gran envergadura existen soluciones como PyGTK, wxPython o PyQT. Sin embargo, para aplicaciones sencillas puedes utilizar la interfaz Tkinter de la librería estándar de Python.

Aquí te muestro un ejemplo sencillo:

import Tkinter

if __name__ == '__main__':
    root = Tkinter.Tk()
    root.title('Button')
    Tkinter.Label(text='I am a button').pack(pady=15)
    Tkinter.Button( text='Button').pack(side=Tkinter.BOTTOM)
    root.mainloop()

Y éste es el resultado: read more

Leer más » 2 Comentarios

Fibonacci recursivo en Python

La recursividad es un concepto importante en programación y es fundamental conocerlo, un ejemplo que se usa mucho es con Fibonacci. Ésta es una implementación para calcular el orden de Fibonacci mediante recursividad en Python:

#!/usr/bin/env python

def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n-1) + fib(n-2)

if __name__ == '__main__':
    fibonacci = fib(10)
    print('Fibonacci de orden 10:')
    print(fibonacci)

Si tienes otra propuesta o alternativa será bien agradecida. ¡Participa y comenta! read more

Leer más » 5 Comentarios