Delete all tweets – with python
Veröffentlicht von markus
This post is in english because i think that many people will find this very useful.
The Problem: Over 9000 “Delete Tweets”-Pages in the world wide web. twitwipe, tweeteraser, tweetdelete etc. None of them working. There are also some scripts out there, that will do that job, but they mainly want you to install libarys, compile it yourself, or just work under linux. Some of them require you to “create your own twitter app”. All of this is quite anoying.
The Solution: First solution was to record an iMacro, it somehow didn’t work as well as i thought with the normal twitter page. So i chose m.twitter.com because mobile sites are less complex and don’t contain javascript that messes up imacro. But this method took quite long and used up my firefox, so i couldn’t surf any more (or just in another instance)
Source of the recorded iMacro (play in a loop to delete multible) – you obv. have to login first
SET !TIMEOUT_STEP 0 SET !ERRORIGNORE YES URL GOTO=https://mobile.twitter.com/ivogl TAG POS=1 TYPE=IMG ATTR=SRC:https://si0.twimg.com/twitter-mobile/0d70e1de0c3e78cea79a8f953985e5daeee29d67/images/sprites/ic_delete.gif TAG POS=1 TYPE=BUTTON ATTR=TXT:Ja
The real solution: Writing a python script – because handling cookies/sessions by myself i used mechanize, what is an dependency that is probably not easy to install for all the users so i will provide a .pyc (compiled python, included all files) file and also the source in here, if you don’t trust me and want to compile it by yourself.
deleteTwitter.py:
#config block
timeoutinsconds = 60*5 #5 minutes between "refreshing"
timeoutinscondsOn403 = 60*30 #1 hour 150 requests maximum
#import block
import mechanize
import re
import time
from array import *
import sys
u=sys.argv[1]
p=sys.argv[2]
while True:
try:
#code block
mech = mechanize.Browser()
mech.set_handle_robots(False)
mech.open("https://mobile.twitter.com/session/new")
mech.select_form(nr=0)
mech["username"] = u
mech["password"] = p
mech.submit()
while True: # atm no stop condition
mech.open("https://mobile.twitter.com/"+u)
l=mech.links(url_regex=re.compile(r"delete"))
a=[]
for i in l:
a.append(i.url)
for i in a:
mech.open(i)
print "Deleting "+str(mech.geturl())
mech.select_form(nr=1)
mech.submit()
print "Sleeping for "+str(timeoutinsconds)+" seconds to not overflow the api"
time.sleep(timeoutinsconds)
except: #403 exception will be thrown after a number of exceptions
print "Sleeping because 403 Error "+str(timeoutinscondsOn403)+" seconds to not overflow the api"
time.sleep(timeoutinscondsOn403)
continue
break
#end of while
And the .pyc file you just have to run with the parameters username password.
How to run a pyc: For beginners, download, copy to Desktop or somewhere else
Method 1: press windows-key and enter cmd, press enter, drag and drop the pcy file into your console and something like “C:\Users\Markus>C:\Users\Markus\Desktop\deleteTwitter.pyc” will stand there. Now you have to enter username password so it looks like “C:\Users\Markus>C:\Users\Markus\Desktop\deleteTwitter.pyc mytwitteraccountname mytwitteraccountpassword” and press enter.
Method 2: create a new text file (.txt not .doc/odt) at the same place, write “deleteTwitter.py user password” into it, and rename the file to delete.bat and double-click it.
Probably one day i’ll make a fancy user interface and pack it into an exe so it will be even easier to use, but that would be quite much work.
Realtek-Treiber-Reghack – Niemehr Audiogeräte umstecken
Veröffentlicht von markus
Das Problem:
Wer kennt das nicht… man hat ein normales Headset, Boxen und eventuell noch einen Fernseher am PC hängen. Und wenn man sich einen Film anschauen will oder Musik hören will, muss man extra umstecken, obwohl selbst das billigste 40€-Mainboard schon 6 Audio-Ports hat, bzw. 7.1. (Mein billiges 40€ Mainboard zumindest).
Offensichtliche Nicht-Lösungen:
Wie wäre jetzt die Problemlösung: man steckt man doch einfach an 3 Audio-Ports für Sorround 3 Geräte (Boxen, Headset, Fernseher) an, und erhofft sich, dass jedes “linke” Musiksignal Vorne-Links, Mitte-Links und Hinten-Links ausgegeben wird. (und gleiches für rechts.) Da das auf einem echten 7.1 System aber blöd klingen würde (Interferenzen usw.) geht das nicht. Akzeptiere ich. Mein Soundtreiber auch ein Feature, dass meinen Wunsch erfüllt “Raumauffüllung” – geht aber nicht.
Miese Halb-Lösung:
Ziemlich toll: Eigentlich sollte man auch im Treiber einstellen können, dass alle Buchsen normale “Mitte”-Boxen sind. Geht aber auch nicht, es erscheint einfach garnichts bei “Audiogeräteinstellungen”. Jetzt gibt es den tollen Umweg bei Soundeffekten eine Umgebung einzustellen, damit es “nach vorne und hinten hallt”. Die Qualität ist aber einfach nur lachhaft. Ich will mir meine Filme nicht mit Echo anhören. Wer braucht eine Funktion, dass es klingt wie in einem Badezimmer/Flur etc.?
Noch besser: Mein Soundtreiber hat die invertierung meines Features: DTS Sorround Sensation System – Emulierter 3D-Sorround-Klang auf 2D-Ausgabegeräten. Klingt für mich nur wie wenn man im Equalizer die Höhen beschnitten hat, es ist zwar ein Unterschied zwischen Film und Musik-Modus zu hören, aber beides klingt bei (meiner) Musik erheblich schlechter als ohne dieses Feature.
Die Lösung:
Ich bin weit nicht der erste der das Problem hatte, ich hab nur die ganze Zeit falsch gegooglet. Nach einigen Versuchen meine Frage für Google passend zu formulieren fand ich das:
http://www.reaper-x.com/2012/02/13/how-to-remap-retasking-realtek-onboard-jacks-ports/
Kurzfassung: Welcher Analoge Port zu welchem Software-Gerät gehört steht in der Registry in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\Settings\DrvXXXX_DevType_XXXX_SSXXXXXXXX (sucht einfach DevType_ im regedit) – Die gewünschten Analogen Ports sind mit PinXY bezeichnet und der Wert in diesen Variablen gibt an, welchen Software-Port diese einnehmen. Für uns Relevant sind die Werte (hex) 04 00 00 00 (Normaler Lautsprecher) und 02 00 00 00 (Mikrofon) bzw. ev. 01 00 00 00 (Line In). Alle Werte die nicht 01/02 00 00 00 sind können ohne Bedenken auf 04 umgeändert werden, damit diese Pins (bis zu 4) jetzt als normaler Ausgang funktionieren. Jetzt noch im Geräte-Manager das Gerät de+re-aktivieren oder alternativ neu starten – und Problem gelöst. Wenn ihr wissen wollt was ihr genau gemacht habt schaut auf den oben genannten Quell-Link.
Mal schaun ob Realtek das mal fixen will, damit wenigstens eine der 3 Treiber-Möglichkeiten funktioniert. Ein “Mirror”-Raum der 1:1 auf jedem Device widergibt, ohne Echo wär auch schon Recht.
Python Replace-Snipplet
Veröffentlicht von markus
Da ich Pseudocode schreiben muss, wo ich Unicode-Pfeile brauche und diese nicht auf meiner Tastatur zu finden sind habe ich mir ein kleines Replace-Skript geschrieben, dass ich dann einbinde.
File: “C:\Python27\Tools\replacer.py”:
#!/usr/bin/env python
# coding: utf-8
import os, sys
if len(sys.argv) > 1:
input = open(sys.argv[1])
txt=""
for s in input.xreadlines():
s=s.replace("UPDOWN", "↕")
s=s.replace("UP", "↑")
s=s.replace("DOWN", "↓")
s=s.replace("LEFT", "←")
s=s.replace("RIGHT", "→")
txt+=s
input.close()
output = open(sys.argv[1], 'w')
output.write(txt)
Um das jetzt in Notepad++ einzubinden klickt man in der Toolbar “Ausführen/Ausführen..” und gibt als Pfad C:\Python27\Tools\replacer.py “$(FULL_CURRENT_PATH)” ein. (Wichtig: Anführungszeichen für Pfade mit Leerzeichen). Zum speichern den danach benannten Button.
Test mit den Textzeilen aus “Anyone Else but You” (Juno Soundtrack)
UP UP DOWN DOWN LEFT RIGHT LEFT RIGHT B A start
Just because we use cheats doesn’t mean we’re not smart
eingeben, speichern, ausführen, neu laden.
↑ ↑ ↓ ↓ ← → ← → B A start
Just because we use cheats doesn’t mean we’re not smart
Schwächen: Zurück-Button funktioniert nicht, weil “neue Datei”, und Performanz durch 5-faches String-such-replacen und concartion. Python benötigt.
Windows 8 Customer Preview / Server Beta
Veröffentlicht von markus
Ich habe mir in den letzten Tagen zuerst Windows 8 und dann die Server Beta native installiert.
Größtes Manko zuerst, da es eig. alles nachfolgende “übertrumpft”: Das “gute alte startmenü” ist nicht aktivierbar (siehe Registry-”hack”/löschen der dll @ Developer preview), weder in der customer noch in der server version. Ihr habt richtig gehört – Metro Oberfläche auf dem Server. Eine Tablet-Oberfläche auf dem Server. Welcher Server hat denn bitte eine Touch-Oberfläche? Man wird gezwungen die schreckliche Metro-Oberfläche für Tablets und Smartphones zu testen. Das fühlt sich ca. so an wie den Android-Emulator mit Maus und Tastatur zu verwenden, das Start-Menü ist angeblich quasi ganz entfernt worden, soll aber in der final wieder kommen….
Was ich an Metro hasse? Nur diese unübersichtliche “Große Icons Touch Ansicht”
Weitere Mankos – Windows Server: Es wurden weder WLAN-Treiber noch die richtige Auflösung vom Bildschirm erkannt… Windows 8 kann das – WTF?
Gut: Das Design als ganzes, die durchgängige Ribbon-Oberfläche, Farbschema, der neue Taskmanager, allgemeine Arbeitsgeschwindigkeit, die Boot-Geschwindigkeit…
PyGradeGetter
Veröffentlicht von markus
Das ist jetzt die endgültige “todo-freie” final, mit der ich voll und ganz zufrieden bin (bis auf testing, dass ich aber erst betreiben kann wenns gehostet wird/andere leute es auch verwenden). Letzte fixes:
- “Richtige Encryption”
- ab jetzt wird nur noch ein hash vom am Server gespeichert, statt “encrypted password”
- host-config nichtmehr nötig
- logging in ein logfile
Windows 8
Veröffentlicht von xandroid
Seit heute bietet Microsoft den Download der “Custumer Preview” Version von Windows 8 an.
Die .ISO Datei für X64 und X84 steht in den Sprachen Deutsch, Englisch, Französisch, Japanisch und Chinesisch zur Verfügung.
Auf der Download-Seite sind außerdem die Systemanforderungen angeführt.
Die Version kann ohne Registrierung direkt gespeichert werden.
Lock-Script
Veröffentlicht von markus
Mit folgedem einfachem skript (über import(“login.php”) schütze ich momentan mein wordpress, ich stell es mal online, für den fall dass jemand eine lücke findet, bitte melden….
<?
//case insensetive answer required as get-param or cookie
<?
$question = "Do you like cake?";
$answer = "yessir!";
//incude this in wp-config.php
//php-function to detect browser
function ae_detect_ie() {
return (isset($_SERVER['HTTP_USER_AGENT']) &&
(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false));
}
//get values if set
$c=isset($_COOKIE["pw"])?$_COOKIE["pw"]:"";
$p=isset($_GET["pw"])?$_GET["pw"]:""; //for rss feed and cookieless stuff
//if pw (to lowercase) is set
if(! ((strtolower($c) == $answer) || (strtolower($p) == $answer)) ) {
//if internet explorer
if (ae_detect_ie ()) {
?>
<script type="text/javascript">
function Test() {
check=document.getElementById("pw").value;
var a = new Date();
a = new Date(a.getTime() +1000*60*60*24*365);
document.cookie =
"pw="+check+"; expires="+ a.toGMTString()+";";
if((check!="")&&(check!=null))
window.location.reload();
}
</script>
<?php echo $question ?>:
<input id="pw" type="text" name="password" />
<input type="button" name="Einloggen" value="Einloggen" onclick="Test()">
<?php
}
//if real browser
else {
?>
<html>
<head><title>Login</title>
<script type="text/javascript">
check=prompt("<?php echo $question ?>","");
var a = new Date();
a = new Date(a.getTime() +1000*60*60*24*365);
document.cookie =
"pw="+check+"; expires="+ a.toGMTString()+";";
//alert(check);
if((check!="")&&(check!=null))
window.location.reload();
</script>
</head>
<body>
</body>
</html>
<?php
//die because of wrong password
}
die("");
}
?>
HeidiSQL
Veröffentlicht von xandroid
Seit längerem versuche ich ein gutes Tool zu finden, um meine SQL Datenbanken lokal zu bearbeiten.
Alle Datenbanken sind am Voidman-Server gespeichert, aber nur lokal erreichbar, das bedeutet, wenn ich nicht am Voidman-Server arbeite, habe ich keinen Zugriff auf die Daten!
Für mein Vorhaben müsste also ein SSH-Tunnel aufgebaut werden, der mir den Zugriff ermöglicht.
Nach einigen Suchanfragen konnte ich ein Tool finden, das sehr vielversprechend wirkt – HeidiSQL.
Neben diversen Verbingunseinstellungen ist auch die Administration der Datenbanken und Tabellen sehr benutzerfreundlich und einfach.
Nach dem Programmstart wird der “Session manager” gestartet, in dem die Verbindungen konfiguriert werden können.
Als “Network type” kann z.B. “MySQL (SSH tunnel)” ausgewählt werden. Die weiteren “Settings” wie z.B. der “User” und das “Password” sind für die Authentifizieren am SQL-Server nötig.
Um einen SSH-Tunnel aufbauen zu können, muss der Tab “SSH Tunnel” dementsprechend eingerichtet werden.
Wichtig hierbei ist, dass “plink” am System gespeichert ist. Dieses SSH-Tool ist ähnlich PuTTY und baut über die Kommandozeile eine Verbindung zu einem Server auf. Die Zugangsdaten für SSH können hier eingegeben werden. Nebst der Basis-Authentifizierung mit Benutzernamen und Passwort, können auch “Private Keys” verwendet werden.
Sobald alle verbindungsrelevanten Informationen angegeben wurden, kann die Verbindung mit “Open” geöffnet werden.

An der linken Seite sind alle Datenbanken aufgelistet, die am Server gefunden wurden.
Auch die Bedienung des Tools ist denkbar einfach. Datenbanken können selektiert werden, danach werden die Tabellen geöffnet und können natürlich bearbeitet werden. Außerdem ist es möglich, “Queries” über das Tool abzusenden.
Alles in allem ein sehr gelungenes Tool, um das Administrieren zu erleichtern!
Update: PyGradeGetter 1.1 – Final
Veröffentlicht von markus
Changelog:
- pyc – files inkuldiert, damit das ganze auch ohne mechanize funktioniert (hoff ich)
- config im oberen teil der haupt-datei (webserver.py)
- exception handling, error anzeige beim login für den user
- nur bestimmten usern den login erlauben
- gecachte feeds sind jetzt nur mehr für user mit dem richtigen PW zu lesen
- mehr kommentare, mehr code
Die jetzige Version sehe ich als eine wirklich einsetzbare, einigermaßen sichere und stabile, die hoffentlich auch bald so gehostet wird.
Info: Zum starten die webserver.py ausführen.
PyGradeGetter
Veröffentlicht von markus
Weiterentwicklung vom letzten Post, jetzt alles in Python.
Zeilenanzahl: ~120 Zeilen, 10 davon Leer+Kommentar only. 3 Files.
Ist noch im beta-stadium, sollte aber mit einer access-controll schon einsetzbar sein.

