jan 20

Jeg har lige installeret et virtuelt gæsteoperativsystem i form af Windows XP via VirtualBox på min mac for at kunne teste web-produktioner i diverse versioner af Internet Explorer. Men det kneb lidt i den virtuelle Win XP med at få fat på de sites, jeg har kørende i virtuelle hosts under MAMP på mac’en.

Løsningen skal findes i hosts filen på gæste OS’et (den virtuelle Windows). Hosts filen ligger her:

c:\windows\system32\drivers\etc\hosts

Her tilføjes en linie for hver virtuelle host, man har sat op i MAMP’s Apache config fil:

10.0.2.2 sitenavn.tld

Hvor IP-adressen bruges som DNS-resolver af VirtualBox til at identificere værtscomputeren, og sitenavn.tld er navnet på det site/virtuelle host, man har sat op i Apache.

Jeg fandt løsningen i VirtualBox’ forum.

Det er muligvis banalt for netværksfolk, men jeg har efterhånden fået løst en del problemer via hosts filen på både mac, win og linux. Hosts-filen er klart et mere centralt stykke værktøj, end jeg forstod for bare få år siden.

Se evt. også hvordan man opsætter “Virtual hosts på mac under MAMP“.

written by Morten Brunbjerg Bech \\ tags: , , , , , ,

nov 30

Da version 1 af stylesheets og templates til Horsens kommunes biblioteker i sin tid blev kodet op, havde jeg hentet javascript-biblioteket jQuery + diverse plugins, placeret dem i wp-theme mappen og kaldt dem manuelt i theme’ets header.php script. Det var før jeg fandt ud af, at jQuery + plugins faktisk er inkluderet i Wordpress og kan kaldes med indbyggede funktioner.

Den “rigtige” måde at kalde javascripts på i Wordpress er med fuktionen wp_enqueue_script. Med denne funktion kan man kalde en række indbyggede javascript biblioteker, heriblandt jQuery, Scriptaculous og Prototype. For at kalde jQuery, skriver man således følgende i header.php:

<?php wp_enqueue_script('jquery'); ?>

Har man samtidig brug for diverse jQuery afhængige plugins, f.eks. Thickbox eller jQuery UI, kan man nøjes med at kalde disse, da jQuery så kaldes automatisk. I så fald kan man nøjes med følgende:

<?php wp_enqueue_script('thickbox'); ?>
<?php wp_enqueue_script('jquery-ui-core'); ?>

Har man brug for javascripts, der ikke er indbygget i Wordpress, kan disse også kaldes med wp_enqueue_script. Hent koden, f.eks. jQuery Cycle, og placér den i en dertil indrettet mappe i dit theme. Kald det dernæst på følgende måde:

<?php wp_enqueue_script('jquery.cycle.all.pack','/wp-content/themes/dit-theme-navn/din-javascript-mappe/jquery.cycle.all.pack.js',array('jquery')); ?>

Se dokumentation til funktionen wp_enqueue_script her.

written by Morten Brunbjerg Bech \\ tags: , , , ,

nov 13

Jeg roder i øjeblikket med en testinstallation af Magento på min mac. I den forbindelse havde jeg brug for at rette i etc/hosts/ filen, men den er ikke umiddelbart til at finde på en mac, da den er skjult. Det findes der heldigvis råd for. Jeg fandt en glimrende vejledning her:

Foundation PHP: Creating a virtual host in Mac OS X 10.5 (Leopard)

Jeg bruger imidlertid ikke mac’ens indbyggede Apache server, men MAMP. Derfor kunne jeg ikke rigtig bruge ovenstående vejledning til opsætning af virtual hosts i Apache’s konfigurationsfil, httpd.conf. Det findes der også råd for. Her er en fin vejledning i opsætning af virtual hosts under MAMP:

Sawyer McFarland Media, Inc.: Setting Up Virtual Hosts for MAMP

Samme site har en fin indførsel i, hvordan man slipper for MAMP’s default porte 8888 og 8889 i sine lokale URL’er (Se artiklens figur 3).

written by Morten Brunbjerg Bech \\ tags: , , , ,

sep 01

Opnå mere fleksibilitet i brugen af Wordpress som CMS med én sidebar pr. kategori. Få PHP koden her.

Mange designere og udviklere vælger at bruge Wordpress som CMS fordi det er så enkelt og relativt nemt at implementere og udvikle til. Én af Wordpress’ store begrænsninger i rollen som CMS er imidlertid sidebar-metaforen. Som udgangspunkt er der i de fleste themes kun én eller to sidebars til rådighed sitewide, netop fordi Wordpress er skabt som blogging værktøj. I en blog er det sjældent nødvendigt med flere.

Men har man brug for et decideret CMS, er der behov for relevant sekundært indhold på alle sider. Noget, der relaterer sig til sidens primære indhold og ikke bare en generel liste med kategorier, et arkiv og en blog roll.

Og så fik jeg den ide at man måske kunne opnå noget brugbart, hvis man kunne oprette en sidebar pr. emnekategori. Så ville det være muligt at målrette widget-indhold til de enkelte emner og dermed øge relevansen af sekundært indhold på indlæg og kategorisider. Efter en del eksperimenteren, lykkedes det mig at skrue nedenstående sammen.

Nedenstående kode skal stå i dit themes functions.php fil:


<?php
# Get sidebar names from db.
global $wpdb;
$my_widget_name = $wpdb->get_col("SELECT slug
FROM $wpdb->terms, $wpdb->term_taxonomy
WHERE $wpdb->terms.term_id=term_taxonomy_id
AND taxonomy='category' AND count!=0 ORDER BY name ASC");

# Register one sidebar per category name.
foreach($my_widget_name as $my_widget) {
  register_sidebar(array(
    'name' => 'Category: ' . $my_widget,
    'before_widget' => '<div id="%1$s" class="%2$s widget">',
    'after_widget' => '</div>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>', ));
}
?>

Først opretter vi en forbindelse til databasen, henter kategorinavn og id fra alle kategorier, der ikke er tomme, samt sorterer kategorierne efter navn. Dernæst registrerer vi vores nye sidebars i Wordpress med funktionen register_sidebar samt navngiver hver sidebar med det enkelte kategorinavn.

Indsæt de nye sidebars i dit themes sidebar.php fil:


<?php
# If this is a category archive page.
if (is_category()) {
	global $wp_query;
	$cat_obj = $wp_query->get_queried_object();
	$category_slug = $cat_obj->slug;
}
# If this is a post.
elseif (is_single()) {
	$category = get_the_category();
	$category_slug = $category[0]->category_nicename;
}
# The widget.
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('category_' . $category_slug) ) : ?>
<div id="search" class="widget widget_search">
	<h3><?php _e('Search'); ?> <?php bloginfo('name'); ?></h3>
	<?php include (TEMPLATEPATH . '/searchform.php'); ?>
</div>
<?php endif; ?>

For at kalde den rigtige sidebar, skal vi have fat i det rigtige kategorinavn. Hvis siden er en kategori-side, kalder vi kategoriens navn. Men hvis siden er et indlæg, kalder vi navnet på den første kategori, siden er gemt i. Nu udskrives kategoriens sidebar, hvis du befinder dig på en kategori-side eller et indlæg.

Hvad så med ’sider’?
Man kan lave noget tilsvarende med Wordpress’ side-metafor. I stedet for at tage fat i kategorierne i databasekaldet, skal man så bare have fat i tilsvarende for ’sider’. I så fald vil databasekaldet se ud som følger:


$page_sidebars = $wpdb->get_col("SELECT post_name
FROM $wpdb->posts WHERE post_type='page'
AND post_status='publish' AND post_parent='0'
ORDER BY menu_order ASC");

Bemærk!
Man skal være forsigtig med metoden, hvis man har mange kategorier og/eller sider, da Wordpress laver et kald til databasen for hver sidebar, den skal loade i backend’en. Skal den lave for mange kald, får man time out og så fungerer metoden naturligvis ikke.

written by Morten Brunbjerg Bech \\ tags: , , , ,

aug 26

For 1½ års tid siden skiftede jeg webhotel til Gigahost efter i flere år at have været kunde hos Unoeuro. Det tillokkende var funktionaliteten og muligheden for flere domæner og databaser på samme konto. Jeg havde aldrig sikkerhedsproblemer hos Unoeuro, men siden skiftet til Gigahost er jeg blevet hacket 3 gange. I sidste uge måtte mine sites så ned og ligge igen.

Hvad var blevet hacket?

Mine Wordpress sites havde fået nye forsider og alle index og default filer havde fået tilføjet en iframe, der sendte evt. besøgende hen et sted, hvor de kunne få inficeret deres computer med malware eller virus.

Det så alt sammen meget automatgenereret ud, for det var det eneste, der var gjort. Ingenting i databaserne, så det har utvivlsomt været en robot. Det lignede det, som denne Wordpress bruger har været ude for.

Jeg er usikker på, hvordan hackeren er kommet ind. Det kan være via remote file inclusion (RFI), men jeg har en grum mistanke om at mine ftp oplysninger er blevet opsnappet, eftersom hackeren er kommet godt omkring på alle mine sites.

Hvordan kan man opsnappe ftp oplysningerne?

Ofte vil det kunne gøres via inficering med vira eller malware på den forurettedes computer. Jeg har scannet mine maskiner for begge dele og tror ikke det er sket ad den vej. Men hos Gigahost bruger man kontonavn og kontokode til alt. Derfor står det også i wp-config.php, konfigurationsfilen til Wordpress, så Wordpress kan komme i kontakt med databasen. Har man først fået fat på brugernavn og kodeord herfra, har man således også brugernavn og kodeord til ftp og så er der fri adgang.

Hvad gør man for at rense et inficeret site?

Alle toplevel index.php filer var udskiftet med en index.htm fil og der var tilføjet iframes i bunden af index.php filerne i mine theme-mapper samt default og index filer i øvrige mapper. Jeg fjernede alle iframes, slettede Wordpress helt og installerede forfra, for at være sikker på at de inficerede filer var helt væk.

rzaman.com har en udmærket opskrift på, hvordan man gør.

Dnxpert har et fint indlæg om, hvordan man også undersøger, om databasen er inficeret.

Også Smackdown har en glimrende artikel om emnet.

Hvordan kan man øge sikkerheden?

Brug .htaccess filer til at blokere adgangen til bestemte mapper og filer. Her er et par ressourcer, jeg har fundet brugbare:

Sørg også for at begrænse rettighederne på dine filer og mapper. Jeg bemærkede, at man nemt overser wp-config.php i den henseende. Sæt manuelt rettighederne på denne fil til 600, så andre ikke kan læse den. Se udførlig artikel hos Wordpress om hvordan man gør.

Installér sikkerhedsplugins i Wordpress, f.eks.:

  • AskApache Password Protect – der genererer .htaccess filer for dig.
  • Login LockDown – der tjekker om der har været mange forgæves loginforsøg fra en given ip adresse, samt blokerer denne.
  • AntiVirus – der tjekker dine theme-filer for infektion.
  • WP Security Scan – der scanner din Wordpress installation for sårbarheder og foreslår udbedringer.

Og endelig: Skift kodeord, skift kodeord, skift kodeord. The Blog Herald har gode tips til, hvordan man finder på et godt ét.

Har Gigahost et sikkerhedshul og bliver jeg hacket igen?

Gigahost har ikke nødvendigvis et sikkerhedshul, men det er da problematisk, at man skal bruge samme brugernavn og kodeord til alt. Og ja, eftersom jeg ikke helt ved, hvordan hackeren kommer ind, bliver jeg måske hacket igen. Men så kan det altså godt ske, jeg skifter webhotel og ser om det løser problemet.

written by Morten Brunbjerg Bech \\ tags: , , , , ,

aug 26

Bogmærker indsamlet den 26. august fra 11:29 til 11:58

Web fonts and standards – Jeffrey Zeldman Presents The Daily Report
26. august
As far back as 1998, CSS2 provided a way to link to real fonts from your style sheet. Nice round up on how to implement fonts with @font-face.
Fonts available for @font-face embedding – Webfonts.info
26. august
Nice collection of fonts for the web.
PDF doc search II – Meta
26. august
I edited includes/SpecialSearch.php to make the saved PDFs searchable. This contribution is limited to a small amount of PDFs. When creating the PDFs don´t use compress text and images in e.g. acrobat distiller.

written by Morten Brunbjerg Bech \\ tags: , , , , , , , , , ,

aug 25

Bogmærker indsamlet fra 20. august til 25. august

HTML URL Encoding Reference
25. august
URL encoding converts characters into a format that can be safely transmitted over the Internet. Enormt anvendelig, når der skal laves links til en OPAC.
Site5 – Web Hosting for Webmasters
24. august
Another web hosting company. Unlimited web space, bandwith and domains. @Spiri recommended this one.
Remote File Inclusion (RFI) Attempts – Detecting, Tracking, and Mitigating or Stopping » BLOG INGENUITY
20. august
This article is intended for readers new to RFI and will provide a short explanation of how RFI works and describe a few ways to detect, track, and mitigate or stop RFI attempts through the use of tracking software, server logs, your .htaccess file, and your php.ini file.

written by Morten Brunbjerg Bech \\ tags: , , , , , , , , , , , , , ,

aug 20

Bogmærker indsamlet fra 14. august til 19. august

Screenr – Create screencasts and screen recordings the easy way
19. august
Screenr is a web-based tool that lets you create screencasts without installing any software. You just click the record button and your screen activity is recorded along with narration from your microphone. Screenr then publishes your screencast in high-definition Flash format. Screenr makes it easy to share your screencast on Twitter, YouTube or anywhere else on the web. Even iPhone users can view your screencast.
UX Booth: User Experience Blog & Free Website Usability Testing
14. august
The UX Booth is a group that writes about User Experience and offers free Website Usability Reviews that all designers and developers can benefit from.
Colorburned | Graphic design resources, tutorials, and more!
14. august
Colorburned is a design blog featuring some of the best design news, resources, and tutorials from around the web. On this website you will find free vectors, textures, patterns, Illustrator and Photoshop brushes as well as tutorials and interviews with some of the biggest players in the design industry. Our focus here is to arm you with the tools and knowledge that you need to create better designs in less time.

written by Morten Brunbjerg Bech \\ tags: , , , , , , , , , , , , , , , , , , , ,

aug 14

Bogmærker indsamlet fra 13. august til 14. august

Paladin (0/10/61) – Talent Calculator – World of Warcraft
14. august
Popular talent build for maximum damage dealing retribution paladins in World of Warcraft.
Best Talents for Patch 3.2 of World of Warcraft – WoW Popular – Filter by Talents
14. august
Popular talent builds for World of Warcraft. If you don't bother calculating your talent build yourself, this is the place to go fetch it.
IE6ify Bookmarklet
13. august
After years of observation and reverse engineering I am proud to say I have been able to reproduce the IE6 algorithm to break even the most standards-compliant websites.

written by Morten Brunbjerg Bech \\ tags: , , , , , , , , , , , , , ,

aug 01

Bogmærker indsamlet fra 17. juli til 1. august

Brush Pilot™ – The fast and easy Photoshop brush previewer for Mac OS X
1. august
Brush Pilot™ is a fast and easy application for previewing Adobe® Photoshop® and Adobe Photoshop Elements Brushes (.abr), built exclusively for Mac OS X. Brush Pilot is designed to save you time by allowing you to instantly preview your brushes without having to load them into Photoshop.
The Autopsy Of WordPress As CMS With 25 Great WP Plugins & Designs | Onextrapixel – Showcasing Web Treats Without Hitch
17. juli
Finding a suitable and simple to use CMS can be tough, it must be flexible, secure and work right out of the box. Beside that, it must be able to extend it's functionality and search engine friendly. Let us now discuss why netizens like WordPress and what WordPress can further do for us as a simple Content Management System (CMS).
Digital Photography School – Digital Photography Tips for You
17. juli
Welcome to Digital Photography School! Discover how to use your digital camera with our Digital Photography Tips. We are a community of photographers of all experience levels who come together to learn, share and grow in our understanding of photography.

written by Morten Brunbjerg Bech \\ tags: , , , , , , , , , , , , , , , , , ,