Ciao, papà... sai, mi ricordo una vita fa..quando ero poco più alto di un metro, pesavo al massimo 30 chili, ma [...]

Articles

Our website articles

Salvatore Noschese
Capita spesso di leggere discussioni di webmaster che chiedono info su script anti-adblock perché infastidisti dall'idea che alcuni visitatori possano entrare sul sito, partecipare all'eventuale forum, commentare agli articoli, registrarsi, scaricare eventuali file ecc, senza far apparire i banner nei loro browser e quindi non portando alcun guadagno al webmaster stesso.
 
Ora, premetto che io sono assolutamente contrario all'uso di adblock perché è facile immaginare che, inevitabilmente, se tutti usassero un adblock, morirebbe l'advertisting sul web (niente più banner pubblicitari se non c'è più nessuno che li guarda e quindi i contatori rimangono a zero). Quindi molti webmaster, molti blogger di professione, si ritroverebbero letteralmente disoccupati e tanti contenuti oggi gratuiti diventerebbero solo un lontano ricordo da navigare su webarchive.
 
Detto ciò, parlando da utente che non usa per scelta adblock, se un sito è pieno zeppo di banner e proprio non riesco a tollerarli, basta cambiare sito e cercare altrove!
Cioè, se in un negozio, in un bar, in un ristorante, scrivono "vietato l'ingresso ai cani" e io ho il cane al guinzaglio, mica abbandono il cane o strappo via il cartello!
E se mettono della musica che non ci piace, un programma tv che ci dà fastidio, mica possiamo pretendere di cambiare e mettere ciò che vogliamo noi!
Insomma, semplicemente si cambia locale e si cerca altrove!
Web: se un sito non ti piace, è pieno di banner, varie ed eventuali, non cambiare il sito rimuovendo i banner: cambia sito e basta!!!
 
In fondo, proprio e soprattutto sul web, di possibilità ce ne sono letteralmente un'infinità, e quindi non si è "quasi mai" obbligati a rimanere controvoglia su un sito.
 
Che poi, volendo, se lo si usasse dove compaiono popup, overlayer, banner porno strani ecc ecc in quantità industriali, un pochetto potrei anche capire che si usi, (come sui video di youtube: quando metto un video per mia figlia e parte un banner che nulla ha a che fare... cioè, che noia! - dove adblock funzionava e puliva tutto, poi google si impegnò a contrastarlo e le cose si complicarono... adesso non saprei se funziona ancora dato che non lo uso!). Ma se lo si mette su un sito che ha giusto un paio di banner tanto per mantenersi dominio e hosting... Beh, non è molto sensato attivare un adblock! Quindi se lo usano sul vostro sito... Beh, magari di banner ne avete troppi e/o son troppo fastidiosi (tipo gli odiosi popup/overlayer ad ogni refresh), oppure - purtroppo - non han capito cosa stanno usando e come/quando andrebbe usato!
 
In ogni caso, obbligare un utente a visualizzare i banner non è tecnicamente possibile nemmeno con il migliore degli anti-adblock (al massimo lo infastidite e rischiate di perderlo del tutto - io, personalmente preferisco una partecipazione da parte di un utente con adblock piuttosto che sapere di un utente con adblock che ricevendo l'avviso chiude tutto e cerca altrove)
Infatti molti non sanno che, ad esempio, basta usare Firefox in modalità Anonima (Private Browsing) per far sparire banner, tracking code, socialnetwork-box-like ecc ecc!
Poi ci sono anche i browser testuali (lynx), la googlecache, view-source/w3c-validator per leggere direttamente i sorgenti!
Insomma, decine di metodi per vedere il contenuto presente in un sito senza necessariamente visualizzare alcun banner e quindi è una battaglia persa in partenza!
Purtroppo o per fortuna, è così: "inutile e persino dannoso installare giganteschi javascript per bloccare un blocco banner (anti-adblock)! Perdete solo tempo, e appesantirete inutilmente il vostro sito."
 
Piuttosto, investite le energie nei contenuti che, inevitabilmente, col tempo, renderanno di più
E, se proprio volete ricordare all'utente che i banner fan comodo alla sopravvivenza della vostra community, create un'immagine della stessa dimensione del banner da mettere - via css - sotto il banner stesso così, quando i banner non ci saranno, ecco che si visualizzerà l'immagine e il layout del sito - in assenza di banner - non cambierà dato che ci saranno le immagini!
 
Bene! Spero di avervi dato abbastanza stimoli e spunti su cui riflettere.
 
Saluti,
laltroweb.it
Salvatore Noschese
Come da segnalazione di @Daniel ./ips-community-suite-4111-è-stata-rilasciata-r153/#comment-234 e come da segnalazione appena giunta sul pannello di controllo (suppongo ci siano degli schemi per avvisare gli utenti affinché non aggiornino tutti allo stesso istante), la versione 4.1.12 di ipb - già in beta da alcuni giorni - è adesso stata rilasciata
 
 
Riporto qui le note di rilascio in Inglese:
 
Key Changes
This is a maintenance release to fix reported issues and add refinement to existing features. In addition to bug fixes and performance improvements, it includes following enhancements:
New Features:
When you mouseover the badge showing who liked a post, you will now see a larger list of who liked that post. You can still click to get the full list. Ratings now show half-stars for the average (for example, if one user votes 3 stars and another 4, it will show 3 and a half stars) and there is now an indication if you have rated something. A "Preview" button has been added to the post editor which shows how the post will appear after BBCode processing. Tabs show how the post will appear on desktop, tablet and mobile. Users can now choose to ignore notifications for being mentioned in posts by particular users. You can now filter searches by specific forums/categories. You can now control whether open and click tracking should be used for emails sent by SparkPost. Activity Stream enhancements:
The filter dropdowns now have an "Apply" button for better usability (previously you had to click outside the dropdown). The "Expanded/Collapsed" toggles are now clearer. Hitting back from a clicked item in any activity stream now remembers your position and loaded results. Other enhancements and improvements:
The way dates are formatted can now be customised by language strings. For example, if you want to change the date format to "DD-MM-YYYY" that is now possible. With this change, the new default is US-style ("March 4, 1992") rather than the previous European-style ("4 March 1992"). Advertisements no longer have padding which makes them easier to position in other areas such as headers. When comparing revisions of articles in Pages databases, a new browser-based diff tool is used which is more user-friendly and moves the computation from the server to the user's browser for greater performance. Better indication of files pending approval in Downloads. The version number for themes now displays in the AdminCP list. Technical features:
If you are using the utf8 rather than utf8mb4 character set (which will mean you can't post Emoji) there is a new tool in the AdminCP to upgrade to utf8mb4. System logs have been rewritten to use the database for logging where possible with a more user-friendly interface in the AdminCP. Downloading files from Amazon S3 has been changed to redirect the user to a temporary download URL rather than serve the file through your server for significantly improved performance and reliability, especially with large files. If it is available on the server, ImageMagick will now be used rather than GD by default. ImageMagick also has a new setting to control JPG quality. APC User Cache is now supported in addition to APC.  
 Warning This release does not support PHP 5.4 as it is end of life and no longer supported by PHP. If you are running PHP 5.4 do not upgrade and ask your web host to update to a supported version of PHP.
Additional Information
Important Fixes
In addition to many smaller bug fixes and performance improvements, the following important fixes are included:
Uploading animated gifs was broken in some areas  Support departments in Commerce could not be deleted. Member groups could not be deleted. The summary when submitting a calendar event may show the wrong time. Double posts may occur on Windows servers. Reports were not being sorted correctly. PM search is now more reliable. Profiles, and pages from the Pages app were missing from the sitemap in the default configuration. Using very high limits for the number of questions per poll may cause errors. Setting up the REST API may fail.  
Information for 3rd party developers   There has been API changes to \IPS\Email. Contributors can view details here: https://invisionpower.com/forums/topic/429144-4112-changes-ipsemail/  There has been API changes to \IPS\Log. Contributors can view details here: https://invisionpower.com/forums/topic/429065-4112-changes-ipslog/  An earlier version of IPS Community Suite performed coding standard checks when in developer mode, throwing errors if code did not meet certain coding standards. This functionality has been restored. Note that these checks only run in developer mode. CKEditor has been updated to 4.5.9. FontAwesome has been updated to 4.6.0. jQuery has been updated to 1.12.3. CodeMirror has been updated to 5.14.2. XRegExp has been updated to 3.1.0. The REST API output for a member now has a "validating" element to indicate if the member is awaiting validation. The code to update the impressions for an advertisements has been moved from \IPS\Output::sendOutput() into a new method, \IPS\core\Avdertisement::updateImpressions() for easier hooking. Queue tasks now have an optional method, postComplete(), which is ran after the queue task has finished for any final cleanup that needs to be performed. The DEV_DEBUG_TEMPLATES constant has been renamed to DEBUG_TEMPLATES and now works when not in developer mode. You can now add a postUpgrade.php file to any folder in the setup folder of an application to define a message which should display after upgrading through that version.  
Le note importantissime - a mio parere - sono: Niente più supporto a php 5.4 (o non aggiornate ips, o aggiornate php); un pulsante di anteprima (era ora); rimozione del padding dagli ads che imponeva soluzioni artigianali; tanti aggiornamenti di terze parti (ckeditor, jquery, codemirror, fontawesome); diff per le revision negli articoli! Insomma, di cambiamenti ce ne sono stati, e adesso che la community è stata aggiornata non resta altro da fare che godersele (e verificare - e sperare - che tutto funzioni a dovere)
Interessante anche la nuova possibilità di ignorare determinate caratteristiche di ogni singolo utente:

(scusa Daniel, ho usato il tuo nome solo per capire se serviva la "@" come per i tag, o bastava il nome e per fare lo screen)
 
Come sempre, se notate dei problemi non esitate a comunicarlo.
 
Saluti,
laltroweb.it
Salvatore Noschese
Come promesso, rilascio il codice sorgente della mia pagina: IpInfo
First Of All, diamo a Cesare quel che è di Cesare, e quindi iniziamo a dire come otteniamo i dati...
 
Prima di tutto, è doveroso dire che tutto parte da: http://ipinfo.io/
Questo sito offre uno splendido servizio, gratis entro determinati limiti, ma non per le pagine https (come la mia) ecc...
Allora com'è che io ce l'ho?
No, tranquilli, non ho pagato e non sto pubblicando uno script che chiede pagamenti!
In realtà, in quella pagina, elenca alcuni metodi per ricavare i dati, ma è solo andando nella pagina "developers": http://ipinfo.io/developers che scopro l'url "json: http://ipinfo.io/8.8.8.8/json"
Output (ps: 8.8.8.8 è google dns, usato semplicemente come esempio):
{ "ip": "8.8.8.8", "hostname": "google-public-dns-a.google.com", "city": "Mountain View", "region": "California", "country": "US", "loc": "37.3845,-122.0881", "org": "AS15169 Google Inc.", "postal": "94040" } da qui a pensare: beh, ma allora catturo la pagina con file_get_contents ed è fatta!
ed infatti è così:
echo file_get_contents("http://ipinfo.io/8.8.8.8/json"); // output: { "ip": "8.8.8.8", "hostname": "google-public-dns-a.google.com", "city": "Mountain View", "region": "California", "country": "US", "loc": "37.3845,-122.0881", "org": "AS15169 Google Inc.", "postal": "94040" }  
Quindi abbiamo un url che ci ritorna dei dati in formato json di qualunque ip semplicemente definendolo nell'url stesso (se non definiamo l'ip ci ritorna i dati del nostro stesso ip, = in questo caso i dati del nostro server dato che è il server a chiederli tramite file_get_contents)!!! facile realizzare il tutto con un po' di sano php
 
Dopo varie prove, modifiche, test, ottimizzazioni, indentazione, varie ecc... Questo il codice da me creato, con tanto di ottimizzazione per ipb nei commenti:
<?php /* Author: Salvatore Noschese > https://laltroweb.it/ Source and Support: https://laltroweb.it/homepage/ipinfo-tool-codice-sorgente-php-r185/ */ $ip = isset($_POST['ip']) && !empty($_POST['ip']) ? htmlspecialchars($_POST['ip']) : $_SERVER['REMOTE_ADDR']; $file_get_contents = file_get_contents("http://ipinfo.io/".$ip."/json"); $json_decode = json_decode($file_get_contents, true); echo " <form method='post'> <label for='ip'>IP Address:</label> <input type='text' name='ip' id='ip' value='".(isset($_POST['ip']) && !empty($_POST['ip']) ? $ip : '')."' placeholder='eg: 8.8.8.8' autofocus title='only standard ip address here' pattern='((^|\.)((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]?\d))){4}$' required> <!-- IPB Users can use this: <button type='submit' style='height: 35px'> <i class='fa fa-search'></i> </button> Otherwise classic Submit: --> <input type='submit' value='Go'> </form>"; if(isset($json_decode["bogon"])) { echo "<p class='ipsType_richText'>This is a <a href='https://en.wikipedia.org/wiki/Bogon_filtering' title='Bogon filtering' target='_blank'>bogon</a> or a private IP address that should not appear on the Internet.</p>"; } elseif(isset($json_decode["loc"])) { echo " <p> <!-- IPB Users can use this: <img class='ipsResponsive_hidePhone' src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=500x375'> <img class='ipsResponsive_hideDesktop ipsResponsive_hideTablet' src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=300x225'> Otherwise set size: --> <img src='//maps.google.com/maps/api/staticmap?center=".$json_decode["loc"]."&zoom=9&size=500x375'> </p>"; } echo " <code>\n"; foreach($json_decode as $key => $value) { $key = isset($_POST['ip']) && !empty($_POST['ip']) ? str_replace("ip", "RequestIp", $key) : str_replace("ip", "YourIp", $key); echo "\t<p>".ucwords($key) . ": " . $value."</p>\n"; } echo "</code>"; ?>  
file_get_contents c'è ancora, ma adesso lavora di default sull'ip del visitatore, e poi - tramite form - sull'ip richiesto (e il form direi che è ben protetto grazie al pattern che accetta solo un formato ip valido, e, giusto per ulteriore sicurezza, è comunque filtrato da htmlspecialchars). Quindi stampo un output quanto più pulito possibile, e - in certi aspetti - persino migliore dell'originale! Il sito originale, infatti, mostra la mappa - con un punto indefinito in mare - anche per gli ip "bogon". Io, invece, la mostro solo se esistono coordinate valide e quindi se l'ip è valido! inoltre differenzio "ip" con YourIp/RequestIp, e sistemo le maiuscole anziché lasciare tutto minuscolo.
 
Insomma, queste poche righe di codice, che poi partono da un semplice file_get_contents e ancor prima da un semplice url, vi permetteranno di ottenere questo identico risultato (soprattutto se siete utenti ipb - diversamente cambierà leggermente il campo input):
https://laltroweb.it/tools/ipinfo/
 
È tutto, spero sia di vostro gradimento!
Per dubbi, difficoltà, problemi, bug, varie ed eventuali, non esitate a chiedere (sul forum se pensate si tratti di una discussione lunga - così vi seguirò meglio, o anche qui nei commenti - anche da visitatori)
 
Se lo usate nel vostro sito, gradirei almeno un feedback o, meglio ancora, un backlink a questo articolo, o all'homepage... Insomma, qualcosa! Ma non fate quelli che lo installano e lo spaccian per roba loro, perché non è gentile
 
Saluti,
laltroweb.it
Salvatore Noschese
Nuovo tool inserito alcuni giorni fa, ma lo annuncio solo adesso (giusto dopo le dovute verifiche, correzioni, miglioramenti)
 
IpInfo Tool
Avete un indirizzo ip e vi chiedete la zona (approssimativa) di appartenenza?
Volete sapere il provider usato?
Vi piacerebbe vedere persino una mappa che indichi più o meno la zona di residenza?
 
... Il tutto con un semplice click e senza noiosi codici di verifica o lunghe e noiose attese?
 
Bene, allora vi basta andare qui: https://laltroweb.it/tools/ipinfo/
E magari salvare il link nei vostri preferiti/segnalibri!
 
Facile, veloce, e sicuro!
 
Per i webmaster:
Utilizzo un servizio esterno per i dati, mentre per la mappa uso le coordinate e le passo a googlemaps (static maps) con img src... Tutto piuttosto semplice, ad essere sincero.
In serata scriverò un articolo con codice completo e funzionante (letteralmente: salva, piazza sul server, e sarà proprio come il mio)!
 
Rimanete in ascolto
 
Saluti,
laltroweb.it
Salvatore Noschese
Qualche tempo fa utilizzavo un file presente sul mio sito come firma in altri (tanti) siti/forum, e poi lo rimossi... Rimuovendolo, però, mi toccò rimuoverlo anche dai vari siti e forum per evitare errori 404 e firme danneggiate (che non fan mai bella figura).
Tuttavia, da qualche parte doveva essere rimasta questa firma dato che, qualche volta, ritrovavo errori 404 su quel file anche se, date le impostazioni della privacy dei browser moderni (referer eliminato praticamente ovunque) mi era impossibile trovare l'origine (e google non mi aiutava).
Giusto per provare, ho scritto un log in php così da ottenere qualche info in più, e sperare che tra quegli accessi qualcuno lasciasse il referer!
Beh, è successo esattamente così (e il file l'ho trovato sulla mia firma nel forum di giorgiotave - forum che frequento poco, ma dove son registrato da tempo, e avevo la firma, e quindi - grazie a questo log - adesso l'ho sistemata).
 
Questo il logger scritto al volo che mi ha aiutato:
<?php //filename $file = 'log.html'; //write access time $log = "<b>Time:</b> ".date('H:i dS F')."<br/>\n" ; //write user lang $log .= "<b>Lang:</b> ".(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : "No Lang (???)")."<br/>\n" ; //write user IP address $log .= "<b>Ip Address:</b> ".(isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR']." | ".gethostbyaddr($_SERVER['REMOTE_ADDR']) : "No Ip (???)")."<br/>\n"; //write referer $log .= "<b>Referer:</b> ".(isset($_SERVER['HTTP_REFFERER']) ? $_SERVER['HTTP_REFFERER'] : "No Referer :(")."<br/>\n"; //write user agent $log .= "<b>User Agent:</b> ".(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "No User Agent (???)")."<hr/>\n"; //and final, put all in log file file_put_contents( $file, $log, FILE_APPEND | LOCK_EX ); ?> Potete includerlo in un file html come fosse un'immagine, (img src... tanto non rilascia output) o con include in un file php, e loggerà in un file html ogni accesso con tanto di orario, ip, host, lingua, useragent... Insomma, un po' di tutto!
 
Esempio di output:
e così per ogni altro accesso...
 
Insomma, un mini access log in php (ma proprio base base - non ha nemmeno l'html di base!) per ogni evenienza, che a volte può rivelarsi utile
Se avete consigli su come migliorarlo... beh, commentate pure
 
Saluti,
laltroweb.it
Iscriviti alla nostra newsletter