PHP Classes

Should PHP be Copying the Java features and practices? Lately in PHP podcast episode 29

Recommend this page to a friend!
  Blog PHP Classes blog   RSS 1.0 feed RSS 2.0 feed   Blog Should PHP be Copying...   Post a comment Post a comment   See comments See comments (5)   Trackbacks (0)  


Viewers: 8

Last month viewers: 2

Categories: Lately in PHP Podcast, PHP opinions

Particularly since version 5.0, PHP has been copying many of Java features and practices of Java programmers.

This means that if Java programmers practices tend to be bureacratic and less productive, PHP programmers that use those features or adopt those Java practices may also become less productive.

This was one of the main topics discussed by Manuel Lemos and Michael Kimsal on the episode 29 of the Lately in PHP podcast.

They also covered the proposals to implement Java generics in PHP and the class property accessors, and an article on accessing APIs using OAuth without much complication.

Listen to the podcast, watch the podcast video or read the transcript to learn more about these and other interesting topics going on the PHP world.

Loaded Article


Listen or download the podcast, RSS feed and subscribe in iTunes

Watch the podcast video, subscribe to the podcast YouTube channel

Read the podcast transcript

Click on the Play button to listen now.

Introduction music Harbour used with explicit permission from the author Danilo Ercole, from Curitiba, Brazil

View Podcast in iTunes

RSS 2.0 feed compliant with iTunes:

In iTunes, use the Subscribe to Podcast... item of the Advanced menu, and then enter the URL above to subscribe to this podcast.

Watch the podcast video

Note that the timestamps below in the transcript may not match the same positions in the video because they were based on the audio timestamps and the audio was compacted to truncate silence periods.

See the Lately in PHP podcast play list on YouTube and Subscribe to this channel there.

Show notes

Introduction (0:21)

PHP 5.4.8 and PHP 5.3.18 releases (2:11)

Having Java-like Class Generics in PHP (11:33)

PHP Class Property Accessors proposal (26:01)

Do we really need to copy Java and always use setters and getter functions in PHP classes? (36:09)

Article Painless OAuth in PHP (44:24)

Latest JavaScript Objects published in the JSClasses site (50:39)

PHP Programming Innovation Award of August 2012 (57:00)

Conclusion (1:08:03)

Introduction (0:21)


Manuel Lemos: Hello and welcome to the Lately In PHP , this is episode 29, and this time we have a special guest lowercase D or shall I say special K?

Michael Kimsal: You can say whatever you want. Good morning.

Manuel Lemos: Hello! Michael Kimsal. The one and only.

Michael Kimsal: Yeah. There's actually two of us.

Manuel Lemos: Our favorite... Really?

Michael Kimsal: Yeah, there's two of us, yes.

Manuel Lemos: You think so?

Michael Kimsal: Michael Kimsals, I mean. Whoa. Well, that broke. OK.

Manuel Lemos: Hello, Michael. What are you doing?

Michael Kimsal: Hi. I'm fine.

Manuel Lemos: Right. Was that a consequence of the hurricane Sandy?

Michael Kimsal: No, no. She blew on by without much a do here. It's pretty bad up in New York. I got a little family up there and my wife she's actually up in Philadelphia as we speak, but the area that she was in did not get terribly affected, they had power, and gas, and all that.

Manuel Lemos: So this year it did not pass in your state?

Michael Kimsal: We got a bit of rain. It hit the state, but just on the coast which is...

Manuel Lemos: Far?

Michael Kimsal: I don't know, I can't think right now, but it's. I'm in the middle of the state so I'm probably three hours from the coast. So we just got a lot of winded rain and grayness.

Manuel Lemos: Well, that's great because that was useful as you were able to fill in for Ernani that is still having problems with his internet connection.

Michael Kimsal: We miss you, Ernani.

Manuel Lemos: Yeah. In fact he is...

Michael Kimsal: How do you say that in...

Manuel Lemos: Miss you, probably Saudade. Saudades.

Michael Kimsal: So dads?

Manuel Lemos: So that's, it's plural.

Michael Kimsal: So that's...

Manuel Lemos: Never mind.

Michael Kimsal: OK. I mean one dad, but he could have two dads, that's OK nothing wrong with that.

PHP 5.4.8 and PHP 5.3.18 releases (2:11)

Manuel Lemos: Yeah. Well, any way it's great to have you because well have been PHP programmer and then...

Michael Kimsal: I get that all the time.

Manuel Lemos: You will be able to comment on many topics that we will be covering this episode. I think we can start from PHP 5.4.8. It was released like..

Michael Kimsal: A couple of weeks ago.

Manuel Lemos: Yeah. We are recording it, it is a bit delayed, and it was released along with PHP 5.3.18, there is this always spare of releases since a few releases ago.

Well, I do not see many relevant things here except for bugs. There is nothing better was broken, I hope in terms... or at least major fixes that were important to comment. Well Michael, have you been using PHP 5.4?

Michael Kimsal: Everyday, even in my sleep I'm using it. Yes, I really upgraded just about two weeks ago, three weeks ago. So I had a virtual machine that I put 5.4 on just to mess with it, but I hadn't done anything production on it.

I switched servers that I'm managing that I upgraded to 5.4 and you know, I didn't run any benchmarks supposedly some of it is a lot faster.

I haven't run it through any paces, but the one thing that I have started to do a lot just in the past few weeks is using the short array syntax.

Manuel Lemos: Yeah.

Michael Kimsal: I wish it could be shorter, but you take what you can get. Seriously I wish it could be shorter, but just take what you can get and it's a good. It's nice.

Manuel Lemos: Yeah. So it's like you save typing the word array?

Michael Kimsal: Yup.

Manuel Lemos: And just put the brackets?

Michael Kimsal: Yup.

Manuel Lemos: How does that feel? Are you much more productive at all?

Michael Kimsal: It's heaven. It's like the pearly gates, so just coming through my fingers there. That's a horrible analogy, but it's still fun and good. I enjoy it.

Manuel Lemos: It's more confusing because you don't know if that is a bracketed expression or is it truly an array.

Michael Kimsal: No. What would a bracketed and expression be? I've never seen.

Manuel Lemos: Grouping....

Michael Kimsal: But you don't do the square brackets for that?

Manuel Lemos: Yeah.

Michael Kimsal: It's square brackets.

Manuel Lemos: Oh, it's square brackets for some reason I thought it was the wrong brackets.

Michael Kimsal: No.

Manuel Lemos: Well, anyway other than that, did you notice any differences worth the worries of those that are afraid to upgrade?

Michael Kimsal: I didn't, no. Again, the speed is supposedly a lot faster for some things. I haven't benchmarked it, but I certainly didn't notice any. I didn't notice any problem going. I think. I don't know if it was on 5.3.13 or something and I got a new repo well a couple of Linux servers and went up to 5.4 something I don't know? 5.4? What's the latest on 5.4?

I'm probably on 5.4.5 or 5.4.6 or something. So whatever. It was a few weeks ago. So I like it. I haven't gone overboard doing much 5.4 specific stuff other than the short array syntax, but that's enough for me. Now all my code is 5.4 I can't go back.


Manuel Lemos: Until you realized, oh, there is this extension missing. Do you use any PHP code cache extensions?

Michael Kimsal: I have on some projects. I'm managing a few servers. I don't remember offhand if any of them have any sort of a code cache. I don't think any of them do right now.

It's something that would probably in the next few months need to put on and the one that I'm thinking it was once I am thinking of was moved to 5.4, but there's no 5.4 code running on it. There's not PHP code that machine, it's running 5.4, so if we have to go back to 5.3 we could.

Manuel Lemos: Yeah. Well, the extensions are available at least... we talked about it in the previous episode there is the PHP well it was changed the name, it's eAccelerator, I think latest version already runs on PHP 5.4. APC there is this all this eternal struggle whether APC is ready to be shipped with PHP or not, whether it will bother somebody or not.

So I think the way things are going APC will never be ready for whatever version of PHP is because there is always an objection to put it in the distribution.

Michael Kimsal: PHP is objection oriented it seems not object oriented. Yes you can do that. I need to go turn on my lights so keep on talking, but I'm going to take my...

Manuel Lemos: Yeah. Well, about PHP 5.4, another thing that we also mentioned in the previous episode is regarding this...


Michael Kimsal: Oh, I can hear you now. Hi.

Manuel Lemos: Now we are back to the 80's.

Michael Kimsal: It's a little bit before your time.

Manuel Lemos: Well, I would say maybe not that so much before. Anyway, I was saying about PHP 5.4 the greatest improvement is actually the access to objects.

As long as you declare all the variables in the object it will no longer use a hash table, it could use a sort of fixed array of methods or actually variable names, so it will be much faster to determine where is the value of the variable or to store that variable.

But for you to notice that in brackets you would have to do a lot of variable access in the same class, in the same script. So in practice you probably you will not notice much this difference.

Michael Kimsal: Yeah. I say, in general the few things that I've done over the years where when I've used an accelerator for example or there's been some patch to PHP, this makes everything a lot faster.

A lot of times I haven't noticed that much faster and I think it is just because generally I tend to write kind of minimal code, maybe I'm using some large frameworks sometimes, but the code I write tends to be if not optimized, I won't say I'm always great enough to make super optimized code, but when APC and the Zend code cache stuff came out, people were saying, "Oh, we're getting 300% improvement or 500% improvement."

Manuel Lemos: Yeah.

Michael Kimsal: That must have meant that your code was really, really, really bad in the first place, I think.

Manuel Lemos: Well, the cache is more for large portions of code. If you have many classes being used in the same script, loading all of them and compile them because they become compiled in memory, will take a lot of time and if we do not use a cache there is this overhead on each request that a cache would avoid.

That's the advantage, but you're probably right that you will only notice that more in a busy production server.

Michael Kimsal: Yeah.

Manuel Lemos: So the code itself will not run faster if using a caching extension, maybe except if you also enable optimization options that will somehow rearrange the compiled code.

But even those are problem not very much noticeable because what PHP scripts tends to do most of the time is do I/O accesses like databases, files and most of the time the script is not doing anything except for waiting for the database to return the results.

When you are waiting you cannot wait faster, it depends on something else like database server or your file system. So that is why sometimes all these arguments of performance of code are...

Michael Kimsal: Silly?

Manuel Lemos: Yeah. I think you put the best word to describe it.

Michael Kimsal: Yeah.

Manuel Lemos: But people like to I think there's this macho developer saying like I am faster than you. Well, I earned like 4 CPU cycles I'm the best although nobody notices...

Michael Kimsal: Yeah.

Manuel Lemos: ... 4 CPU cycles well. Anyway, for people that are passionate about this performance topics it's always interesting to know exactly what you gain or not with these enhancements.

Having Java-like Class Generics in PHP (11:33)

Manuel Lemos: Well anyway, moving on to the next topic. One thing that I wanted to comment including in the section on which we comment about stuff like proposals for the upcoming PHP versions.

There was this proposal a new feature, well, I'm trying to increase the font here... Probably increasing it will not even make you read it now in the video, but anyway there is this proposal by Nikita. I forgot his last name. I'm not sure if it is...

Michael Kimsal: Yeah. It just says Nikita.

Manuel Lemos: Well, in the message, yes.

Michael Kimsal: And the door, yeah.

Manuel Lemos: Anyway, the proposal is to implement the so-called generics in PHP. Michael, are you familiar with this generics thing?

Michael Kimsal: I have to say, even though I do some Java work, I'm not really familiar with it. I remember a few years ago Java 5 had generics.

Manuel Lemos: Yeah.

Michael Kimsal: It was a big deal. And I'm reading the description right now, if I want to validate all insertions or need to create CommentCollection class, extend it from Collection, override all the methods, adding new elements to collection. I can't have any hints from my IDE about type of collection's you have...

Manuel Lemos: Yeah.

Michael Kimsal: Collection<T> implements Traversable

Manuel Lemos: Well, this are basically templates of code that's what generics all about.

Michael Kimsal: Yeah.

Manuel Lemos: Templates is the name they gave in C++ if I'm not mistaken because I confess I never use this anything like this in any language.

Basically what you can do is define a template here, and there are some template marks like this T thing than this T thing gets replaced in other places if I'm interpreting this correctly.

And there are sort of placeholders. If you work with templates in PHP this is not accepted templates of output of your pages, but are rather templates of the definition of your classes.

So, with one template you can define classes for different types of similar objects but they are not the same, you cannot phrase it.

Michael Kimsal: Yeah.

Manuel Lemos: I think its collection something, it could have collections of comments, so you define a template like this and then you create a collection of comments like these. And these comments get replaced on this T.

Michael Kimsal: Yeah. I see it here all because I've seen this in Java, but I've never seen it in explanatory way in that set.

I've never actually look forward either and it could just be that I use when I'm using Java, I'm generally using Groovy which is a dynamic language anyway and it's usually not that much of these sort of stuff that I would need to do.

Manuel Lemos: So Groovy supports generics too?

Michael Kimsal: It does because it supports Java.

Manuel Lemos: Yeah.

Michael Kimsal: It is effectively Java. It will compile down, it has the same syntax. So anything that JDK supports, Groovy supports, but it's not been something that... I've been doing Groovy for four years and it's never something that I've had to do. Some of the libraries in my frameworks, in my Java frameworks might be using that.

And if it was in the language I'm sure I'll probably get it used a lot in some of the major frameworks, but does somebody... will this change the way a lot of people write their PHP even if this was implemented it would probably be years before that had any substantive effect.

Manuel Lemos: Well, from the discussion that happened in the internals mailing list... let me see if can show the... there were quite a few comments like about 20.

Well, from what I understood this is not very well acceptep a proposal. Actually it was even interesting that the first comment that appeared is one from Rasmus Lerdorf like saying, "We don't want this stuff in PHP."

Michael Kimsal: Oh I didn't see that was Rasmus.


Manuel Lemos: Yeah. Well, Rasmus is a quite straightforward person, he does not spend much time detailing his comments "Personally I would hate to see this anywhere near PHP"

Michael Kimsal: Yeah.

Manuel Lemos: It's practically a nail in the coffin of the proposal. Anyway, obviously it's not just Rasmus that matters, although it would be interesting to learn why he was opposing to the idea. I think he has not comment anymore in this wall thread, just said that. Do you think a proposal like this would have any interest in PHP?

Michael Kimsal: Me personally?

Manuel Lemos: Yeah.

Michael Kimsal: I don't have much interest in seeing it. There's many other things that I would prefer to see and I should probably shut up and put my money where my mouth is.

I had actually started an RFC a few years ago and I didn't touch it in about a year, it looks like it was deleted from the Wiki.

But to me there's other things that we could add to language or modify the language that would give a bigger benefit to more people.

It's not that there's absolutely no use cases for generics at all, it does seem to fly in the face of a you know, what is still effectively a more dynamically tight-loose sort of language?

Manuel Lemos: Yeah.

Michael Kimsal: But if it was there when I used it, probably not. I don't use goto.

Manuel Lemos: Well, if you said that even in Java or Groovy do not use generics? Why would you use them in PHP, right?

Michael Kimsal: Yeah. I think there's, specifically in Groovy, people would probably more likely if they wanted to use the Groovy language, they would probably do a metaprogramming more than adding and having strong metaprogramming capabilities in the language itself would be far more preferable if we were only going to have one thing, I'd prefer dynamic metaprogramming over adding generics for example.

Manuel Lemos: Yeah. Well, somehow these generics is also a metaprogramming, but the question is will this ever be useful to anybody?

Because the way I see it what generics would allow for you to reduce some code by avoiding some boilerplate, repeating some templates of code , having to type them yourself by finding a master template of collections of comments, collections of those, collections and something else like this is an example not that generics are just about collections.

And what you can do with generics, I think you can already do somehow with interfaces and also now with traits because you can reuse parts of code from other parts.

Michael Kimsal: I was really, sincerely wondering if again, I'm not an expert enough of this to speak authoritatively, but would traits have any... would they play any part in making this easier to do? Solving some of Nikita's problems in the first place.

Manuel Lemos: Well, traits is just a way to reuse chucks of code defined somewhere that perform a task that you see as a pattern being repeated in different places or else traits will not be source of reuse. If you don't use it at least more than once, why would you define some code there.

And somehow same goes for interfaces because interfaces is define... although interfaces are more to define APIs not exactly implementing them, defining the code, you can also do that.

All these structures in the language could be used or not by the developers, but in my opinion people have more simpler needs than these sophisticated thing, generics/templates, I mean that is what they are called in C++.

And now traits are also a hard time figuring many people that would use traits, although in PHP classes there are already a few packages that people used traits to define for some purpose. I do not recall exactly what it was, but I thought it was recent.

There will always be people that find uses for this, but I think the vast majority of the developers will not find great use for this and...

Michael Kimsal: Can I show you what I would prefer to see? And this kind of gets into your other, your sort of class access and the debating stuff. If I share some code to group chat does that get recorded?

Manuel Lemos: No. You have to screenshare it because it only shows video.

Michael Kimsal: I'll screen share it. Can you see that? I want to make this a bit smaller.

Manuel Lemos: Yes you can.

Michael Kimsal: Yeah, can you see that?

Manuel Lemos: Well, I can see it. I'm not sure if in the recording it will be visible.

Michael Kimsal: I'll make the font bigger, is that better?

Manuel Lemos: Yeah, it's improving.

Michael Kimsal: OK. I'll make it even bigger.

Manuel Lemos: Can you add a few lines on the top because Google is putting their Google+ logo over your code.

Michael Kimsal: Yeah.

Manuel Lemos: That's better now.

Michael Kimsal: Yeah. I would love that.

Manuel Lemos: What would be...

Michael Kimsal: I would love to be able to add a method onto an object like that.

Manuel Lemos: Say, it's a function? So you assign.

Michael Kimsal: That's what I want to be able to do.

Manuel Lemos: Do you want to explain it?

Michael Kimsal: Well, I've got an anonymous function here, a closure say, so if I just say, say, 'Hi there and die', I should be able to, yeah. So say itself is an anonymous function or closure whatever you want to call it. I've got a class here called user. I'm going to make a new user, I'd like to be able to add on to this particular instance of user and say that 'say' is a function or is a closure and then let me invoke it.

Manuel Lemos: OK. So when... oh, you mean dynamically add functions to a class?

Michael Kimsal: Or an object either an entire class definition that would be something too to be able to say something like say. Either one of those would make my year in PHP.

Manuel Lemos: I wasn't really, if that wasn't already possible somehow.

Michael Kimsal: Well, no. Certainly this code is not.

Manuel Lemos: Yeah, right. Probably not with that syntax.

Michael Kimsal: I've not seen a way...

Manuel Lemos: With all these closures things.

Michael Kimsal: Now I bet I could do this directly.

Manuel Lemos: Some brackets there.

Michael Kimsal: Now I bet I could do this directly hold on. You say, 'say'. No, even that doesn't work.

Manuel Lemos: Well, what was that? Say is a function?

Michael Kimsal: So not even trying to make it a reusable closure just saying...

Manuel Lemos: Just like you do in JavaScript, right?

Michael Kimsal: Yeah, or Groovy. So somehow I can just make that into a variable and I can invoke the variable, but I can't just assign that to a property and then invoke the member variable I should say, not property.

I can't put that in a member variable and have that work. So anyway, it's kind of off topic, but to me I have loads of use cases for that. That would make my life a lot easier and I think it would open up lot more. That's the sort of metaprogramming I'm talking about. Let's dynamically be able to modify classes or particular objects at runtime and add our own.

Manuel Lemos: So what would be your compelling use case for that? How do you use that in practice?

Michael Kimsal: Well it would let me make sure that anything that I wanted to do whatever I want to do with an object I can do even if I don't have access to the source code or even if I can't modify the code ahead of time, but that same method in one case I might want to pass it a closure that also does logging, but in other cases I don't wanted to do that or I want to pass it. I want to have two or three different closures based on the type of request that it is and say, 'My user does this'. I'm not giving you...

Manuel Lemos: You're replacing a variable with a function, right?

Michael Kimsal: Well, I'm not replacing anything. There isn't anything right now.

Manuel Lemos: Oh, OK.

Michael Kimsal: But let's say that there was a function called 'say', already that did something, let me replace it with something else at runtime.

Manuel Lemos: Yeah. I see what you mean. You want to override the functionality of a class, but just for this specific object?

Michael Kimsal: Well, either for that specific object or maybe for all of them, but I don't want to go change the code or I can't go change the code. Somebody says give me bytecode, that's all I have.

Manuel Lemos: Yeah.

Michael Kimsal: I have cached stuff I can't do it. Let me dynamically modify this at runtime and we can't do that.

Manuel Lemos: You want to have prototype functionality...

Michael Kimsal: But we can't do it in JavaScript, we can do it in Ruby, we can do it in Groovy, we could do it in pretty much every other language.

Manuel Lemos: I supect that this is possible, but probably not with this syntax.

Michael Kimsal: I don't think it's possible at all, but I guess what I'm getting at is it's a philosophical divide.

I would like to see PHP as a dynamic language continue to embrace more of the dynamic things from other dynamic languages. And the idea of what the generics is doing is saying, let's try to import or take the culture of the statically type languages more so than the dynamic stuff.

Manuel Lemos: Yeah. I see what it mean.

Michael Kimsal: Anyway, I'll stop sharing that.

Manuel Lemos: More flexible.

PHP Class Property Accessors proposal (26:01)

Manuel Lemos: Well, this probably ties with the next topic on another proposal. Let me screen share it here which is a proposal by Clint Priest RFC that was widely discussed in the PHP internals Property Accessors for syntax.

He wants to have a different syntax to define setters and getters for certain variables. Basically what it defines is a variable here in this case named however, that if you want to get its value, if you define a function to get its value, and if you want to change its value, it would be a different function.

Michael Kimsal: I thought this was already decided? I thought this had gone through the RFC process and it was already going to be implemented in PHP 5.4 or 5.5?

Manuel Lemos: Well, I do not see the vote here.

Michael Kimsal: See I saw this about a year, actually it was beginning of the year on Reddit I saw Clint Priest wrote and he said, "Oh, I got this through and this is going to be in the next version of PHP.

Manuel Lemos: Oh, yes. This is the initial version that is mentioned here is December 2011.

Michael Kimsal: Last year.

Manuel Lemos: So the discussion appeared again in the PHP internals, several iterations and well, I'm not sure, I did not follow the discussion because it was quite long, but I did not see much compelling reason for this. Do you see any great purpose for this?

Michael Kimsal: Well, yeah. I think there's a lot of purpose for it. I really do not like this style syntax. This is C# style. I like C# and I think it works for them. I don't like this, this is just an emotional thing, but I'll screen share with you.

I started a very basic RFC on the Wiki probably three years ago, and then I let it fall away, and I think it's been deleted. And I actually, I've had a couple of discussions on Reddit with people about this and people hate my suggestion, but I'll show you my suggestion.

Manuel Lemos: OK.

Michael Kimsal: Here it is.

Manuel Lemos: It's a surprise.

Michael Kimsal: That's it.

Manuel Lemos: It's a naming convention.

Michael Kimsal: And this is... I am totally, I'm in love with Groovy, maybe not, Love is too strong a word, but I'm an enthusiast, I use it a lot. And much like some people or C# people and they want to see C# syntax in PHP, to me Groovy is a better Java and PHP has largely been inspired by Java.

Let's continue that road, but let's take not just from Java the language, let's take from some good ideas in Java.

What happens, and this is probably the one big difference between PHP and Groovy, you can in Groovy and Java you can say this is public by default. What Groovy actually does is makes everything private, it makes all your properties or your member variables, makes them all private and makes public get in set methods for everything.

So effectively if I were to say, 'new equals new user', and I say, 'echo you name'. What Groovy is doing under the hood is actually translating that to 'you get name'. It will have at compile time it will create a basic get name and set name, but if you have your own, if you have an explicitly declared get name or set name, that will be run instead.

So, effectively you can just say, 'you name', so I could just write that, but if I have an explicit get name method available that will run, otherwise a default get name method would run which would just return the named property.

So you can most of the time you could write code just like that, you don't need to ever write getters or setters, and you'll get default behavior. When you want to overwrite them, you can write methods that can form to the standard method naming and processing that we already have in PHP. These would be methods that would be testable on their own, and you don't have to change your code at all.

Manuel Lemos: Right.

Michael Kimsal: But instead if you go back to share your screen as to what this RFC is proposing is a pretty invasive change to adding get and set. To me that's very polluting that idea of get. All the examples there are just get. Well, just return something divided by something,just return something divided by something.

I have still not seen a good way of how you would actually test that and what if you have more than two lines of logic that you want to have in a getter or a setter like logging or something like that. What you're going to end up doing is in that get, you're going to end up calling another method probably.

Manuel Lemos: Right.

Michael Kimsal: Why not just get something that looks for those methods by convention name anyway.

Manuel Lemos: I think this can span more than one line. It was just...

Michael Kimsal: No, it could, but do you really want to have like in my class definition, oh I've got a public hours and there's nine lines of getter and setter code in there, and then I've got another property with another nine or ten lines, or three lines of code, it gets really ugly. And you are really combining sort of architectural definition with functional code right there.

I've not seen good examples of how you test this,yes there's some RFC discussion about inheritance and things like that, but we have standard ways of defining get and set, people have classic getters and setters already, why not look at making the parser and the runtime just call them automatically based on context.

Manuel Lemos: Yeah.

Michael Kimsal: And if you don't need them, then you don't need them. Anybody that actually already has a bunch of explicit get set calls like I have echo, you know, you arrow, get name, get age, get all that. If you already have custom getter and setters written and you're calling them with get and set methods nothing would change.

If you just have public and protected properties and you're just calling it directly, nothing would change when you want to add getter and setter code, you could add it in and it's not invasive to the it's adding additional methods, it's not invasive syntax in the property definitions that we already have.

Obviously I'm rambling, I'm really hot under the collar about this, but I didn't bother commenting on this because my understanding was that this has already passed, nine months ago, ten months ago.

Manuel Lemos: I maybe wrong, but this...

Michael Kimsal: It looks like it has not.

Manuel Lemos: It says ready for review and discussion code complete.

Michael Kimsal: Yeah.

Manuel Lemos: Well, so it seems like that the vote did not even start.

Michael Kimsal: Yeah.

Manuel Lemos: This is already a final, because this is a quite long proposal and all these reminds me about the whole bureaucratic spirit of Java which is...

Michael Kimsal: Well, it's something right there like about two thirds of the way and the syntax there's something it says, read only and write only properties, just the syntax for this looks really ugly. On the right hand side there below operators.

Manuel Lemos: OK.

Michael Kimsal: There's now a keyword that's read-only, that is really unPHP looking, but seriously.

Manuel Lemos: Yeah.

Michael Kimsal: How you would make something read-only in Groovy for example is that you would just-if you wanted the property to be read-only, you would create a setter that does nothing.

So if somebody called set on it, nothing happens or if you call the set, yeah, you could throw an exception in there if you really wanted to be a jerk about it, but there are already conventions.

We don't need new keywords with dashes in them let's say read-only and write-only or whatever. This is a lot of cruft and I know it's very easy for me to sit here on my chair and I'm an armchair person, I have a better idea and whenever I discuss it with people, it get shutdown.

And I know that Clint and some of the people here have put a lot of time into this, I know they believe in it, I just think it's wrong. If this was adopted it's going to lead to a lot of problems.

Manuel Lemos: The basic question is; what problem this solves is to not have to after call or getters and setters and just assign properties and have the getters and the setters be called implicitly like you said it is done in Groovy or is it something else that I'm not...

Michael Kimsal: I think that's primarily it, it's just in theory being able to write cleaner code that really the nicety I will say in Groovy is I don't have to say. I don't have to call a getter, the getter is there for me. There's actually in the bytecode there's always a getter, there's always a setter and I can overwrite it if I want to.

So I never have to think about do I call a getter? Do I call a setter? I can just say, or, and if I want to change the behavior of that, I want to log something, I want to capture for audit, I want to do some runtime checking or some sanity checking I have a standard way to do that which does not mean that I have to go back and edit any of my code.

Manuel Lemos: Yeah.

Michael Kimsal: And actually kinds of get into your next debate topic there if you were to write all of your code with explicit getters and setters all the time then that idea of any sort of Property Accessor proposal is moved. I don't know many people write everything is getters and setters, nor should we have to. Computers can do more for us now.

Do we really need to copy Java and always use setters and getter functions in PHP classes? (36:09)

Manuel Lemos: Right. Well, that's exactly, well basically we're already debating what I planned to next for this .

Originally I thought this discussion will happen with Ernani because Ernani's day job is with Java. He works for IBM and liking or not has to develop most of his code there in Java.

And in Java there's this culture that every property has to be accessed via getters and setters. Well, if the language allows you to assign variables directly why do we have this rule to develop getters and setters?

Michael Kimsal: Yeah.

Manuel Lemos: Why go through all the pain of writing the code for getters and setters especially when all the properties you want to write getters and setters are public and the default is always to assign the value pass with the variable for a setter and the default for a getter just to return the variable.

If you cannot assign or get the variables directly, why do you need to go through the pain of writing getters and setters?

Well, there are reasons why getters and setters are necessarily like if you want to implement a complex logic that verifies, validates the values that are asked.

Or for some reason the getter needs to call some code elsewhere probably in a remote machine or calling a web service, in that case it would make sense to write getters and setters, but when your case is just public variable that could be accessed externally, why bother try to get setter code?

Michael Kimsal: More culturally in the Java world, I'm sort of speaking as a Java person here, I think the argument would be that nothing should be public. You should never have direct access to, you should never be able to modify the state of anything directly.

Everything should always be done through method calls. So what's this user's name, get name? It's not doing anything other than passing you through an internal private or protected property, but that's it.

Manuel Lemos: Right.

Michael Kimsal: And so it enforces that concept of you're never actually doing anything directly, you're always indirectly going through stuff. And that's why I like Groovy to extent that I do because it enforces that... it provides you that structure automatically at the bytecode level it's private, it automatically creates me a get name and it calls it. But it looks to me like I'm just saying very, very....

Manuel Lemos: Right.

Michael Kimsal: I get the benefit of simple recode, but I get the architectural benefit of being able to overwrite it, put custom code in without modifying my system code later.

Manuel Lemos: My question is, if there is that rule in the Java world, why was it not built in the language like there is no direct...

Michael Kimsal: Groovy.

Manuel Lemos: No, it's the opposite. If in the Java world we should always write getters and setters, why isn't that a rule in the language that totally forbids the syntax of assigning a variable directly from outside of the class or get its value?

Michael Kimsal: Well, I suspect the real answer is that no one really thought that it would be the number one language on the planet for a decade or more.

Arguably yes C and C#, and whatever, but I don't think that people really thought that it would get as popular as quickly as it did and that so many of these architectural questions would be haunting us 15 to 20 years later.

Because there are a load of people that would want to be like you're saying which is that, 'Hey, you should never have access to something and we should prevent this from even being allowed in the code in the first place.

Manuel Lemos: Right. Well, the way I see it it's probably it's not that everybody agrees with that the rules of making goal with setters and getters.

Michael Kimsal: Right.

Manuel Lemos: My main reason to be against getters and setters is that it forces yourself to write silly repetitive code that only think that it does is to assign the variable or get the variable value.

But I like the approach that you mentioned in Groovy which is all variables by default have implicit getters and setters which are public.

And if you want to change that for specific variable you just write the code the get names. That would be perfect I think because if you really need to make something get a variable only be accessed by getters and setters it would be your exception not your rule.

So you don't have to go through the pain of writing silly getters and setters that do the very same thing for all the variables. If you have 20 variables in a class, imagine writing the code for 20 getters and setters.

Michael Kimsal: But my IDE writes it for me. But my IDE just generates it for me which was...

Manuel Lemos: A bit silly. No it's more code to compile, it's more code to waste memory. Why do not make it built in the language.

Michael Kimsal: You don't understand enterprise development.

Manuel Lemos: Oh, enterprise.

Michael Kimsal: Huge as huge as write in your PHP, that's all right. OK. You write, you go ahead, do your little script. You just write your script.

Manuel Lemos: I'm not Spock.

Michael Kimsal: You could write a script in PHP and then it will be happy.

Manuel Lemos: I'm a lame. PHP programmer, yeah.

Michael Kimsal: Or you can put it on the web and that would be fun. But you don't understand Enterprise, capital E. Enterprise. Why don't you understand that?

Manuel Lemos: Enterprise. You are a Klingon, even not understand Spock. you understand Klingon, you are from the evil.

Michael Kimsal: I used to get that all the time, yes. And now I was a PHP guy sent into the Java world, yeah.

Manuel Lemos: What is that thing with the...

Michael Kimsal: I told you, it's this, yes.

Manuel Lemos: Yes, you told me. I was not even aware of that.


Michael Kimsal: OK.

Manuel Lemos: Well, all this to say that it's a nail that I enjoy hitting on the head of the Java developers, they are bureaucratic, complicated, they deserve to get buried in their files of useless repetitive code forever. I'm not be as productive because the world is from the Wordpresses.

Michael Kimsal: That's where I was today, I was at WordCamp in Raleigh. I was at a Word Press two days or day and a half Word Press conference.

Manuel Lemos: Let me guess, it was totally crowded, right?

Michael Kimsal: I think there was close to 200 people there.

Manuel Lemos: Because of the hurricane or else it would be...

Michael Kimsal: No, no, no.

Interesting though that it was a mix, but it's such a wide community. There's a big cross section of people there and I'll tell you more about it later, but it just, I mean, not the people don't go to Java conventions, but there aren't that many source of public facing Java applications that are so widely and enthusiastically adopted.

Still 15 years, 17 years after the language has come out, it has its place and I use it for a lot of stuff, but PHP still dominates and it will for a long time.

Manuel Lemos: Right because it's a pragmatic language. Well you see just have to end this topic because we need to move on, but my point is just the PHP world is much more pragmatic and for me it does not make much sense to copy all these things from the Java world when in the end we are not going to use them.

All these generics, all these getters and setters that are a forced rule to make a programming less fun I think and less productive. You get stuck on writing silly code, of course your IDE can do it, but I think it would be needless.

Article Painless OAuth in PHP (44:24)

Manuel Lemos: Anyway, moving on with the podcast, I wanted to just comment briefly on an article that I have published recently. It was about a class that I wrote to provide access to all APIs that require OAuth authentication.

For those that are not familiar with OAuth, it's just a protocol that allows your application to request to access some API on behalf of users of your site.

And this is the reason why I'm mentioning it here since it is for a specific class because there is this feature on PHP classes blog that you can write about some class and I'll request your article to be featured and it becomes featured in PHP classes site blog and you get much more exposure to your article, your classes and yourself.

So this is also an invitation for every developer that has written classes, like to write articles, as long as your article is of interest not just of your class users everybody. You need to teach something in there and hopefully present some code that teaches people how to do something even if it requires to use your class.

And in this article I explained that despite of all the complication of the OAuth protocol to obtain tokens and sign parameters to make API calls and all these complications, this class was meant to abstract all the versions of OAuth since OAuth 1.0, 1.0a and 2.0.

Different APIs on the internet use this class, I mean, use OAuth different versions of the protocol all and this class abstract it.

And the class has built-in support to assign some variables that define URLs to communicate with some or different OAuth servers. And in the end you can write the same code to access different OAuth servers and it will simplify your life a lot.

I have develop this class to implement certain things like not only to post on Facebook and Twitter, but also to provide means to authenticate when you access the PHPClasses site or JSClasses site you can login with your account on Facebook, or Yahoo!, or Google, or Hotmail, or several other sites.

And at least part of that authentication is using OAuth and this could be useful to make logging in your sites less painful, and that was the main reason why I have written its class.

Anyway, I'm just mentioning it here because it was an article published this month and this is sort of tutorial of the class and also to encourage other developers of other class well, to write their tutorials and flag them as featured.

So me, the moderator of the site sees that it fits the requirement of being useful for the whole audience of the site and you'll get more exposure, you'll get your article in the feed of the blog of the site which reaches much more users than just your own class users.

Michael, have you worked with OAuth in your applications? I supposed you did, but I was wondering.

Michael Kimsal: Yeah. I have done some OAuth and I've always used some existing library: Facebook. I just used the standard Facebook PHP library to do stuff. I had done... there was a Grails plug in in that ecosystem that implemented OAuth for standard OAuth and it had some hooks to connect to Facebook, and Google, and Yahoo!, and Twitter, and a couple of others through their standard OAuth stuff. But I haven't done much on my own.

Manuel Lemos: Yeah.

Michael Kimsal: Looked at it a couple of times, but it's not worth my time to try to hack something together just for something when there's existing libraries already. I just don't like digging that deep if I don't have to. If I have to, I have to.

Manuel Lemos: Yeah. When there are some libraries to access certain APIs and do the authentication that is helpful, but for some APIs that requires OAuth authentication, either there is not the code to do it or it is not a very easy to do. And it becomes a bit painful because you have to learn all the end points URLs and configure them in your code.

And in the case of OAuth 1.0, you need to sign parameters with certain secret keys that you obtain from the site you want to access for you application and it is quite painful in.

The idea of this class to make it painless, but if you want to access Yahoo! you would just configure server is Yahoo! and it will figure all the URLs and even certain option that configures the class to behave differently because there are variants of behavior between different implementations of OAuth and that is a headache.

Well, if you did not work with many different OAuth servers, you may not know this yet, but if you get there and you get stuck because for some reason it doesn't work as you hoped, it's because there differences of implementation and this class tries to solve it.

Anyway, I just want to cover this superficially not to get much into the actual article just to mention that it is there and the other authors that want to publish their articles about their classes, please go ahead and the site will get you additional exposure as I mentioned if it is an article that can be useful to everybody else.

Latest JavaScript Objects published in the JSClasses site (50:39)

Manuel Lemos: And now moving on to one of our final sections on which first we comment on the latest classes, objects, published on the PHP classes brother's site, the JS classes site.

I'm trying to screen share it to you. Let's see if works because it is... Well, in the JS classes site there are not many classes being published as in the PHP classes site because it's still a site that is growing gradually, but there are a few classes and interesting to comment about. Michael, which classes would you like to mention?

Michael Kimsal: Well, I'll screen share a couple here. I'll take the top couple, Safari screenshare. Oh, here we go. I'll share that window. You see that window share? Does it, yeah.

Manuel Lemos: Yeah. Well, if you can increase the font it will always be helpful. You can't increase much.

Michael Kimsal: So there's a couple here and actually this one sort of relies on the HTTP class next to it. But both by the same author jsgtv2c. This is from, I hope I'm saying his name right again, Juraj Puchký this is a poor American pronunciation skills, all the way from the Czech Republic. Hello.

This class will explicitly, not explicitly, but it will go out to the Google translate API, do AJAX calls and let you directly interface with that.

And actually I had some code here pulled just up just to give it pulling up the sample codes so you can see. You need to put your API key in the global space there, but then you create a new jsgtv2c to detect and translate making two new objects, actually three with supported languages.

Give your API key there, you Google API key, and then there are some calls here. Thongs like get the supported languages, get the detected languages, I have a callback. So once the text is translated, then I'm going to replace that.

Pretty straightforward, nothing jumps out of here as this is overly difficult code to understand or deal with. It looks very straightforward to let you directly use Google translate stuff.

So if you already have a page, you already got a system, and you want to do some live AJAX translation of things as people are tying stuff in. So if you type something in and you can automatically translate it and get the AJAX back, this would be the tool to use.

Manuel Lemos: Yeah. It will practically... That example of practically replicates the Google translate page.

Michael Kimsal: Right.

Manuel Lemos: That you type some text and you have the site to detect the language that you type it based on some heuristics.

Michael Kimsal: But being able to take this and then customize it to your own sites needs. You know, it's a pretty simple demo, but at the same time there's not, I mean. Google is doing a hard work doing the translation, you just need to send them a call through this class and get the results back.

Manuel Lemos: Yeah.

Michael Kimsal: The other... do you want to do one now? Do you want to talk about one now?

Manuel Lemos: Yes.

Michael Kimsal: Why don't you take over.

Manuel Lemos: No, no what I do... you can mention the other you wanted to mention?

Michael Kimsal: Well, the other here I just like the idea of if, but I think. I am registered back. Who wrote this code? I am registered. I'm going to log in just to get this file. Don't look at my password...

Manuel Lemos: Oh now I've seen it.

Michael Kimsal: Eight black dots, that's it. We're back here, here's the read me. This is an Extend function or extend piece of functionality, create new objects and extend other objects. Not something that we have directly in JavaScript, but if you are interested in looking at a way to do this I've seen some other frameworks and libraries that offers similar sorts of functionalities. You can study those, you could study this.

The idea of trying to bring that concept of inheritance and super-classing and sub-classing that we have in more things like Java and PHP and trying to bring that into the JavaScript world. It's something that I think a lot of people still really want to do, they've spent a lot of time understanding OO in PHP and to not have that same thing in JavaScript is... obviously it's a problem for people and they've keep wanting to have it by whatever means necessary.

So this class would give you a start in both using it, but to me a lot of this are more useful to see how other people solve or attack a problem, and to use them as learning tools.

Manuel Lemos: Right. Well, I think everybody is missing the inheritance facilities that we have in the other languages, they also have, like to have them in JavaScript. I think ECMAScript 6 already supports classes, similar to the PHP and other language support it. So until ECMAScript 6 becomes widespread I think solutions like this can be useful for those that want to implement it somehow.

And moving on, I'm going also to mention briefly a couple of classes. The first one named bzPrime from Gábor Martini already a regular contributor of the JS classes site from Hungary

And basically what it does is some calculations with numbers, integer numbers to decompose them into prime numbers and all sorts of operations that you can do with prime numbers like decomposing your number and finding common multiples and common divisors.

Well, this is a math application. There are some purposes for this kind of objects so kudos to Gábor for providing this class.

And next I also like to mention another class, an object this time from Karl Holz, a regular contributor also from the site.

Basically what it is parse for RSS feeds and internally it uses jQuery to send an AJAX request to retrieve RSS feed from a remote server and then it parses the feed and extracts the values of the items and the channel and expose them through certain object variables.

So if you want to develop an application that's for some reason requires the access to RSS feeds, this could be start. So thank you Karl for yet another good contribution.

PHP Programming Innovation Award of August 2012 (57:00)

Manuel Lemos: And given this, now we're going to move on to one final section on which we comment the latest classes that were nominated in the Innovation Award. We already passed the end of the month, so this month. Nominees are already announced, but we need to go back to mention that the winners of August.

They published the classes in August and by the end of the month they were nominated. So they were voted during September, and now in October winners were announced. Michael, which of these nine classes would you like to mention?

Michael Kimsal: Well, two jumped out of me. I'm going to share my screen. First one Amir Hoseinian. Hope I'm saying that right from Iran. Hello.

Manuel Lemos: You can increase the font.

Michael Kimsal: I did. I did it again.

Manuel Lemos: Yeah.

Michael Kimsal: is that reasonable?

Manuel Lemos: Well maybe that's good enough.

Michael Kimsal: OK. But I actually lost the name of this class. Where is the name? That's his name? Securify. It's a small class, but it does something kind of... it's a middle ground between...I addressed this problem several years ago and his approach is a little bit different than mine.

If we look at his read me, we will see it's just a basic class, you just bring it in, but what it does is it will take if you give a password, it will just go and make it a bit more secure by replacing some things.

We see things down here, you might get something like it might uppercase something or lower case something, it's going to replace some letters with symbols, it's going to replace like the H is PHP sometimes gets replaced with a four or a pound sign with leet speak and the interesting thing to me about this is that it gives you a password that is still something that you can remember, but is far, far less likely to be hacked or compromised with normal attacks.

Just today at Wordcamp somebody had brought up some slide and mentioned something about, there was a recent password compromise password or leak of database password from a database.

And about 6 million passwords and something like 95 or 98% of them of all those 6 million passwords were one of 10,000 common word or phrases password, hello, somebody's name and so on.

So if you can come up with something even if it's kind of a common word or phrase, but run it through something like this, you could do it yourself, you and I probably if you're watching this, you're probably sharp enough intellectually, not that people aren't, but you bring things enough to say, well let me replace some of these characters.

A lot of ordinary people won't do that. They'll just say, "Well, my password is this'. And to either be able to recommend a different password to somebody or generate password for people one-time use passwords that are something that could remember easier, rather than just random strings will help people to re-use a more safe or more secure passwords. That was a long ramble and I'm sorry, but that's...

Manuel Lemos: Yeah.

Michael Kimsal: There's a use for it.

Manuel Lemos: I think that's a very simple class that addresses the problem in a very unique way that I do not recall. There are many, many classes to generate passwords for users.

Michael Kimsal: Right.

Manuel Lemos: But they are totally random and then in this case there is even a parameter that can configure how much of the original text will be changed.

So you can just change one letter, so your password that was very easy to guess just changing one letter it will become much harder, that increases the security of the passwords because the names securify of the class.

So despite it was a very simple class, what does is quite simple. I think it was clever in terms of purpose and probably it will be helpful for many sites to adopt.

Michael Kimsal: I thought so too.

Manuel Lemos: OK.

Michael Kimsal: The other one that I wanted to call out briefly here is Mukhamad Ikhsan. Again, I hope I'm saying that correctly from Indonesia, has a class, and I have not used this class, but I use Redmine and this is a class so that is actually a set of classes that enable you to programmatically control the Redmine ticketing system from a command line.

And being able to say, "I want to create a new issue"... If you've not used Redmine you don't know what I'm talking about, probably you're missing out. Redmine is very, very powerful Ruby based or Rails based ticketing system. It's what I use for most of my projects these days and that's be able to have a command line interface to that, this happens to be in PHP, but have a command line interface to it is really nice.

So I appreciate what they did from a standpoint of it helps. It helps more people give exposure to Redmine. I'm just a big fan of that project. Interesting too that you need PHP 5.3 or greater because it looks like there's probably some auto-loading going on, there's a loader, there's an IDE and consoles and resource of this.

This entry here is not just a single class, it's a pretty big set of functionality, but probably. Well, I'm not going to say too much more, but if you're not using Redmine and you're looking for a ticketing system, look at Redmine. You may have to brush up on your Ruby or your Rail skills, you may have to learn a bit if you want to host it yourself. There's a lot of Redmine hosting companies out there too.

Manuel Lemos: Well, that's quite interesting because before this class I have never heard of Redmine before, but once it was nominated, there was a guy in the Facebook that come and tell me, "Oh this is the best class ever because this is the best ticketing system."

I still did not have the time to look into it, but in spite it was not written in PHP, it's probably a solution that many people should look at including myself.

Michael Kimsal: Redmine has a pretty good API and when I'm using Eclipse of Zend Studio which I don't all the time, but when I am this is one of the things that's missing from PHP or from JetBrains products is a connector, a project connector into Redmine.

But when I was in Eclipse you can use Mylyn M-Y-L-Y-N, and that will give you a thing in your Eclipse to connect into ticketing systems. Well, there's one for Redmine. So you could just be in your Eclipse and say "Where are my tickets? Let me grab a ticket, let me update the ticket, give me a code against" and you could it all from Eclipse.

I mean, you could do it against some other Jira and some other ticketing systems as well Fogbugz I think. But to be able to do that against Redmine speaks pretty highly about the level of polish in its API that you could do that much.

Manuel Lemos: Yeah.

Michael Kimsal: Anyway, enough about Redmine and all that. Thank you very much for your class contribution. You're helping spread the joy of Redmine around.

Manuel Lemos: Yeah. Next time people will also switch to Ruby instead of PHP. No, just kidding. [Laughter].

Well, now with this API we don't need that. Well, anyway, moving on with the nominations, I like to also mention a couple of classes. One which was actually the winner of this month from Aziz Hussain he's from the United States although his name suggest he is from some Middle East country.

Anyway, the class here Multi Threaded MySQL Backup and Restore is apparently yet another MySQL backup script that generates all those SQL statements that you can execute later to restart the database.

But this takes a different approach which is to generate the backup of each table in parallel using forked processes that can run... actually can run the mysqldump, but just for one table at a time.

I'm not sure if this would be safe enough to use in a production database because different tables maybe being changed at the same time and some tables may be backed up before and after.

Mysqldump as a parameter that makes one database backup sort of integral in the sense that it start the transaction to isolate the backup process from any changes that are done afterwards. But when you run several copies of mysqldump in parallel, I don't know if this can be guaranteed.

Anyway, it seems to be different approach as it is taking the backup of the database many tables at the same time. If you have multiple CPUs in your database server probably to take advantage of that and it is a different approach and for that it is nominated. So, thank you Aziz for your contribution.

Now moving on to one last nomination by Ihor Kohmin from Ukraine. He's already regular contributor of the site and this time he created a class data. Apparently it's not a big deal because it just converts dates between decimal string made just a digits to English words. The difference is that it supports range of years that can be in the billions, this is not usual.

Usually PHP date manipulation function work with the representation that is restricted to year starting 1970 and that is restricting the way to manipulate dates, but this class uses its own code to manipulate the date, converted date, and spell it in English words and does not have that limitation. So that is why this class was nominated. So, kudos to Ihor for his contribution.

Conclusion (1:08:03)

Manuel Lemos: And with this I basically conclude this podcast. It was quite long, but personally I have enjoyed it a lot this time with the always welcome Michael Kimsal.

Michael Kimsal: Oh, stop. You're making me blush.

Manuel Lemos: There is only one Michael Kimsal.

Michael Kimsal: There are two, I keep telling you.

Manuel Lemos: It's your son I know.

Michael Kimsal: But one is my uncle and he's never. He's just not online.

Manuel Lemos: He doesn't do PHP.

Michael Kimsal: No he doesn't.

Manuel Lemos: Well to finish the I think probably it would be interesting to mention something about your event Indieconf that you organized this time, it's just about a few days for people to sign in and join your event. But I think...

Michael Kimsal: Twelve days. Thirteen, twelve says? Should I sing a song about?

Manuel Lemos: Well, if it better explains why it would be interesting for PHP developers listening to the to attend, that would be helpful.

Michael Kimsal: Oh, I appreciate the moment of silence here. Indieconf, if you haven't been. Are you looking at me? Am I being recorded right now?

Manuel Lemos: Yeah the world is looking at you.

Michael Kimsal: Well, I don't know if they're pulling up my... if to see my screen or your screen. I hope they're seeing my screen. Indieconf talked about the JS classes, thank you very much. This is a conference specifically for people who are web freelancers, independent creatives.

If you're a graphic designer, if you are a developer, if you're somewhere between maybe kind of independent project manager, social media marketer, blogger, writer. If you make your money by working on the Web and some sort of a creative or technical fashion, you probably belong here.

If you're working for yourself or maybe working in a small company two, three, four people, small game studio maybe, this is all about the soft side, the business skills, the personal side of working for yourself.

May have a couple of code sessions, but you can get code at 50 other conferences. There's not going to be many conferences that you got to where it's entirely devoted to people, to learning about how to work for yourself, how to price your services, bootstrap yourself that sort of thing.

And I was going to mention at our WordCamp. I mentioned I went to WordCamp in Raleigh here it's all WordPress thing, but they have three sessions that were all about working for yourself. Freelance like a rock star, and how to make a living being a WordPress person, and how to price yourself, and how to charge what your worth and how to get that, and all that stuff.

There were explicitly goes three sessions, I think there was another one, but three sessions out of 24-25 or so that they had and they were pretty well attended. So there's certainly a need out there for that for that kind of information, the desire for that. Or could it just been that the other sessions were extremely really boring and everybody came to those. But I don't think so. There's hundred good WordPress stuff there.

So if you know somebody that is a freelancer, if you're one yourself, I realized not everyone can come to Raleigh, but tell you what, if you're coming from out of the country as long as you can get here, you come in. Be my guest, please. If you're going to come all the way over from Europe or South America, Manuel, come on, come up from Brazil.

Manuel Lemos: I'm trying to get some money. I think I'll still make it in time for the event.

Michael Kimsal: I think you got 12 days, I think you can make it.

Manuel Lemos: Yeah. Well, just to conclude how many days, how much to..

Michael Kimsal: Oh, yes. I'm never really good at this. It's November 17th, it's about 10 days from now, 12 days from now.

Manuel Lemos: Just one day?

Michael Kimsal: It's one day, it's all day. Start at 8:00 in the morning, actually 9:00. We're going until 7:00 at night. We got networking, it's an all day Saturday event, if you come in I'll hang out with you Friday if you want to, I'll hang out with you Sunday. We may have a mini thing on Sunday, just grab some coffee or something informally. But we've had.

This is our third one and it has been pretty well attended in the past and we're hoping to increase that this yeas. So come on out, Thank you very much, Manuel.

Manuel Lemos: Well, that was a great way to conclude this . Michael as usual, thank you for coming again. I hope you can come in the future because your insights are always, always enrich the and I hope you can come.

Michael Kimsal: Are you saying I'm fat?

Manuel Lemos: No, I said rich, not fat.


Michael Kimsal: OK.

Manuel Lemos: Well on that note, that's all for now. Bye.


You need to be a registered user or login to post a comment

Login Immediately with your account on:


1. Adding methods to existing objects - troy knapp (2012-11-13 02:07)
I really want the ability to add methods to objects.... - 2 replies
Read the whole comment and replies

2. Podcast - Danny Goncalves (2012-11-12 22:32)
Podcast... - 1 reply
Read the whole comment and replies

  Blog PHP Classes blog   RSS 1.0 feed RSS 2.0 feed   Blog Should PHP be Copying...   Post a comment Post a comment   See comments See comments (5)   Trackbacks (0)