skoop.dev

  • About
  • @skoop@phpc.social
  • Prototyping your experience

    February 7, 2014
    frameworks, php, prototyping, tribalism

    Whether in a professional environment or in private, prototyping (or making a proof of concept) is a useful tool. It is something people underestimate though. Frequently I hear people thinking the time spent on a prototype or proof of concept is a waste of time. NO, IT ISN’T

    Just this morning, I was reading this article by Ed Finkler on Tribalism and I was thinking about it. Ed describes tribalism in the tech-world, and I could totally understand what he was talking about. The fact that terms like “browser-war” and “framework-war” come by in our world. The fact that we always put Drupal against Joomla! against WordPress is proof that we live in a tribal techworld. And as Ed writes, this is not necessarily a bad thing, but it usually comes with some negative side-effects.

    I’ve done projects at a lot of web agencies where the company had standardized on a single framework or a single CMS. And with “standardized”, I mean, that was the only technology being used, and aside of perhaps some individual libraries, if some solution did not exist for that chosen technology, they’d build it themselves without looking outside of their tribe. I usually question such behaviour, and the response I regularly get is “we can’t all know everything about every (framework|CMS)”. Of course I agree with this: In the fast-moving world of technology we live in, you can’t be an expert in every available technology. The thing is: You don’t need to be an expert in every technology. You need to know just enough to know when it can be useful.

    And so I get to prototyping. Prototyping (or making a proof of concept) is nothing new. It’s definitely not limited to software either. Better yet, given the dynamic nature of software and the pretty static nature of other industries, it is even better suited for those other industries; imagine building an airplane without building a prototype first. You’ll never know what’s wrong with the design of your plane until it crashes with 250 people inside.

    Aside from building a prototype to testdrive your design and see if it is any good, you can use the prototyping approach also for your own good. An important thing to realize is that a prototype is not a production-ready product. It is something you build to prove to yourself that a concept works, or to try out one (or several different) approach(es). And once you’re done, you can always decide to throw away the prototype and start all over.

    The thing is, you can use prototyping for the projects you do (and you should definitely consider this approach when you’re not sure about a proposed solution), but you can also use prototyping for learning things. Actually, while prototyping, you usually learn anyway. But consider using it for learning a new technology for a change.

    LinkTuesday

    Let’s take a practical example. When Symfony2 came out, I was deep into symfony 1. However, Symfony2 was completely new and different from symfony 1, so I needed something to try it our and learn the concepts. I decided to build a very simple website that would aggregate all the links posted to twitter with the #linktuesday-hashtag. I started my first Symfony2-project and started playing around. Once done, I decided to open source it and publish the website. But the most important thing of this project was: I learned the basics of Symfony2.

    Gowat.ch

    A similar example is gowat.ch. I wanted to dive into the Silex microframework. It was a hip thing to do at that time to have your own custom URL shortener, and since a microframework is a good fit for that, I decided to write my own shortener with Silex. As with LinkTuesday, the end result was good enough for me to actually put into production. For me at least. But again, the most important thing was that I now know Silex and knew when to use and when not to use Silex.

    And it goes on…

    You might be aware that I’m a big advocate for interoperability and using multiple frameworks in projects wherever it makes sense. I’ve done several talks on the subject. One of those talks I did with Enrico Zimuel of Zend Framework fame. We’d done a talk where we used some simple examples. Last year, we were going to do the talk again at the Forum PHP conference in Paris but we decided we weren’t happy with the examples. They were clear, but did not contain practical use cases. So we sat down together to write a prototype of an application that would actually use both frameworks, or in this case it would use Symfony2 and Zend Frameworks Apigility project for RESTful APIs. It took us a day of playing around, but we ended up with a prototype that worked and showed exactly what we wanted: That it is possible (and easy) to use the Doctrine entities from a Symfony2 project to create a RESTful API with Apigility. In the process of doing so, Enrico learned some stuff about the Symfony2 bootstrap (hell, I learned some things about the Symfony2 bootstrap), and I learned the basics of Apigility. Enrico even shared this knowledge in a blogpost.

    Failure is success

    The examples I’ve given so far are all examples of projects that actually made it to the outside world in one way or another. But there are many projects that I’ve started that either failed or that I just decided were not good enough. The thing with the prototyping approach is that failure is success. It’s not about the end result of the project, it’s about the process of building the prototype. It’s about using a new technology, about finding out how that technology works, how to solve the problems you encounter with that technology. It’s about gaining knowledge on which problems this technology solves, and which problems it doesn’t solve. As I mentioned before: The goal is not to become an expert, but to know when you should and when you shouldn’t use the technology, so that in a future project you can decide which technology you should use to solve the problem at hand.

    The business side of things

    Coming back to the agencies that said “we can’t all know everything about every (framework|CMS)”: Absolutely! However, you should be aware more of the world around you! Invest a couple of hours a week or even a couple of hours a month in working with a different technology so that you become more aware of other technologies. You don’t have to completely switch to a different technology, you don’t even have to master that technology, but just being aware that it exists is already a great asset for your company and your development team(s). You could even have different people look at different technologies and then present their findings to eachother. Or make it a competition: Have different team members build the same proof of concept with different technologies, and see which is the better solution. Enough possibilities to get more knowledge with a limited investment.

    Learning is key

    We work in an ecosystem that is ever changing, always evolving. New technologies come in to replace old technologies or to work side by side with the technologies we all love. It may sound cliché, but the snoozers lose in this world. Standing still is not an option. We need to keep learning. Forever.

  • Get rid of session files in an API

    January 31, 2014
    api, fosrestbundle, php, stateless, symfony

    A quick blogpost about building APIs with Symfony2 and FOSRestBundle, just so I won’t forget this and can always refer to this blogpost if I start wondering about this again…

    Some time ago I inherited an API project that was built on top of Symfony2 and the FOSRestBundle after the previous developer was unable to continue his work due to personal circumstances. I finished the project and everything was up and running fine. A couple of weeks ago, I got an e-mail from the customer because their systems had lots of issues. It turned out that the session-directory contained a couple of hundred thousand session files. This seemed odd, since there is a very limited web interface to this API.

    The first thing I did was pragmatic: I wrote a simple command to clean out the session directory from files older than 1 hour (since sessions typically last only a couple of minutes). This was the quick fix, but it didn’t sort the cause of the problem.

    This morning, I actually dove into the code to try and solve the problem. And the fix was literally a one-liner. In the firewall configuration, I just needed to add a single line:

    firewalls:
        wsse_secured:
            pattern:   ^/api
            wsse:      { nonce_dir: null, lifetime: 3600, realm: "Secured API", profile: "UsernameToken" }
            anonymous:    true
            stateless:    true

    The last line was all that was needed: It configures Symfony2 to work in a stateless way for this firewall. And stateless applications don’t need sessions. Such a simple fix, but it takes a short while to figure it out.

  • What makes a good conference great

    January 29, 2014
    community, conference, people, php

    TL;DR: The people and the atmosphere

    Context

    First some context: In the past months, I’ve been lucky enough to have been at both the PHPNW conference in Manchester, the TrueNorthPHP conference in TorontoMississuaga, and PHPBenelux in Antwerp. I’ve been to those conferences before and hope to be at them again in the future.

    Right after TrueNorthPHP ended, I tweeted:

    I’ve always said #phpnw is the best PHP conference in the world. #tnphp is a close second. #tnphp is the #phpnw of North America

    Quickly thereafter I made a promise, so here it is. It took a while, but if I promise something, I need to keep that promise.

    What makes a good conference?

    For a lot of people, the content makes the conference. And of course, the content is one of the most important things at a conference. You’re there to learn, so you need to have some good content, otherwise it’s all a bit useless. Well, not completely, but if the main purpose of a conference visit can’t be fulfilled, what are you doing there? Additionally, it’ll be very hard to get your boss to pay for a conference if there’s no useful content.

    I’ve been to a lot of conferences, and the content is usually excellent, but there is a lot of difference in how I experience a conference. This difference has hardly anything to do with the content. Looking at, for instance, Dutch PHP Conference, PHPBenelux, PHPNW, PHP[tek] etc, the content is similar. There’s minor differences, but you’ll see a lot of overlap in topics (and sometimes also in speakers). It is ultimately the people and with that the atmosphere of a conference that makes the difference for me between a good and a great conference.

    How to get the right people?

    Getting the right people, or actually the right mix of people, is not easy. It is a mixture of a number of things:

    • Select the right speakers
    • Keep entry prices low
    • Promote in the right places
    • Create more than a conference

    Funny enough, I’ve found that conferences with a big community-aspect to it have a much better feeling for this than commercial conferences with a marketing or profit aim. I think (but this is a guess) that this might be because the more community-involved conferences are run by more technical people, who know what technical people want.

    Select the right speakers

    The speakers should aim to reflect the full audience that you’re trying to reach. And no, I am not talking about gender, race, sexual preference or any of those things. They don’t matter. The schedule should reflect the topics you want to cover and the levels of developers you’re aiming for. If you’re aiming for architect-level visitors, it is no use to put up an intro to Symfony2. If you’re aiming for a conference where beginning developers and seniors/architects meet, make sure your schedule reflects this by putting up a mixture of all levels and topics.

    Keep entry prices low

    Keeping entry prices low is important for getting people in. Some employers don’t pay for the tickets of their employees, and self-financing some couple of hundred euro’s is hard. Sponsors go a long way in financing conferences, ensuring you can keep the ticket prices low. This is also where community-conferences have an advantage: They don’t need to make a profit. Their only agenda is to offer great content to as many people as possible. Commercial conferences of course can’t really change that, it’s just the nature of the conference. This does mean that community conferences are at a slight advantage here…

    Promote in the right places

    If you’re aiming for an enterprise conference, obviously you advertise in magazines aimed at CTO’s and big companies. If you’re focussing starters, there’s different places to promote. Get those usergroups on board in the promotions, find the right websites and magazines, etc. Usually, finding some key community members will do a lot towards getting in the right people.

    Create more than a conference

    Organizing a conference is good, but you should create much more than just a conference. It should be a full experience, including social events, a good treatment of speakers, delegates, sponsors and anyone involved. Or perhaps even better, as my friend Michelangelo put it last weekend at PHPBenelux: “We don’t want to create an experience, we want to create the Magic Kingdom.” He compared PHPBenelux to a Disneyland Park, and he’s spot on: From the moment you come to a conference to the moment you leave, you should be part of the conference, whether you’re a speaker, delegate or sponsor.

    Creating the magic

    There’s more than enough to write about this, but I’ll just give a few small pointers that I’ve seen happen at the earlier mentioned conferences, and that I’ve also tried to apply in the years that I’ve been part of the PHPBenelux and PFCongres crew:

    Pick up and drop off speakers at the airport/trainstation

    This is not hard, but it makes speakers feel really welcome and appreciated. It’s that little effort you put in that means speakers don’t have to worry about where they are going and how to get there. And while you’re driving anyway, if you are aware of delegates also arriving and you have some room in your car, just take the delegate along. This makes the delegates also feel as an important part of the conference.

    Don’t seperate speakers from delegates

    I’ve been at several conferences where there was a completely seperated speaker room. While it is awesome to have a place to sit down, plug in your laptop and work for a bit, usually speakers also want to mingle with the crowd. Instead of creating a seperate speaker room, why not just create a place to hang out for everyone at the conference, with powersockets and some tables and chairs. Offering a seperate room for speakers to get some peace and quiet is not a bad idea, but don’t make that room the only place where people can sit down and do some work.

    Create epic socials

    A social event at a conference is a place where people want to have fun, chat, laugh etc. Make sure that people get just that out of a social. Make sure there’s room for people to sit and chat, avoid loud music, and if possible, arrange some entertainment. Last weekend at PHPBenelux, there was a carnival in the sponsor area (every sponsor had something, for instance arcade games, coin pushers, air hockey, X-box). They even had bumper cars! Last year at php[tek], there was lots of Legos to play with. PFCongres had a gamenight. These are the things people enjoy at a conference. They are the difference between a good conference and an EPIC conference.

    Concluding

    In short: Every conference is in essence the same: Good content with good speakers. I’ve not yet been to a single bad conference when it comes to content and speakers. The difference is made in all those little extra’s. Spending a little effort on those extra things will make the difference.

  • That little detail in converting services.xml to services.yml

    January 10, 2014
    services.xml, services.yml, symfony, Symfony2

    Here’s a little detail that got me frustrated for a while. In the project I’m currently working on, we’ve decided to standardize on Yaml for the service configuration over the default XML. Since we already had a couple of bundles developed with XML, I needed to convert those configuration files to adhere to our chosen standard. This took me longer that it needed to, and I couldn’t figure out what the problem was.

    The problem turned out to be a tiny little detail that you easily miss. I converted all the keys and values of the XML literally when I converted to Yaml. However, there is one key that needs a small change. When you use the repository-class in services.xml, this needs to be updated to repository_class in the Yaml version. Apparently, Yaml doesn’t really like the ‘-‘ and so wants an underscore.

    It took me quite a long time to figure it out. Now you know. Don’t make the same mistake! 🙂

  • I’m sorry: An open letter to Elizabeth Naramore

    November 14, 2013
    community, conferences, liz, TRUCEconf

    Hi Liz,

    I was going to send this letter as an e-mail, but as I was writing the e-mail I felt it necessary to turn this into an open letter. Everybody should see this, and be aware of this. Everyone should stand up to support you. Openly, not just in private.

    It is amazing how much crap you’re getting for TRUCE conference. I am truly sorry for this. This is not the community I thought I was a part of. It has honestly been a huge surprise how much negativity there is in the world of PHP and tech.

    Last weekend at TrueNorth I attended the Open Sourcing Mental Illness-talk by Ed Finkler, and one of the most important lessons I took away was to be empathetic and to focus on positivity. The people that go about hatin’ clearly have never heard of this. On the other hand, you clearly do know, as TRUCE is a perfect example of this.

    For what it’s worth, I highly respect you for standing up against inequality and all the problems the tech community has. If only I had the finances, I would immediately book my flight to the US and ensure I’d be there. Unfortunately that won’t work, so instead I tried to help you fund the conference with a small donation. Aside from that donation, I would like to really make it clear that I love what you’re doing and I highly respect the things you have done, do and hopefully will keep on doing for the PHP and wider tech community. And though I can’t really speak for everyone in the PHP community, I know for sure that many agree with this.

    Please Liz, don’t give in to the hate. That would mean the haters win. And haters should never win. It is the love and passion for solving a problem together what makes the Open Source community so great. Usually we focus on technical problems and coming up with technical solutions, and now we’ve got a social problem at hand. As many have said in response to the hate-storm after the TRUCE announcement:

    It's better to try and do something than to just sit by and do nothing to solve the problem

    And so, dear Liz, I want to thank you for trying to do something. TRUCE conference can, at worst, result in a good get together where attendees will start understanding each other just a bit better. In the best situation I can think of, it can spark a movement that will change the tech community to be one that is more inclusive, more empathetic and more understanding. Liz, you ROCK.

  • Indexing BLOB fields in Solr

    November 5, 2013
    blob, mysql, solr

    Just a quick blogpost today about Solr. If I help someone with this post, good. If I help myself to remember this, good.

    In a project I’m currently working on I’m stuck with a legacy database where I can’t change the fields for fear of breaking a legacy application that is using the same data. One of the fields in the database that I need to index with Solr is a MySQL BLOB field. I initially just indexed it as is, but that resulted in odd codes instead of the actual text:

    B@61bf2ef8

    Since I use the DataImportHandler instead of writing my own indexing scripts, I can’t do the conversion myself, so I needed a simple way to convert the BLOB to a usable text somewhere in the indexing process. Of course, Google and Stack Overflow come to the rescue. Thanks to this answer to a question about this topic, I know that it is actually quite easy.

    select CONVERT(Text USING utf8) as description FROM Book where EAN='${bookproduct.id}'

    That’s it! Now, instead of the odd object codes as above, I actually index the text-version of the BLOB field.

  • Signaling PHP

    November 1, 2013
    books, cli, php

    Very recently, elePHPant herder Cal Evans released a new book: Signaling PHP. The book is about handling signals when writing PHP CLI scripts that are long-running scripts. One could think of a daemon-like script, a long-running importer script or similar applications. I considered reading it on my flight to TrueNorth, but since I was waiting for my upgrade to Mavericks, I decided to read it before that already. This post gives a short review of this book.

    Long-running commandline scripts

    The first thing I need to say is that I’ve written quite a few commandline scripts in PHP before, but never have I written long-running commandline scripts. One of the reasons for this, though, was that PHP has never been suitable for those kinds of things. Memory issues alone would stop me from doing this in PHP.

    However, as Cal writes about the release of PHP 5.3 (and above):

    Now though, we can write processes that span days or weeks. (…) Things that I once had to use a low-level language to do, I could now do with my old friend PHP.

    Since I’ve not yet actually done this kind of scripting, and I don’t have experience with it, this book was interesting enough to read. It has taught me stuff I can remember when I do get to the point where I want to write something like this.

    Focus

    Before I go into the actual content of the book I must say that I really like the approach Cal took with having a very specific focus of the book. This book is just about a single topic. This is not “Commandline applications in PHP”, but even more specific. It is only about catching signals sent to commandline applications in PHP.

    The reason why I like this is that I was able to finish the book in less than an hour. There’s 34 pages, and that includes the title page, the dedication page, the Leanpub info page and some other non-content pages. Given the amount of “free” time I have, I like this approach because I’m much more inclined to pick up my iPad and read the book.

    Structure of the book

    The structure of the book is the only sensible structure. First setting up the project, then start with basic capturing of signals, and then moving on to the best practices. I also like the appendix about working with PIDs to make things even more clear. I personally don’t see the use of Appendix B, which contains the full code sample of the command-class, since this code is also available online in a Github repository, but ah well, perhaps someone else has use of this.

    The content

    Obviously, I am very happy to see Cal using the Symfony2 Console component for his code samples. Not just because I love Symfony2, but also because it is an implicit reminder to people that they should not try to reinvent the wheel, but should reuse existing components. And an additional bonus is that this book is a great example of using just a single Symfony2 component instead of the full framework.

    The example is a very simple, basic example. This is obviously very useful since the purpose of the book is to explain a very specific topic. It is inspiring me to look beyond the basic example and start experimenting with other scripts that may want to catch signals. What I do think could’ve helped to give a better overview of what you could do with long-running scripts is to give some examples of what you could use it for. I like the examples in chapter 6 of what you can do with the signals, but I miss some examples of what you can do with long-running scripts.

    I don’t use long-running scripts, why would I get this book?

    The fact that you haven’t written these scripts is exactly why you should get this book. This is not your average 1000-page reference guide that you’ll have on your desk when you’re developing complex applications. This is the book that introduces you into the world of signal handling in PHP. This is probably the fastest way to get the knowledge in your head so that once you really start needing the functionality, you already know it exists and you won’t even consider trying to write your own way of doing things. And given the fact the book is available for a suggested price of under $5, this is the best-value you’re going to get for getting this knowledge. Recommended reading for everyone.

  • How to get the most out of a conference

    October 25, 2013
    community, conferences, learning, php, phpnw

    At the most excellent PHPNW conference, Kat convinced me to deliver the first unconference talk of the day. It took me a while to get the right topic. I ended up with a topic I felt everyone at the conference could use for the rest of the two days that they were there: How to get the most out of a conference. For those that were not there, I want to try and put my unconference talk into a blogpost, so that everyone can use this information for their next conference.

    Learn from the best

    This is the most obvious part of visiting any conference: Attend the talks of the conference. Make a list upfront based on the published schedule of the talks you want to see. It’s good to give these talks some kind of priority-grade: Make a list of the talks you really want to see, the talks you think might be good and the talks you could attend if there is nothing else to do. Why? Because there’s so much more going on at conferences. I regularly skip talks that I marked as talks I wanted to see because of a variety of reasons, many of which I’ll talk about later in this blogpost.

    One of the most important: Keep an eye on the unconference schedule if there is one. Usually, the unconference schedule isn’t available before the conference starts, but there might be a talk in the unconference that you really want to see. If it is scheduled against one of your “I really want to see this” talks, then you could skip the unconference talk, but if it is scheduled against a “if there’s nothing else, then I could visit this”-talk, then it makes the decision to skip that talk and go to the unconference a lot easier.

    Learn and meet the best

    Talk to any regular conference-delegate and you’ll find out one of the most important aspects of every conference is the hallway track. This is an informal track taking place in the hallway, which usually consists of people meeting eachother, talking about their work, their open source projects, or any other topic that might be interesting. It’s the best place to meet up with the speakers or the other delegates. Meeting them can be useful because you might have an interesting discussion with them, but it’s also useful when you get back to your office. People are much more inclined to help people through Twitter, e-mail or IRC when they’ve met someone in real life. So even just meeting someone for a couple of minutes may already be really useful.

    Sponsors are your friends

    Any conference with a sponsor exhibit has a place to meet awesome people, discover new technologies and most of all get you free stuff. Sponsors are your friends. In the first place because their financial contribution to the conference means your ticket price stays low. But aside from that, the sponsor exhibit is where you can see what cool tech your sponsors work with, what products they have to offer, and also what job openings they have. Even if it doesn’t directly benefit you, it may at some later point: You might find a cool new job, encounter new software that may help you solve a future problem, or find your new favorite shirt to wear.

    Find your new colleagues (or new friends)

    If you are hiring (or your boss is), chances are you might meet your new colleague at a conference. The first time I met Mike van Riel was at Dutch PHP Conference. Back then, his employer was hiring and I was looking for a job, and I ended up working for that company. Now, it’s the other way around, he is working for my company. We also regularly play D&D and have become good friends. So don’t just stick with people you know already, but go out and meet new people.

    Socials!

    If you’re looking to meet new people (or hang out with your friends), be sure not to skip the social events. Whether it’s drinks, a game night, a beer tasting, or whatever other social events a conference organizer can think of, attend it to both have some fun and meet people.

    The backchannels

    While at the conference, don’t forget the backchannels. Twitter and IRC are both valuable channels for communication while at a conference. You might find out about cool technology by people who are attending talks you aren’t watching, you might find out about cool talks later in the day that get recommended by other people, or just talk about the cool stuff you are discovering at the conference. Be sure to be an active participant in the backchannels.

    Feedback is important

    The benefit of leaving feedback on joind.in is not a direct benefit. Some conference might raffle goodies to people who left feedback, but leaving feedback is more of a long-term benefit: It allows the speaker to improve their talks and it allows conference organizers to pick the good talks out of all the submissions they receive for their conference. Also, if you give feedback to the conference organizers, next year’s conference might be even better because they may be able to act upon your feedback. Don’t just leave positive feedback. Constructive criticism is just as valuable (or possibly even more valuable) than just praise. Don’t be afraid to leave such constructive criticism: Both speakers and conference organizers are usually quite happy to receive this kind of feedback because it helps them improve. If you’re really scared, you can leave the feedback anonymously on joind.in, or leave it in private on joind.in. Of course, you can also just talk to the speaker or organizer and give them the feedback directly.

    Hack away!

    Some conferences organize hackathons, either seperately or as part of a social event. Hackathons are a great way of improving your own skills by becoming part of a (temporary) team of developers working on open source projects. It is also good for your reputation in the community, since you actually contribute to open source projects and show off your own skills. Don’t be afraid: project developers won’t bite, and they’ll gladly help you get up-and-running with their project. Every little bugfix is welcome!

    Start speaking yourself

    If there is an unconference and you would like to get started with speaking yourself, the unconference is a great way of doing just that. The unconference is much more informal, and people will give you good and honest feedback on your talk. Usually, unconferences take a slightly wider range of talk subjects than the main conference, and most of the time it’s possible not to have to fill a complete 50-minute slot, usually there’s room for short (lightning) talks or have talk slots, so you can even prepare a short talk while you’re at the conference. If you’re interested in speaking, be sure to be on the lookout for the unconference.

    Be active and involved

    Most important is to not just show up and sit in the talks. Be active and involved as a delegate. Ask questions, talk to people, be an active part of the conference. That makes the conference a better place and will benefit you as well! I’ll see you at the next conference!

  • Community is more than PHP. It is the world.

    October 11, 2013
    community, kiva, micro-financing, php

    This blogpost has been on my TODO-list for a couple of YEARS now, so I thought it was time to finally write and publish it. It is actually not at PHP, but I hope all you PHP devs do stick with me and read the whole blogpost, as I think it is about a topic we all care a lot about: community.

    Community is a term that can be interpreted in many ways. Within the global PHP community we have national communities, regional communities, local communities and communities based on other properties: Which technology you work with, which gender you are, etc. I would like to invite you to look beyond any of these communities, and look at the world around you. Not just the town you live in, not just the country you live in, but at the whole world around us. If you put effort into (or get something out of) the PHP community, why would that not work on a more global scale as well?

    I made my first microfinance loan on July 2nd, 2008. I came by Kiva through a friend, and decided to invest $25 into a restaurant in Cambodja that needed expanding. After about 14 months, the $25 I had put into the loan was back into my account. After the money was back into my account, I immediately made another loan, this time to a farming group trying to employ the young villagers. A couple of months later, I decided it would be good to invest more, not keep it with the $25 I had invested, so I put in another $25. This time round, it was another farmer, but from the Philippines (currency: PHP!).

    By now, I’ve made 20 loans, and invested a total of $100. Out of the 20 loans, only one loan failed to fully pay back the loaned amount. I’ve been lucky so far I guess. Yet I keep on giving out more loans. The thing is: $25 is not much for the average PHP developer. Our rates and wages are pretty high. We can usually spare $25. Or $50. The average Kiva user has invested $43.40, if I understand the numbers correctly. The average PHP developer should be able to get that average up a bit.

    With the $100 I’ve invested, I’ve now given out a total of $500 in loans. Isn’t that amazing? With a little bit of money, I’ve helped many projects get funded.

    I know there are already many PHP devs on Kiva. There are currently 27 members in the PHPeople team and 13 in the Symfony Team. I’m pretty sure there are other teams as well related to PHP. I would like that amount to grow. As a PHP community, let’s try and give something back to the whole world, not just our own community. I realize there are many people inside our community that can be helped, but let’s also look beyond our language, our country, our neighbourhood.

    I made a loan yesterday to a lady that wants to start her own business. Why don’t you also sign up to Kiva and put in some money. Even if it is only $25, you will help someone realize their dream, help someone improve their own life. For only $25.

  • Forcing a date on your Vagrant box

    October 8, 2013
    date, debugging, vagrant

    I recently received a bugreport from a client that was very hard to debug: There were only very specific moments where the bug was reproducable, and those moments were usually in the weekend. So I decided to change the date on my Vagrant-boxes for the API and website to last Sunday to try and reproduce the problem. 

    “`
    [01:24 PM]-[vagrant@dev]-[~]
    $ sudo date –set=”6 OCT 2013 15:20:00″
    Sun Oct  6 15:20:00 UTC 2013
    “`

    After updating the date and refreshing the page, the bug did not actually occur. Odd! Going back to the Vagrant shell, I found out, however, that the box had switched back to today’s date. A quick Google search hinted at stopping the ntp service, so I did:

    “`
    sudo /etc/init.d/ntp stop
    “`

    I tried again, but again, it didn’t work. After more Googling around I could not find the solution, so I decided to ask my friends at [Dutch Web Alliance](http://www.dutchweballiance.nl/) to see if anyone knew. After some discussion, we concluded that it was probably VirtualBox automatically updating the time. That sort of makes sense of course. Now, how to configure Vagrant to not do this. [Joshua](http://twitter.com/JayTaph) came up with the solution:

    “` ruby Configure VirtualBox to block it from automatically updating the time on the VM
        v.customize [“setextradata”, :id, “VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled”, 1]
    “`

    Now, after reloading my Vagrant boxes and again setting the date, I was able to reproduce the bug my client reported! 

Previous Page
1 … 13 14 15 16 17 … 61
Next Page

skoop.dev

  • Bandcamp
  • Mastodon
  • Bandcamp