Ein Blocker Blocker Blocker. Hübsch. Bin gespannt, wann der erste Blocker Blocker Blocker Blocker und dann der erste Blocker Blocker Blocker Blocker Blocker rauskommt. Oh, meine Rechtschreibprüfung meint, dass die Blocker-Folgen Schwachsinn wären. Ist das jetzt eine Form von echter künstlicher Intelligenz?

Man kann auch einfach Javascript abschalten. Das braucht man nur einmalig. Blocking unmöglich. Und ein user-defined-CSS, welches die albernen Sichtblocker entfernt. Ebenfalls unblockbar.

Andererseits: Mit den Exponential-Blockern geht eine ganze Industrie einher, die man mit solch profaner Herangehensweise lahm legen würde. Deshalb ist das Festhalten am exponentiellen Blocker-Blocken wohl als patriotisch-heldenhaft einzustufen.

OK: Das ist jetzt keine geradlinig-unmittelbare Antwort auf die Frage, aber immerhin ein Tipp, dass und wie man aus der Endlosschleife rausspringen könnte. Falls einem der Wirtschafts-Patriotismus irgendwann zum Halse raushängen sollte.

...zur Antwort

Noch eine Ergänzung: Die Behauptung, die Machbarkeit oder Nichtmachbarkeit von Mehrfachvererbung oder auch nur Vererbung hätte irgendwas mit dem Überschreiben von Pointern zu tun, ist Nonsense. Es ist zwar nicht zufällig, dass in C++ die Vererbung von Funktionen mittels Pointern implementiert ist, weil das auf Maschinenebene das effektivste Verfahren dafür ist, aber das bedeutet mitnichten, dass dies die einzig mögliche Form der Implementierung wäre, noch, dass dies hinderlich oder förderlich bezüglich Mehrfachvererbung wäre.

Java wurde bei seiner Erfindung explizit als Derivat von C++ mit dem Ziel erfunden, viele Konzepte von C++, die aufgrund mangelnder Intelligenz von Anwendungsprogrammierern massenhaft missbraucht und/oder fehlerhaft genutzt wurden, schlicht und ergreifend rauszuschmeißen. Mit dem Ziel, die im Alltag durchschnittlich zu erwartende Fehlerrate zu senken.

Tatsächlich hatte ich in den letzten zwanzig Jahren nicht den Eindruck gewinnen können, dass sich die Fehlerrate von Java-Programmierern signifikant von der von C++-Programmierern unterscheidet. Korrekt ist aber, dass es in Java mitunter sehr viel aufwendiger ist, bestimmte Operationen umzusetzen - sowohl aus Sicht des Programmierers bzw. dessen Gehalts als auch aus Sicht des Prozessors, der den Mist zur Laufzeit des Programms verarbeiten muss.

Hinten heraus kommt, dass man immer mit allen Programmiersprachen (sofern sie nur gewisse Anforderungen an Universalität erfüllen) alles programmieren kann. Einschließlich aller Konzepte. Einschließlich Mehrfachvererbung. Unterschiedlich ist nur, wie weit man dabei NATIV von der Programmiersprache unterstützt wird. Aber sobald man sich eine Bibliothek für irgendein Problem geschrieben hat, relativiert sich das sowieso wieder. Immer.

...zur Antwort

Ich würde das wesentlich lockerer sehen: Ideen bleiben langfristig, wenn sie gut sind, sowieso nie auf einzelne Hersteller oder gar Anwender beschränkt. Es gibt eine Menge Ideen, die auf Einzelpersonen beschränkt blieben (und bleiben), die aber eben Flops waren (und bleiben). Ein prominentes Beispiel dafür ist die kalte Kernfusion. Genau zwei Firmen behaupten (seit wieviel Jahrzehnten? Zwei?), Reaktoren herstellen zu können. Und beide erzielen nicht die geringste Marktakzeptanz. Daher ist diese Idee mit nicht mehr nachweisbarem Rest von 100% entfernt ein Flop.

Ich würde den Kommentar von Minihawk erweitern um: Eine Idee ist nicht nur ohne Umsetzung Nonsense. Die Umsetzung ist nur der zwingend notwendige erste Schritt. Danach aber muss das fertige Produkt auch noch - zufriedene - Anwender finden. Gehe davon aus, dass ein einzelner Programmierer auf dieser Schiene in der Regel keine relevante Machtposition einnimmt.

Und jetzt noch meine Empfehlung für Euer Entwicklungs-Paar: Lasse dem Programmierer weitgehend freie Hand mit seinen Umsetzungsideen! Ein Programmierer ist umso besser, je mehr Spaß ihm die Arbeit macht. Und nimm Gift drauf, dass dieser Spaß mit sinnlosem Einmischen, vor allem bremsendem Einmischen, vor die Hunde geht! Wenn der mit seinem Produkt der Fertigstellung näher rückt (fertig wird sowas meistens sowieso nie - das ist wie mit Modelleisenbahn zu spielen), DANN mische Dich wieder ein und kümmere Dich mit ihm gemeinsam um das Bekanntmachen Eures Produkts. Das wird eventuell schwieriger als Du denkst.

...zur Antwort

Na ja: Grundsätzlich verstößt so ein Bot - natürlich, gelle?! - gegen die Interessen des Werbetreibenden. Egal, wie die übliche Rechtsprechung in solchen Fällen sein mag, musst Du damit rechnen, dass die Werbetreibenden sich Maßnahmen gegen solche Bots und deren Erfinder ausdenken bzw. die verfügbaren Gesetze zur Durchsetzung ihrer Interessen nutzen. Der Sinn solcher Bots ist ja - im Gegensatz zu Adblock/Noscript und ähnlichem -, dass einer Person auf Kosten des Werbetreibenden eine Bereicherung ermöglicht werden soll, und zwar gegen den erklärten Willen des "Geschäftspartners". Sowas ist selbstredend und selbstverständlich strafbar (dazu braucht man kein Rechtsanwalt sein).

Andererseits ist die Werbeindustrie ihrerseits auch nie bereit, auf den erklärten Willen ihrer "Geschäftspartner" einzugehen und nutzt die Geduld beim Hinnehmen von unerwünschter Werbung letzterer schamlos aus. Insofern kann ich da auch kein Mitleid mit der Werbeindustrie entwickeln bzw. kann die Intention des Fragestellers, den Typen mit gleicher Münze heimzuzahlen, durchaus nachvollziehen.

Grundsätzlich würde ich aber raten, von solchen Praktiken Abstand zu nehmen. Aber da auf mich eh nie jemand hört, hole ich mir mal Popcorn und schaue genüsslich zu, wie Großverbrecher sich mit Kleinverbrechern die Köpfe einschlagen...

...zur Antwort

Sieh genau hin, was die Fehlermeldung Dir gemeldet hat. Sie sagt die Wahrheit.

Du hast etwas anderes im Programmschnipsel zu stehen als Du schöngeistig-umgangssprachlich beschrieben hast.

Umgangssprachlich hast Du davon geredet, dass Du die Nicht-Existenz "DER BEIDEN Variablen" prüfen wollen würdest. Programmiert hast Du, dass Du die Nicht-Existenz eines Ausdrucks, der aus den beiden Variablen entsteht, prüfen willst. Das letztere geht aber nicht bzw. wäre Blödsinn: Ein Ausdruck - mit anderen Worten: das Ergebnis einer Operation - existiert natürlich selbstredend IMMER. Sofern die Operation ausgeführt wird. Und das wird sie, nimm Gift drauf. Eine PRÜFUNG auf die Existenz des Operations-Ergebnisses ist also immer überflüssig.

Also gehe nochmal in Dich und überlege ganz genau, WAS Du eigentlich willst, und programmiere dann auch tatsächlich so, wie Du das Programm eigentlich verhalten lassen willst!

...zur Antwort

Es kommt auf die Umgebungsbedingungen an, ob eine Rekursion sinnvoll ist oder nicht.

Es reicht, wenn die Menge der Schleifen, die zu verschachteln sind, von Fall zu Fall variiert. Herkömmlich müsste man dann für jeden solchen Fall eine extra Schleifen-Kaskade schreiben. Mit Rekursion braucht man das trotzdem nur einmal formulieren. Etwa wie hier: http://harryboeck.dyndns.org/Experimente/GuteFrageNet/recursive\_functions.php

Jetzt stellen wir uns noch vor, dass die Menge der varianten Rekursionstiefen etwas größer sein kann und die Komplexität des Codes in den Schleifen etwas komplexer als in dieser trivialen Demo - und schon ist die Sache berechtigt.

...zur Antwort

Aufgrund des Stichwortes "DLL-Injection" gehe ich davon aus, dass es um Programmierung unter Windows geht. Dort ist eine "DLL" prinzipiell das gleiche wie ein "Programm" alias "EXE". Nur der Startcode unterscheidet sich in beiden geringfügig. Die Verkopplung der Adressierung von Funktionen und Daten zwischen den Dingern ist völlig gleich.

Ob Du also eine Funktion in einem "Programm" oder einer "DLL" aufrufen willst, ist wurscht.

Ein wenig irritierend wirkt, dass Du von einer "Adresse 0x??????" schreibst... Eine Funktion in einem externen Modul (egal ob DLL oder EXE) spricht man, solange man eine Hochsprache verwendet, immer mit dem vom Programmierer vergebenen Namen an. Zum Funktionsaufruf gehört nicht nur, den Befehlszeiger der CPU auf den Einsprung-Punkt der Funktion zu setzen, sondern auch, einen sogenannten "Stackframe" zu erzeugen, bei dem eine Reihe von Daten in genau festgelegtem Format und Reihenfolge auf den "Stack" abgelegt werden müssen, bevor der Funktionseinsprung erfolgt. Das alles willst Du nicht von Hand erledigen. Das macht man nicht mal, wenn man Assembler programmiert.

Was Du wollen wirst, ist, die Funktion in Deiner Hochsprache aufzurufen. Und da macht man das mit genau nichts anderem als ihrem Namen.

Damit der Compiler oder Interpreter der Hochsprache diesen Funktionsnamen den ganzen eben erklärten Details zuordnen und diese ganze Arbeit für Dich erledigen kann, muss ihm natürlich mitgeteilt werden, wenn man eine Funktion in einem externen Modul aufrufen will. Auch dieses Mitteilen übernehmen in der Hochsprache mitgelieferte Werkzeuge. In C++ lässt Du "Header" des externen Moduls includen, die genau nichts anderes machen, als dessen Einsprungpunkte erstmal zu "deklarieren". In den Deklarationen steht alles drin, was zum Erzeugen des richtigen "Stackframes" notwendig ist. Damit nach dem Laden des Programms und des externen Moduls an eine x-beliebige Stelle im Arbeitsspeicher (die Du definitiv nicht beeinflussen kannst, solange Du nicht schwerere Hacking-Geschütze auffährst) die Aufrufe dann auch an die richtige Adresse gehen, kümmert sich der Programm-Lader des Betriebssystems darum, dass nach dem Laden eines Moduls (wurscht, ob DLL oder EXE) sämtliche Aufrufpunkte in den Modulen auf die aktuell gültigen Adressen der zugehörigen Eintrittspunkte gesetzt werden. Dies wird in Tabellen im Programmcode festgehalten.

Wenn diese Antwort nicht treffen sollte, müsste mal mehr Hintergrundinformation her.Bisher gehe ich davon aus, dass Dereta sich in C++ einarbeitet und dort dabei ist, Module kombinieren zu wollen. Und auch dort gerade beim Einarbeiten in die Grundprinzipien ist.

...zur Antwort

Kann mich den bisherigen Antworten nur bedingt anschließen. Es ist offensichtlich, dass "htmlkoenner" mit diesem Namen ausdrücken will, was er erreichen möchte. Jeder fängt mal irgendwo an. Und da sollte man, wenn man als "Experte" um eine Meinung gefragt wird, auf die Intention des Fragestellers eingehen. Also: Eine erkennbare Struktur hat die Seite (Titelleiste, Menü, Inhaltsteil). Das ist ein sinnvoller Anfang. Die Titelleiste braucht eine kontrastreichere Farbkombination. Wobei kontrastreiche mitnichten heißt, dass die Farben noch greller werden sollen, sondern dass die einen Hell-Dunkel-Kontrast gebrauchen können. Im Menü/Inhalts-Teil ist das besser gelungen. Bei Schriften sollte man generell nicht mit gesättigten Farben sowohl im Vordergrund als auch im Hintergrund arbeiten. Das wirkt wie Kratzen auf Glas. Es vertreibt zuverlässig Interessenten. Besser ist es, mit einem höchstens blassfarbigen Hintergrund zu arbeiten, damit es noch möglich ist, noch irgendetwas auf der Seite aus dem Rest hervorzuheben. Auf dem Rest der Seite ist das doch schon mal gelungen. Gut ist dann wieder, dass hier zumindest mit einer generellen Farbrichtung gearbeitet wurde (blau). Dass also die Seite nicht wie ein Tuschkasten daherkommt. Übrigens scheint so ziemlich jeder so anzufangen. Ist auch verständlich: Man hat gerade eben gelernt, verschiedene Dinge in HTML auszudrücken, und freut sich über jede Gelegenheit, diese Ausdrucksfähigkeiten demonstrieren zu können. (Der Name ist Programm: "htmlkoenner".) Und während man damit herumspielt, beruhigt sich dieser Drang allmählich und man kommt zu Seitenlayouts, die zumutbar sind. "Weniger (Spielerei mit den soeben gelernten HTML-Ausdrucksmöglichkeiten) ist mehr (Kundenfreundlichkeit)".

...zur Antwort

Da führen viele Wege nach Rom: a) Die Malware, welche zu diesen Verhalten geführt hat, wieder deinstallieren und hoffen, dass die Programmierer hinreichend nett waren, dabei auch den Teil entfernen zu lassen, der die Startseite des Browsers highjacked. b) Die Dateien, die die "Einstellungen" des Browsers regeln, unbeschreibbar machen und nur genau dann wieder beschreibbar machen, wenn man am Browser willentlich was verändern will. Die Startseite wird in "prefs.js" definiert. c) Vorbeugend in Zukunft keine Malware installieren. d) Zusätzlich noch weitere Malware installieren, darunter auch eine, die gestattet, die Startseite des Browsers nach Belieben einzustellen. Die Konfiguration dieser Malware so einstellen, dass letztlich doch die gewünschte Startseite aufgerufen wird. e) Selbst eine Art "Malware" schreiben - zum Beispiel eine einfache Batch-Datei, die im Hintergrund läuft und fortlaufend die "prefs.js" des Browsers manipuliert, so dass die Startseite nach eigenem Belieben eingestellt wird.

...zur Antwort

Wer (genauer: was) ordnet denn den Aufruf

  http://dl.seite.net/DownloadDatei.dat

dem Zwischen-Aufruf

  http://dl.seite.net/filedl.php

zu?

Aus der Fragestellung geht dies nicht hervor.

Laut Fragestellung und Beschreibung der Umstände passiert EXAKT das, was mit der abgebildeten RewriteRule programmiert ist.

Offenbar fehlt also an der Fragestellung ein erheblicher, zwingend zur Nachstellung des Problems erforderlicher Teil. Solange der nicht geliefert wird, ist eine Beratung zur Lösung nicht möglich.

...zur Antwort

OK, Leute: Seht Euch doch mal die Fragestellung genauer an! Hier geht es nicht darum, dass der Fragesteller nach irgendwelchen Standard-Formular-Übertragungsverfahren fragt, sondern dass er BELIEBIGE Daten nach Möglichkeit so wie sie sind auf den PHP-Interpreter auf Serverseite übertragen will.

Und na klar geht das, aber eben genau NICHT mit jenen Methoden, die PHP für Standard-Formular-Behandlungen vorsieht (was dann wären - aber was eben der Fragesteller gar nicht wissen will - sowas wie Key-Value-Pairs in Query-Strings oder im form-encodeten POST-String oder wie MIME-encodeter Inhalt im POST).

Wenn man all diese etablierten Standard-Verfahren EBEN NICHT benutzen will, kann man allemal immer noch beliebige Daten im POST-Körper übertragen. Genau wie der Fragesteller das in seinem Java-Codeschnipsel angesetzt hat. ABER dieser Inhalt wird dann eben nicht in die für Standard-Formular-Verarbeitung vorgesehenen Container auf PHP-Seite gelegt (was dann gewesen wären: $_REQUEST, $_GET, $_POST), sondern muss DIREKT aus dem POST-body ausgelesen werden. Das macht man in PHP mit sowas wie

  http://stackoverflow.com/questions/8945879/how-to-get-body-of-a-post-in-php

Viel Spaß beim Basteln!

...zur Antwort

Ich kann den bisherigen Antworten nur sehr zurückhaltend zustimmen...

Der Inhalt von Begriffen (auch, aber nicht nur der Berufswelt) wird durch den üblichen Gebrauch der Begriffe definiert. Die IHK ist da EINE, aber mitnichten die einzige und schon gar nicht die letzte definierende Instanz.

Was hinter den Begriffen verstanden wird, entwickelt sich fortlaufend mit dem tagesaktuellen Angebot auf dem Arbeitsmarkt weiter. Staatliche Institutionen können gar nicht anders, als immer mehrere Jahre hinter der technischen Entwicklung hinterherzuhängen. Sie bauen ihre Aussagen und Richtlinien nämlich aus nichts anderem als der Analyse eben dieser Entwicklung des Arbeitsmarktes auf.

Die letzte verbindliche Definition der Berufe aus staatlicher Hand wurde in der BRD 2010 herausgegeben - die sogenannte "Klassifizierung der Berufe" ("KldB 2010"). Die zeigt in etwa an, was vor rund 10 Jahren - als das statistische Material dieser Klassifizierung zusammengetragen und ausgewertet wurde - üblicherweise an Anforderungen an die Berufe herrschte.

Gemeinerweise (oder sollte man die verschwörerische Vermutung äußern "wegen Unfähigkeit"?) haben diese Leute diese Klassifizierung nur in Form von Excel-Dateien und schweren PDF-Wälzern für die Öffentlichkeit bereitgestellt. Man muss sie sich programmtechnisch aufbereiten, um sie im Alltag tatsächlich nutzen zu können.

Oder man sucht sich Angebote im Internet, wo andere Leute das schon erledigt haben. Zum Beispiel einen http://www.berufefinder.com.

...zur Antwort

Befasse Dich mal mit "Gültigkeitsbereichen"! Und wenn Du bei denen bist, befasse Dich mal mit "Einrückungen"! Die sind ungemein hilfreich für genau diese Gültigkeitsbereiche. Also: Damit der Mensch, der da zu programmieren versucht, versteht, was der Compiler, der den Mist verarbeiten muss, darunter versteht.

...zur Antwort

Schnapp Dir an Deinem Browser mal die "Javascript-Konsole"! Oder wie auch immer die Debugging-Sachen dort genannt werden.Und dann schau Dir mal an, wie die Elemente Deines Formulars im "Document Object Model" aussehen!


Wobei: So wie ein Teil (ein Drittel, um genau zu sein) Deiner Funktion formuliert ist, HAST Du ja durchaus ein Verständnis dafür, oder? Jedenfalls sprichst Du die AUSGABE-Zelle vom "document" ausgehend hierarchisch korrekt über den Formularnamen, dann über den Namen des Formularelements an...

...zur Antwort

Das ist kein "Adressfeld", sondern die "Suchbox". Die dient dazu, Text auf einer Seite zu suchen alias zu finden. Wenn Du in den Optionen eingestellt hast: "Search Text when i start typing" - oder wie auch immer dies in einer deutschen Version des Fuches übersetzt sein mag (erweiterte Optionen, erster Karteireiter) - tritt das von Dir beschriebene Verhalten auf - und zwar genau dann, wenn der Text-Cursor nicht in einem Formularfeld steht. Für Leute, die dies so wollen, eine angenehme Sache. Auf Seiten, die Hotkeys unterstützen oder von Javascript-Kiddys zusammengepfriemelt wurden, sicher nicht so erbaulich.

...zur Antwort

Nein, eine Wahl hatte nie jemand und wird nie jemand haben können. Du KANNST NICHT - prinzipbedingt - mit jemandem sprechen ohne diesem Deine Worte zu überbringen. Cookies ablehnen zu wollen ist gleichbedeutend mit der Ablehnung von Kommunikation übers Internet. Das kommt daher, dass bei der Erfindung des Internet's eben primär darauf geachtet wurde, dass es eine maximale Freiheit des nutzenden Individuums von den anbietenden Servern gibt: Grundsätzlich ist zunächst mal die gesamte Internetnutzung "ZUSTANDSFREI". Das bedeutet, dass zwischen zwei Anfragen eines Clients alias eines Browsers alias eines Internet-Nutzers kein Server der Welt wissen kann, ob diese beiden Anfragen nicht von zwei völlig verschiedenen Individuen aus völlig verschiedenen Kontexten heraus gestellt wurden. AUCH WENN sie von ein und derselben Internetadresse kommen. Ich kenne bisher keine Schule, keine Uni und keinen Betrieb, der das anders organisieren würde, als dass alle Rechner innerhalb der Betriebseinheit per NAT hinter jeweils einem gemeinsamen Internetanschluss der Betriebseinheit hängen würden. Ein Server hat unter diesen Umständen zunächst mal - ohne extra Techniken wie Cookies - keinerlei Möglichkeit zu erkennen, welche Anfragen von welcher Person kommen und in welchem Zusammenhang zu vorherigen Anfragen stehen. Die Erfinder des Internets WOLLTEN DAS SO. Basta. Durch "Cookies" werden sogenannte "Sitzungen" aufgebaut, wo ein Server jedem Besucher, der noch keins hat, ein solches Ding - in der Regel mit einem Zufallswert - in die Hand drückt und ihn fortan von anderen Besuchern als Individuum unterscheiden kann. Erst mit dieser Technik ist es 95% aller Internetnutzer überhaupt möglich, sowas wie einen Chat oder ein Forum zu nutzen, wo sie eigene Beiträge schreiben. Ohne Cookies keine "Sitzungen"! Ohne Sitzungen nur pure Seitenabrufe, keinerlei Foren/Chats/Internettelefon/Spiele im Internet! So einfach ist das. Es gibt also nirgendwo eine Wahl, selbst wenn das irgendwelche Dummys so formuliert haben sollten. Das ist nichts weiter als Marketing-Geplärre für DAU's.

...zur Antwort

https://www.sqlite.org/c3ref/intro.html

...zur Antwort

Ja, interessantes Problem, und DejaVue. Und durch Sawascwoolf und den Fragesteller selbst praktisch schon beantwortet. Nur nochmal zum Herausstellen des funktionalen Zusammenhangs für Leute, die später mal wieder über diesen Eintrag stolpern:

Weil im umgebenden Block #pagecont ein text-align: justify eingestellt ist, wird der Text überall dort, wo eine Zeile FORTGESETZT wird, im Blocksatz verteilt, was für die inline-blocks bedeutet, dass sie gleichmäßig über die Zeile verteilt werden, SOLANGE die Zeile eine FORTSETZUNG hat. Die letzte Zeile wird üblicherweise nicht im Blocksatz gesetzt, sondern linksbündig. Im normalen Schriftsatz ist das auch völlig korrekt so.

Beim automatischen dynamischen Verteilen von Blöcken wie hier stört die Abweichung in der letzten Zeile. Die lässt sich aber abfedern, indem eine zusätzliche Pseudo-Zeile erzeugt wird. Allerdings ist dies wieder nicht ganz einfach, wenn eben der Inhalt sich frei nach Anwender-Angebot verteilen dürfen soll.

Dasselbe Problem wiederholt sich regelmäßig zwischen mir (typischerweise 1280er Auflösung) und meinem Chef (irgendwo bei 2500 oder drüber Auflösung). Man muss die letzte Zeile mit hinreichend viel Dummy-Inhalt auffüllen, der eine Null-Zeilenhöhe hat (jedenfalls nicht stört, wenn sich da ein paar Zeilen unten aufwickeln auf Geräten von Unter-Millionären). Dann funktioniert das Prinzip weiterhin und sehr kompatibel.

Oder man denkt sich was aus in Richtung Tabelle und dann auflösungsabhängigen CSS-Spezialisierungen (mit Media-Selektoren). Viele Wege führen nach Rom.

Aber alle Achtung erstmal dafür, dass eine Band sich ne Seite von einem systematisch denkenden CSS-Enthusiasten statt Javascript-Kiddy hinsetzen lässt!

...zur Antwort

Das ist KEIN Javascript und KEIN Menü. Weder noch.

Was Du da siehst, ist ein Hover-Effekt, der per CSS definiert ist. Ansonsten sind die Bildchen einfach Bildchen, daran ist nichts Menü-artiges. Dass Bilder beim Hover vergrößert oder verkleinert werden oder drehen oder sonstwie mit den Hüften wackeln, scheint ein aktueller Hype zu sein. Ich find's ein wenig albern.

...zur Antwort