Um ein Verzeichnis im Apache2 vor dem Zugriff von außerhalb eines bestimmten Netzwerkes zu schützen können Sie folgende Option nutzen: Allow from 192.168.0.100/16 Im Beispiel in der httpd.conf (oder jeder anderen Konfigurationsdatei) sieht das so aus: <VirtualHost *:80> DocumentRoot /var/www/test <Directory /var/www/test> Options Indexes Includes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from 192.168.0.100/16 </Directory> </VirtualHost>
MehrMonat: August 2009
Ruby on Rails: Datum aus Kalenderwoche, Jahreszahl und Wochentag berechnen
Zunächst wird ein Datumsobjekt erstellt, dass auf den 1. Januar des Jahres zeigt. date = Date.parse(„01-01-„+year) Dann wird an Hand der Tageszahl (Montag == 1) der Offset berechnet. if date.cwday <= 4 # Donnerstag oder kleiner: Zurueck rechnen auf Montag x = -8 + (date.cwday+1); else # Offset auf Folge-Woche x = 8 – date.cwday end Mit einer kleinen Hilfsfunktion wird der Offset bezüglich des gewünschten Wochentages angepasst. x += day_number(day_string) – 1 Zu guter letzt wird das Datum berechnet. date + x + ( 7*(week-1) ) Hier der komplette Code: # Berechnet das Datum zu einem Wochentag in einer Kalenderwoche in einem Jahr def week_to_date(week, year, day_string) # Datums Objekt des ersten Jahrestages date = Date.parse("01-01-"+year) # Pruefen des nummerischen Wertes des Wochentages # 4: Donnerstag – 1. KW ist die Woche mit dem ersten Donnerstag im Jahr if date.cwday <= 4 # Donnerstag oder kleiner: Zurueck rechnen auf Montag x = -8 + (date.cwday+1); else # Offset auf Folge-Woche x = 8 – date.cwday end # Offset an Wochentag anpassen x += day_number(day_string) – 1 # Datum berechnen aus 1.1. des Jahres + Offset + Anzahl der Wochen date + x + ( 7*(week-1) ) end def day_number(day_string) days = { ‚Mo‘ => 1, ‚Di‘ => 2, ‚Mi‘ => 3, ‚Do‘ => 4, ‚Fr‘ => 5, ‚Sa‘ => 6, ‚So‘ => 7 } days[day_string] end
MehrReconnect Script für das Alice Modem WLAN 1121
Um bei einigen Programmen einen automatischen Reconnect des Modems / Routers auslösen lassen zu können, benötigen Sie das folgende Script. Es ist nur für das Alice Moden (Router) WLAN 1121 getestet. [[[HSRC]]] [[[STEP]]] [[[REQUEST]]] POST /alicelogin HTTP/1.1 Host: %%%routerip%%% loginUserName=%%%user%%%&loginPassword=%%%pass%%% [[[/REQUEST]]] [[[/STEP]]] [[[STEP]]] [[[REQUEST]]] GET /pppctrl.cmd?action=infodisconn&conId=1&vpi=1&vci=32&portId = 0 HTTP/1.1 Host: %%%routerip%%% [[[/REQUEST]]] [[[/STEP]]] [[[STEP]]] [[[REQUEST]]] GET /pppctrl.cmd?action=infoconnect&conId=1&vpi=1&vci=32&portId = 0&connectNow=1 HTTP/1.1 Host: %%%routerip%%% [[[/REQUEST]]] [[[/STEP]]] [[[/HSRC]]]
MehrLinux: Jobs pausieren & fortsetzen (Beispiel: vi)
Wenn SIe unter Linux einen Job (Prozess) pausieren möchten und später wieder fortsetzen wollen, dann hilft Ihnen dieser Tipp weiter. Am Beispiel des VI Editors möchte ich die Funktionsweise erklären: Sie arbeiten im VI an einer Datei Drücken Sie nun Strg+Z (auch Ctrl+Z genannt) Der Editor wird beendet und Sie finden sich auf der Oberfläche/Kommandozeile wieder Der aktuelle Stand Ihrer Datei ist nur zwischengespeichert Um eine aktuelle Übersicht über „geparkte“ Prozesse (Jobs) zu bekommen, nutzen Sie den Befehl #> jobs Um den zuletzt geparkten Job wieder zu reaktivieren und fortzusetzen, geben Sie folgenden Befehl ein: #> fg
MehrcakePHP: Wie überliste ich Cake / Sortierung ohne Paginierung
Sie wollen ihre Daten, geholt über eine eigene Query anstatt über die Cake Paginierung, über die Sortierfunktionalität von Cake in der View sortierbar machen. Hierzu haben Sie bereits das entsprechende Element in der Kopfzeile der Tabelle integriert. <th><?php echo $paginator->sort(‚Author‘, ‚Author.name‘); ?></th> Da keine Paginierungsmethode im Controller genutzt wurde muss die Session für den PaginatorHelper entsprechend per Hand erstellt werden: $options = array( ‚order‘ => array( $this->params[‚pass‘][’sort‘] => $this->params[‚pass‘][‚direction‘] ) ); $this->params[‚paging‘][‚ModelName‘][‚options‘] = $options; $this->params[‚paging‘][‚ModelName‘][‚defaults‘] = $options;
MehrZwei DIV Bereiche gleichzeitig (synchron) scrollen
Um zwei Bereiche (hier: DIV Elemente) gleichzeitig mit nur einem Scrollbalken zu verschieben, nutzen Sie folgenden Code: <script type=“text/javascript“> var Marker = [0,0]; function CS(div1, div2) { if (!div1 || !div2) return; var control = null; if (div1.scrollTop != Marker[0]) control = div1; else if (div2.scrollTop != Marker[1]) control = div2; if (control == null) return; else div1.scrollTop = div2.scrollTop = control.scrollTop; Marker[0] = div1.scrollTop; Marker[1] = div2.scrollTop; } window.setInterval(„CS(document.getElementById(‚ta1‘), document.getElementById(‚ta2‘))“, 100); </script> <table> <tr><td><div style=“height: 70px; width: 100px; overflow: auto“ id=“ta1″> Testzeile 1<br>Testzeile 2<br> Testzeile 3<br>Testzeile 4<br> Testzeile 5<br>Testzeile 6<br> Testzeile 7<br>Testzeile 8<br></div></td> <td><div id=“ta2″ style=“height: 70px; width: 200px; overflow: auto“> Testzeile Rechts 1<br>Testzeile Rechts 2<br> Testzeile Rechts 3<br>Testzeile Rechts 4<br> Testzeile Rechts 5<br>Testzeile Rechts 6<br> Testzeile Rechts 7<br>Testzeile Rechts 8<br></div></td> </tr> </table> Folgendes Beispiel zeigt die Funktionsweise. Innerhalb des angezeigten (leeren) Bereiches ist das o.a. JavaScript für das Beispiel definiert: Testzeile 1Testzeile 2 Testzeile 3Testzeile 4 Testzeile 5Testzeile 6 Testzeile 7Testzeile 8 Testzeile 1Testzeile 2 Testzeile 3Testzeile 4 Testzeile 5Testzeile 6 Testzeile 7Testzeile 8
MehrRuby on Rails: Datums Formatierung
Viele „Gerüchte“ kursieren im Netz umher, wie man ein Datum aus der Datenbank am besten in der View formatiert. Der einfachste Weg ist aber wohl folgender… Wir haben unser News ausgelesen und in der Variablen @news in unsere View. Das Datum liegt im Feld created_at. Dann können wir über die Funktion strftime(format) das Datum formatieren. <% @news.each do |news| %> <div class=“news_date“> <%=h news.created_at.strftime(‚%d.%m.%y – %H:%M‘)+“h“ %> </div> <% end %> Die Ausgabe wäre etwas wie => 31.01.2009 – 16:45 h Zum weiterlesen: Formatierungsoptionen: Date Format Options Ruby Class: Date Class
MehrPure-FTP: 421 Too many connections (3) from this IP
Wenn Sie als Pure-FTP als FTP Server betreiben und an Ihrem FTP Client folgende Fehlermeldung erhalten: 421 Too many connections (3) from this IP … dann ist wahrscheinlich der Passive-Mode nicht richtig eingerichtet. Natürlich können Sie aber auch von einer IP aus (z.Bsp. durch einen Proxy) die Anzahl der eingestellten, maximalen Anmeldungen erreicht haben. Um kurzfristig Abhilfe zu schaffen, können Sie einen FTP Benutzer (verbundenen Client) trennen. Die Kurzanleitung finden Sie in unserem Artikel „Pure-FTP: FTP Client trennen (disconnecten)“. Probieren Sie folgende Schritte (als Beispiel), um den passiven Modus zu erlauben: Öffnen Sie die Pure-FTP Konfiguration: server:/etc/pure-ftpd # vi pure-ftpd.conf Tragen Sie dort (meist am Ende) die Ports für die passive Übertragung ein: PassivePortRange 30000:30100 Speichern und Schließen Sie die Datei wieder Fügen Sie diesen Port-Bereich in Ihrer Linux-Firewall hinzu: Öffnen Sie yast yast2 Unter „Security and Users“ > „Firewall“ gehen Sie auf „Allowed Services“ Dort wählen Sie „Advanced …“ aus Fügen Sie in das Feld „TCP Ports“ den o.a. Bereich hinzu: 30000:30100 Speichern Sie die Daten und die Firewall Falls Sie über einen Router mit dem Internet/Netzwerk verbunden sind, lassen Sie dort die Ports ebenfalls an den Server weiterleiten.
MehrPure-FTP: FTP Client trennen (disconnecten)
Um einen FTP Client sofort von Ihrem Pure-FTP Server zu trennen, nutzen Sie folgende Befehle: 1. Finden Sie die aktuelle PID des Benutzers (FTP Clients) heraus Die PID ist die Linux-Prozess-ID und verweist direkt auf den laufenden Prozess Ihres Systems, der mit diesen FTP Client kommuniziert. pure-ftpwho Ihnen wird die aktuelle Liste der FTP Clients angezeigt: +——+———+——-+——+——————————————-+ | PID | Login |For/Spd| What | File/IP | +——+———+——-+——+——————————————-+ | 6206 | malte | 00:05 | IDLE | | | “ | “ | “ | “ | -> 22.222.22.22 | +——+———+——-+——+——————————————-+ | 6168 | peter | 00:10 | IDLE | | | “ | “ | “ | “ | -> 22.222.22.22 | +——+———+——-+——+——————————————-+ | 6169 | karen | 00:09 | IDLE | | | “ | “ | “ | “ | -> 22.222.22.22 | +——+———+——-+——+——————————————-+ Wenn Sie nun den Benutzer „peter“ zwangsweise trennen möchten, dann nutzen Sie einfach folgenden Befehl: kill 6168 Dadurch wird der entsprechende Prozess sofort beendet. Syntax: kill [PID]
MehrProblem: "Eine ältere Speedmanager plus/Byte Mobile Client Installation wurde gefunden ..."
Bei der Installation der T-Mobile Software „web’n’walk“ kommt teilweise die folgende (teils nur ähnliche) Fehlermeldung: Eine ältere Speedmanager plus/Byte Mobile Client Installation (SDK) wurde gefunden. Die Software muß deinstalliert und der Rechner neu gestartet werden. oder Eine ältere Speedmanager plus/Byte Mobile Client Installation wurde gefunden. Die Software muß deinstalliert und der Rechner neu gestartet werden. Nicht immer findet sich das gesuchte Programm in der Softwareverwaltung. Hier hilft nur die Löschung direkt aus der Registry: Starten / öffnen Sie die RegistryWindowstaste + RGeben Sie ein: regeditKlicken Sie auf „OK“ Drücken Sie „F3“ und suchen Sie nach „ByteMobile“ Jeden Treffer löschen Sie, indem Sie ihn anklicken und auf die „Entf“ Taste drücken.Die Warnmeldung müssen Sie jeweils bestätigen. Schließen Sie die Registry einfach durch „Alt + F4“ Nun starten Sie nochmals das Setup für Ihre T-Mobile Software.
MehrmySQL: Zeilen aus verbundenen Tabellen löschen
Um Daten (Zeilen) aus Tabellen effektiv zu löschen, dürfen Sie die 1 MB Grenze (Standardwert der Systemvariablen max_allowed_packet) nicht überschreiten. Bei komplexen DELETE Anweisungen ist das aber schnell der Fall. Die Lösung ist dann nur die Zerlegeung der DELETE Statements in kleinere Protionen (notfalls Einzelanweidungen). Am schnellsten läuft ein DELETE Befehl, wenn nur 100 bis 1000 related_column-Werte pro (indizierter) Anweisung anstehen. Hat die „related_column“ (Feld für die Verbindung der Tabellen) keinen Index, ist die Geschwindigkeit von der Anzahl der Argumente der IN-Klausel unabhängig.
MehrcakePHP: Kompletten Filter in der Session speichern (Source)
Um in cakePHP den aktuellen Filter von Formularen zu speichern, kann man jedes Feld einzelnd verarbeiten oder (viel einfacher) den kompletten Filter im Einzeiler speichern: $_SESSION[„NAME_IN_DER_SESSION“] = $this->data[„Filter“]; Wenn der Filter automatisch geladen oder gespeichert werden soll, nutzen Sie folgenden Code: // Filter in Session speichern oder aus Session laden if (!empty($this->data[„Filter“])) $_SESSION[„NAME_IN_DER_SESSION“] = $this->data[„Filter“]; elseif (!empty($_SESSION[„NAME_IN_DER_SESSION“])) $this->data[„Filter“] = $_SESSION[„NAME_IN_DER_SESSION“]; In diesem Beispiel prüft cakePHP, ob ein Filter übergeben wird. Wenn ja, wird dieser in der Session abgelegt. Wird kein Filter übergeben und ist ein Filter gespeichert, wird dieser Filter aus der Session eingelesen.
MehrOracle: Datenbank interne Views (Details zur Datenbank)
Eine gute Übersicht über Tabellen und Views zur Struktur (Tabellen, Felder, Indizies, Primary keys, Foreign keys, Read only, etc.) finden Sie unter: http://download.oracle.com/docs/cd/B14117_01/server.101/b10755/toc.htm Der Aufbau der Views ist kurz und klar dokumentiert. Ideal als Nachschlagewerk für tiefere Datenabfragen.
MehrOracle: Text, Befehl (string) in Stored Procedures suchen
Um in Oracle Datenbanken die Stored Procedures (gespeicherten Prozeduren) nach Schlüsselworten, Befehlen oder allg. Text zu durchsuchen, nutzen Sie folgenden SQL Befehl: select * from USER_SOURCE where lower(text) like ‚%suchtext%‘ Wichtig ist, dass Sie den Suchtext in Kleinschreibweise eingeben. Das Textfeld wird bei der Suche in Kleinschreibung umgewandelt. Auf diese Weise finden Sie durch den o.a. Befehl auch folgende Daten: select * from USER_SOURCE where lower(text) like ‚%drop table%‘ DROP TABLE Drop Table drop table dROp TAbLe
MehrispCP: Fehler "Module [Crypt::PasswdMD5] was not found" beim Setup
Wenn Sie nach dem Start des WebHosting Panels Setups von „ispCP Omega“ folgende Fehlermeldung erhalten … > perl ispcp-setup CRITICAL ERROR: Module [Crypt::PasswdMD5] WAS NOT FOUND ! Modules [Crypt::PasswdMD5] WAS NOT FOUND in your system… … fehlt Ihnen das Verschlüsselungsmodul für MD5 von Perl. Teilweise wird unter YAST aber angezeigt, dass dieses Module installiert ist. Mit den folgenden Befehl erhalten Sie sämtliche (wirklich) installierten Perl-Module: rpm -qa | grep -r perl Folgende Schritte lösen das Problem: perl -MCPAN -e shell [Enter] install Crypt::PasswdMD5 [Enter] exit [Enter] Das Modul wurde jetzt nachinstalliert und durch „perl ispcp-setup“ können Sie das ICP Setup nun nochmal starten.
Mehr