jump to navigation

Waste Of Another 2 Hours May 11, 2011

Posted by ismywebsite in general.
trackback

Sorry I haven’t formatted it, but I just wanted to illuminate exactly what it’s like for me trying to reach any progress here. This has been ongoing for the past two weeks:

3:30:59 PM me: Hi
3:49:35 PM Nick Liu: Huh?
3:51:16 PM me: I said hi
3:51:21 PM Nick Liu: Hi
3:51:34 PM me: Do you know any good developers who could help with my site?
3:51:41 PM Nick Liu: Nope
3:52:24 PM me: Okay well thanks for looking into it
3:52:36 PM me: What are you going to do with all your v5 code?
3:52:59 PM Nick Liu: Use it.
3:53:13 PM me: For what?
3:53:36 PM Nick Liu: Something
3:53:42 PM me: Hmm
3:53:54 PM me: I know I reused my base class code in a couple projects already
3:54:09 PM Nick Liu: Okay…
3:54:11 PM me: It’s really awesome to just make tables and voila they work
3:54:38 PM me: On a scale from 1 to 10 how upset are you right now?
3:54:44 PM Nick Liu: 1
3:54:52 PM me: Okay
3:55:00 PM Nick Liu: What do I have to be upset about?
3:55:46 PM me: Well that I’m not using your code
3:55:56 PM me: Without serious modification
3:56:05 PM me: That the entire site is dead
3:56:06 PM Nick Liu: Okay…
3:56:18 PM me: I don’t know I guess that doesn’t phase you
3:56:31 PM me: It just doesn’t matter to you
3:56:46 PM me: You just don’t care
3:56:58 PM Nick Liu:
3:57:00 PM me: Why spend all that time – just wasted?
3:57:19 PM Nick Liu: I never typed that the time was wasted…
3:57:57 PM me: Okay
3:58:02 PM me: You said you can reuse it
3:58:33 PM me: Have you moved your files from our hosting?
3:58:40 PM me: For your website?
3:58:52 PM Nick Liu: I haven’t left IsMyWebsite.
3:59:09 PM me: Well I’ve recently had to recommend that
3:59:22 PM Nick Liu: I don’t have anywhere else to go… so…
3:59:33 PM me: Nobody else does either to be honest
4:00:23 PM me: What do you want to have happen?
4:00:32 PM Nick Liu: What do you mean?
4:00:38 PM me: With the site?
4:00:45 PM Nick Liu: My site?
4:00:55 PM me: No your host you’re dependent on
4:01:06 PM me: The one you make some serious promises to
4:01:23 PM Nick Liu: Live long and prosper… but I don’t see how you’re working towards that… :\
4:01:59 PM me: Well, I don’t see how you are either.
4:02:27 PM me: It’s been pretty clear from the start, the clients didn’t want version 5.
4:02:35 PM Nick Liu: Are you sure?
4:02:37 PM me: I like the features
4:02:46 PM me: Yes find me counterexamples
4:02:54 PM Nick Liu: http://i.imgur.com/hfNJe.png
4:03:29 PM me: I want a better DNS updater
4:03:43 PM me: And I like the simplicity of the layout
4:03:44 PM Nick Liu: That’s not difficult…
4:03:47 PM me: Well
4:03:54 PM me: Why can’t you just do it?
4:04:17 PM Nick Liu: I don’t even know how it’s set up, but I’ve looked at record files, and they have obvious patterns.
4:04:29 PM me: Okay
4:04:47 PM me: I’m trying to clean things up and get documentation in place
4:04:57 PM me: That’s really my top priority
4:05:21 PM me: The system is very easy to use but of course it can be frustrating if you don’t know how
4:05:50 PM me: And it’s worse when I’m unreachable, and you don’t bother to email
4:06:11 PM Nick Liu: You still use flatfiles. >,>
4:06:24 PM me: I’m willing to change that
4:06:32 PM me: I’d like to be able to specify titles and meta
4:06:40 PM me: And have some sort of versioning on pages
4:06:58 PM me: But right now, it’s flat files because I use a lot of FTP to edit it
4:07:06 PM me: I don’ thave an alternative
4:07:11 PM me: To FTP that really does what I need
4:07:36 PM me: You promised an editor at one point if I remember
4:07:45 PM Nick Liu: The FTP-based editor?
4:07:58 PM me: Well I don’t really care about FTP anymore, but it needs to be web based
4:08:10 PM Nick Liu: That’s been done a long time ago…
4:08:17 PM me: Where?
4:08:30 PM me: I never saw it how can I guess that?
4:08:45 PM Nick Liu: Staff Panel of the webhost management system that my team and I are building
4:10:13 PM me: On top of a different platform
4:10:33 PM Nick Liu: What?
4:10:39 PM me: In compatible with the site
4:11:07 PM me: Change everything just for the heck of it
4:11:26 PM Nick Liu: I’m not understanding what you’re typing…
4:12:01 PM me: Can I borrow your staff panel and editor?
4:12:24 PM Nick Liu: You’ll have to request permission from the owner, Brendan McNiff.
4:12:42 PM me: He built the editor?
4:12:56 PM me: Or he runs this separate team you’ve all got?
4:13:22 PM Nick Liu: He’s hosting it all, and since he’s older than the other developers, we’re letting him own it.
4:13:31 PM me: I see
4:14:26 PM me: When I told my mom what happened, she right away had a fear the this ‘Brendan’ was planning to relaunch and steal all the clients as potentially paid customers
4:14:54 PM Nick Liu: Well, you seem to want to promote that.
4:14:55 PM me: Her entire business website is lost as a result of not developing the current version of the site
4:15:22 PM me: Many client shave said
4:15:30 PM me: They will gladly pay me if they can just have something stable
4:15:37 PM me: They they leave
4:15:41 PM me: And I never see them again
4:15:47 PM Nick Liu: Paying you won’t get your system stabler faster…
4:15:53 PM me: Why not?
4:16:10 PM me: I can hire some cheap coders and they will follow the standard
4:16:22 PM Nick Liu: Oh, okay.
4:16:24 PM me: They’ll email me whan they have problems
4:16:34 PM me: They’ll communicate their confusions
4:16:51 PM me: I doubt they’ll launch secret side projects
4:17:34 PM me: And it will give the stability of being able to afford the servers
4:17:46 PM Nick Liu: I see…
4:17:50 PM me: And it will also have less clients so I can focus on each
4:18:27 PM me: Do you think I want to go paid? No I just have absolutely no idea what to do
4:18:53 PM Nick Liu: Why not stay on IsMyWebsite 3.0 ?
4:19:03 PM me: Unencrypted passwords
4:19:18 PM me: I had a lot of criticisms then, though not nearly as many as now
4:19:30 PM me: The coding was in 50 different styles
4:19:49 PM me: I had 5 different locations where website accepting is processed, and they all did it slightly differently
4:19:57 PM me: Referencing slightly different acceptance messages
4:19:57 PM Nick Liu: I would rather have a lot of criticisms than even more criticisms like now.
4:20:06 PM me: As would I
4:20:36 PM me: I still have the files of 3.0 – did you want to revert tonight?
4:20:55 PM Nick Liu: Since IsMyWebsite 3.0 works so much better, it should be used.
4:21:18 PM me: It is the result of 2 years of development on IsMyWebsite version 2
4:21:39 PM me: Which is in turn the result of 1 year of development on IsMyWebsite version 1
4:21:55 PM Nick Liu: But the point is that it worked /much/ better.
4:22:18 PM me: It had a lot of bandaids
4:22:24 PM me: Duct tape
4:22:32 PM Nick Liu: Still, it worked /much/ better.
4:22:37 PM me: Yes it did
4:22:56 PM me: It just wasn’t very functional in the core
4:23:01 PM Nick Liu: Still, I’d much rather use IsMyWebsite 3.0 than use IsMyWebsite 4.0
4:23:02 PM me: It had serious security problems
4:23:09 PM me: Okay
4:23:17 PM me: Tell me what was better
4:23:21 PM me: I want to solve this
4:23:39 PM Nick Liu: Well, website creation…
4:23:49 PM me: Yep
4:23:58 PM me: I had to scrap those together
4:24:06 PM me: What did you want changed about that?
4:24:08 PM Nick Liu: Still… it beats IsMyWebsite 4.0, which has none
4:24:15 PM me: None?
4:24:23 PM me: You mean no default website?
4:24:29 PM me: Or what exactly doesn’t happen?
4:24:46 PM Nick Liu: IsMyWebsite 4.0 can’t make hosting accounts, can it?
4:24:54 PM me: Lol
4:24:59 PM me: You built the functions to enable that
4:25:07 PM me: At the very core – those JSON ones
4:25:21 PM me: All you do is make a Web object and do this
4:25:30 PM me: $myweb = new Web(); $myweb->accept();
4:25:34 PM me: And it’s created
4:26:07 PM Nick Liu: :\ . I didn’t see anything implemented…
4:26:14 PM me: No it was in WebClient before
4:26:27 PM me: Basically, I think I didn’t explain the the Client is what you want to create
4:26:33 PM me: 90% of the time
4:26:43 PM me: The other 10% is the Admin object
4:26:56 PM me: Which is used for the volunteer panel
4:27:11 PM me: It just has those high level methods we don’t want accidentally getting executed
4:27:23 PM me: Like terminating an account
4:27:29 PM me: The client can never do that
4:27:35 PM me: Only an admin can approve that
4:27:45 PM me: (In case accounts get hacked – happens all the time)
4:27:48 PM Nick Liu: $myweb = new WebAdmin(); $myweb->terminate();
4:27:49 PM Nick Liu: Oops.
4:27:55 PM me: That’s it
4:28:09 PM Nick Liu: That’s a really lame defense…
4:28:11 PM me: Yeah well we have a nice backup system as soon as it’s built
4:28:42 PM me: If 90% of the code uses the Client version
4:28:58 PM me: Then it forces a hacker to find a vulnerability which uses the Admin object
4:29:31 PM me: Well it’s also for sorting methods
4:29:38 PM Nick Liu: With sanity checks performed like people logically should, there should be no need for such a lame defense.
4:30:27 PM me: Okay what about the case where we have a getProfile() method
4:30:34 PM Nick Liu: Okay…
4:30:36 PM me: And both clients and admin level use the same method
4:30:50 PM me: But Admins should see it differently
4:31:05 PM me: A different format for the volunteer panel
4:31:10 PM me: As opposed to the client panel
4:31:16 PM Nick Liu: The volunteer panel client code would generate it…
4:31:22 PM me: We don’t have to remember two different method names
4:31:23 PM Nick Liu: The client panel client code would generate it…
4:31:30 PM me: Well
4:31:39 PM me: profiles are comon place throughout the volunteer panel
4:31:49 PM me: If you search for users
4:31:52 PM me: If you pull up a website
4:31:59 PM me: If you want to view the list of most active users
4:32:10 PM me: Answering support
4:32:12 PM me: etc…
4:32:23 PM me: You could have a shared file they all reference
4:32:36 PM me: But why not just use the classes that they already have access to
4:32:56 PM me: If we need to change the profile because we added a new field
4:32:56 PM Nick Liu: Look… it’s the client code that’s intended to do the displaying.
4:33:06 PM me: No volunteers need a display
4:33:13 PM me: If you search up a user you need their details
4:33:35 PM me: So you can say how’s the weather in ____? and call them by name and see that they have 5 websites, one of which was not accepted yet
4:33:59 PM me: See that they were an advisor, email them, manage their sites, give them credits
4:34:11 PM me: It’s all standard
4:34:18 PM Nick Liu: All should be done in client code
4:34:20 PM me: Every place a user is seen it should look similar
4:34:26 PM me: Why?
4:34:33 PM me: What do you mean by client code?
4:34:38 PM me: Clientside?
4:34:44 PM me: JavaScript parsing?
4:34:46 PM Nick Liu: Client code is the code that executes outside of a class
4:35:25 PM me: http://www.google.ca/search?q=client+code&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
4:35:31 PM me: I can’t find any reference to that
4:35:38 PM me: But okay
4:35:51 PM Nick Liu: You learn it in Computer Science class.
4:35:54 PM me: By the context I get that you’d like each page to include that redundant code
4:36:14 PM me: No in computer science class I learn that client code is executed by a client in a client server relationship
4:36:22 PM Nick Liu: What redundant code?
4:36:29 PM me: The code to display a user’s profile
4:36:36 PM Nick Liu: It’s not redundant if it’s different for different places. >,>
4:36:42 PM me: Why is it different?
4:36:49 PM me: Why should it be?
4:37:25 PM Nick Liu: Because that’s the immediate code that interacts with an object
4:37:47 PM me: I don’t understand
4:37:57 PM me: When you need information about a client (user) of the site
4:38:07 PM me: As an administrator
4:38:11 PM me: Or volunteer
4:38:26 PM me: Why would you need different information in tool X, from tool Y?
4:38:37 PM Nick Liu: You would use the same tool. :\
4:38:49 PM me: So thre’s only one tool that displays client information?
4:39:00 PM Nick Liu: In the Staff Panel, sure
4:39:03 PM me: Okay
4:39:07 PM me: What tool would that be then?
4:39:23 PM Nick Liu: “View User Info” or something like that.
4:39:27 PM me: Oh I see
4:39:31 PM me: So when I search for users
4:39:38 PM me: I have to click one extra time
4:39:46 PM me: And go back if that’s not hte one I wanted
4:39:53 PM me: Then click on the next ‘View User Info’
4:39:55 PM me: Then go back
4:39:59 PM me: Then click the next
4:40:05 PM me: Sometimes I search through hundreds of users
4:40:20 PM me: That’s not very efficient, when it can just show me their details right away
4:40:34 PM Nick Liu: Why can’t you get the user info right away? :\
4:40:43 PM me: You said it’s only in the one tool
4:40:52 PM me: So I need to ask that tool for it
4:41:14 PM me: What do I do? include it in the source?
4:41:17 PM Nick Liu: Type in a username or a user ID… Press [Enter]… There’s you’re user info
4:41:43 PM me: Okay say I want to find a specific user with a partial name, email, or website URL?
4:41:53 PM me: Multiple users match the criteria
4:42:07 PM Nick Liu: How do /you/ handle that?
4:42:21 PM me: Well you just type it in the search bar and it comes up
4:42:37 PM me: In this case you’d need an extended search so there’s a checkbox
4:42:37 PM Nick Liu: Same here
4:42:51 PM Nick Liu: Yeah, no problem. I had that in mind too
4:43:11 PM me: Okay so your ‘View User Info’ is really the same as my ‘Profile Search’
4:43:22 PM Nick Liu: Sure
4:43:25 PM me: Alright
4:43:31 PM me: Then it serves that one tool
4:43:36 PM me: Now we build your ticket system
4:43:40 PM me: And there’s a list of tickets
4:43:43 PM me: I pull one up
4:43:51 PM me: I’d like to see details on that user
4:43:54 PM me: Right away
4:43:59 PM me: So what happens here?
4:44:25 PM Nick Liu: You would… click a link?
4:44:30 PM Nick Liu: Load it with AJAX for all I care
4:44:40 PM me: That’s the problem. You should care.
4:44:50 PM Nick Liu: Okay… what’s wrong?
4:45:05 PM me: What’s wrong is wasted time – even a few seconds per ticket
4:45:17 PM me: If we did a million tickets
4:45:23 PM me: That really adds up
4:45:25 PM Nick Liu: You want user info immediately available?
4:45:27 PM me: Yes
4:45:52 PM Nick Liu: The exact same output as “View User Info”?
4:45:56 PM me: Yes
4:46:07 PM me: I need all the same details
4:46:13 PM Nick Liu: Okay, then call the client code of View User Info.
4:46:14 PM me: This is only two tools which would use that
4:46:25 PM me: There can be many more
4:46:35 PM me: So doesn’t the client code have some kind of authenticating header?
4:46:52 PM Nick Liu: It does, but the header only loads once, of course.
4:47:21 PM Nick Liu: It’d be foolish to send headers after headers are already sent.
4:47:45 PM me: So it’s extra overhead. I get that’s not a huge issue. You also have to make your User Info Viewer accept variables as input. Again, not a huge issue. It’s just messy is all.
4:48:10 PM Nick Liu: It naturally has to receive $_REQUEST
4:48:11 PM me: Oh and there’s an extra search bar
4:48:23 PM me: Just inserted below the support ticket
4:48:26 PM me: Just randomly
4:48:40 PM Nick Liu: :\
4:48:44 PM me: And probably something about the number of results found if you add that
4:48:59 PM me: Maybe you’ll have some other footer or header
4:49:15 PM me: I don’t know – but how would you add a footer or header without it going in tickets?
4:49:30 PM me: Would you then make a variable for $display_headers?
4:49:37 PM Nick Liu: No…
4:49:40 PM me: Okay
4:49:49 PM Nick Liu: An option is to use ?ajax=true
4:50:18 PM me: Okay well sure it works. It’s just messy.
4:50:20 PM Nick Liu: Or if you’re include()ing internally, just include it; the software automatically detects what needs the header.
4:50:31 PM me: I see
4:50:38 PM me: I’ts just messy
4:50:44 PM Nick Liu: Not really…
4:51:03 PM me: So what do I do?
4:51:23 PM Nick Liu: $_REQUEST[‘uid’] = 5; include(“tools/userinfo.php”);
4:51:29 PM Nick Liu: ^ That doesn’t look very messy to me.
4:51:44 PM me:
4:51:50 PM me: How do I turn off the search bar?
4:52:13 PM me: You will have a search bar right?
4:52:17 PM Nick Liu: Sure
4:52:23 PM me: Okay so how do I disable it?
4:52:53 PM Nick Liu: Just like how the software detects what is going to need the header, the search bar can deactivate just as easily.
4:53:02 PM me: Now here’s another thing. What if that page uses the variable $_REQUEST[‘uid’] for something else?
4:53:11 PM Nick Liu: How?
4:53:16 PM me: Say it’s about a user and you want to find people they referred
4:53:22 PM me: So you give it a uid
4:53:36 PM me: And below that it needs to get profiles of the referred users
4:53:45 PM me: Then you want to do something else with the original uid?
4:53:54 PM Nick Liu: Export
4:54:01 PM me: Yeah again it’s messy
4:54:01 PM Nick Liu: $uid = $_REQUEST[‘uid’];
4:54:14 PM me: Now say your other tool uses that $uid variable
4:54:14 PM Nick Liu: Think about your output now
4:54:22 PM me: Someone is working on it
4:54:25 PM me: And they decide hey
4:54:31 PM me: I need to use the variable named $uid
4:54:36 PM me: And they assign it to something else
4:54:39 PM me: Well
4:54:43 PM Nick Liu: Do you have any idea how ugly the output will be?
4:54:47 PM me: They don’t go check all the other scripts to see what broke
4:54:50 PM Nick Liu: And you’re calling the source ugly…
4:55:07 PM me: I assume your user profiles would look okay stacked
4:55:21 PM me: That’s all it is
4:55:29 PM me: Here’s a list of users referec
4:55:36 PM me: And then a stack of profiles
4:55:38 PM me: And done
4:55:56 PM me: With my system you just make a UserAdminList and call one function
4:56:04 PM me: And you’ve got your full list generated and formatted
4:56:29 PM Nick Liu: Or you can do that
4:56:42 PM me: How can you do that in your system?
4:56:48 PM me: You said the profile code goes in the client
4:56:55 PM me: “client code” as you call it
4:57:06 PM Nick Liu: You can take that approach that you want… if you want.
4:57:07 PM me: So there’s nothing in the class
4:57:38 PM me: Do you stop and think about what’s happening to the site?
4:57:38 PM Nick Liu: If you really want to reuse that code so many times, put it in the class
4:57:46 PM me: Well
4:58:01 PM me: Even if we used it once, we still know where it is
4:58:13 PM me: Can find it any time
4:58:24 PM me: Then in the future, if we need it elsewhere it’s right there
4:58:28 PM me: Ready to go
4:58:40 PM Nick Liu: If it’s an “always” thing, make it standard, like my StandardDB class.
4:58:42 PM me: You just saved potentially hours of compiling together information
4:58:52 PM me: It’s not an always
4:59:00 PM me: It’s only an always if you have a UserAdmin object
4:59:19 PM me: If you don’t, then you’ll never ever need it
4:59:46 PM Nick Liu: :\
4:59:52 PM me: Plus, there’s a profile of nearly every object
5:00:00 PM me: For a website, you have a profile if you need it
5:00:06 PM me: For an advertising box, a profile to see
5:00:12 PM me: You can’t put those all in the StandardDB
5:00:22 PM me: I hope you can see that gets very messy
5:00:44 PM me: Your StandardDB will get very long and hard to manage
5:00:48 PM Nick Liu: If you want to make it exceptional to StandardDB, create a StandardProfile, then.
5:00:55 PM me: Lol
5:01:03 PM Nick Liu: StandardDB just does getters and setters
5:01:05 PM me: It’s still a mess of things that relate to objects
5:01:22 PM me: What is a StandardProfile?
5:01:30 PM me: Like if I was to pick one up
5:01:37 PM me: What would it look like?
5:01:47 PM me: What could I do with it?
5:01:48 PM Nick Liu: You can get your profile output for any database information
5:02:01 PM me: Okay that’s a use
5:02:05 PM me: But what’s the object?
5:02:13 PM me: What’s the entity that’s represented
5:02:24 PM me: What’s the tangible thing you’re representing in that?
5:03:15 PM me: You can’t answer that can you?
5:03:39 PM me: It’s a central premise of object oriented programming
5:03:45 PM Nick Liu: No… I got preoccupied with an orchestra friend panicking.
5:04:05 PM me: Okay well however long you need?
5:04:14 PM me: Where can I buy a StandardProfile?
5:04:30 PM Nick Liu: What in the world…?
5:04:40 PM Nick Liu: You don’t purchase a StandardProfile…
5:04:43 PM me: What is a StandardProfile?
5:04:58 PM me: If I look at one
5:04:58 PM Nick Liu: Getting example…
5:05:55 PM me: Okay then
5:06:01 PM Nick Liu: Where’s the display method?
5:06:08 PM Nick Liu: Your display method for a “Profile”
5:06:17 PM me: You have a copy of all my code?
5:06:24 PM Nick Liu: Yes…
5:06:42 PM me: Good thing it’s outdated
5:06:52 PM Nick Liu: Okay…
5:07:03 PM me: getProfile() in UserClient or UserAdmin
5:07:16 PM me: In your copy
5:07:41 PM me: I didn’t finish it for most of the other classes because I didn’t have time
5:07:55 PM Nick Liu: That can be done in one class
5:08:14 PM me: I’m sure it can
5:08:28 PM me: I don’t see why that’s better than doing it in two classes
5:08:31 PM Nick Liu: Do that then, and override if necessary
5:08:44 PM me: That’s what I’m doing
5:08:56 PM Nick Liu: One class for getProfile(), overridden when needed
5:09:06 PM me: That’s what UserAdmin is
5:09:25 PM me: getProfile is but one example
5:09:27 PM Nick Liu: You repeat getProfile() in many other classes…
5:09:32 PM me: Yes
5:09:34 PM me: That’s the point
5:09:38 PM me: It should be standard
5:09:45 PM me: You want output about an objet
5:09:48 PM me: Any object
5:09:54 PM me: You don’t have to look anything up – just getProfile()
5:10:33 PM me: Can you honestly tell me you would never use something like that if you were coding?
5:10:36 PM Nick Liu: getProfile() can be fully automated
5:10:48 PM me: Can it?
5:10:54 PM me: How will it know what details to grab?
5:11:15 PM Nick Liu: StandardDB knows the table structure automatically
5:11:25 PM Nick Liu: It’s smart.
5:11:28 PM me: Yes but I don’t really care about obscure details
5:11:32 PM me: For example
5:11:41 PM me: I don’t care in most cases if the user is subscribed to a certain type of email
5:11:56 PM me: I don’t care what order they choose to display private messages in
5:12:03 PM me: Those are all table fields
5:12:16 PM me: I shouldn’t see their password – that’s a security breach
5:12:45 PM me: What about failed login attempt counter?
5:12:52 PM me: Is that really important?
5:13:01 PM me: The other thing is, some fields will be long and others short
5:13:19 PM me: Your StandardDB would have to deal with that (which could be done but wouldn’t be simple)
5:13:30 PM me: It’s much easier to specify once for each object
5:13:39 PM me: These are the important fields and this is what output should look like
5:14:08 PM me: Even a really smart StandardDB I think would always encounter counter-examples
5:14:21 PM Nick Liu: You would then… specify the fields you want to display
5:14:31 PM me: Yeah okay
5:14:40 PM me: What if I want a break between some fields
5:14:45 PM Nick Liu: Class::getProfile(array(“username”, “email”));
5:14:46 PM me: Say some are contact, and some are more basic
5:15:22 PM me: What about adding headers
5:15:32 PM me: What about linked fields
5:15:37 PM me: For example on a user profile
5:15:42 PM me: I might want the name of their advisor
5:15:46 PM me: Which is a separate database
5:15:52 PM me: The ID number is not very helpful
5:16:04 PM me: I’d also like to make it a link to their profile
5:16:06 PM Nick Liu: That’s insanely messy…
5:16:20 PM me: Well with a getProfile() you can just tell it what to return
5:16:25 PM Nick Liu: Of course you can use my invention of Search Adaptations, but it’s still messy.
5:16:28 PM me: Here’s the HTML code to return
5:16:41 PM me: These are the important fields
5:16:45 PM me: This is the format
5:16:47 PM me: These are the titles
5:16:49 PM me: Breaks
5:16:53 PM me: Whatever you want to put
5:16:56 PM me: As long as it’s HTML
5:17:05 PM me: You can call any other helper methods in this class or another
5:17:14 PM Nick Liu: >,,getAdvisor()->getName()
5:17:30 PM me: It’s not getting where you want it to go no
5:17:42 PM me: You’re not making progress no
5:18:10 PM me: However, I think I’ve introduced at least some complications with your version 5 and the way you’ve implemented it
5:18:26 PM Nick Liu: Heh heh… No. 😐
5:18:31 PM me: No?
5:18:40 PM me: Okay then you’re just not listening
5:18:58 PM Nick Liu: **sighs**
5:19:00 PM Nick Liu: Forget it.
5:19:16 PM me: What’s more important to you? That we use your code or that the end code is the best possible?
5:20:02 PM me: You just given up?
5:20:12 PM Nick Liu: Given up in debating with you
5:20:23 PM me: Well what did you want me to do?
5:20:47 PM me: I already said you can have the whole host on a .net and I’ll go run another on the .com – you didn’t like that
5:20:55 PM me: It’d be all your code then
5:21:04 PM me: You could completely control it all and do it however you wanted
5:21:07 PM Nick Liu: 1. You should go back to IsMyWebsite 3.0 ONLY BECAUSE IT WORKS BETTER. 2. You shouldn’t question IsMyWebsite 5.0 because we know exactly what we’re doing.
5:21:36 PM me: I can’t go back without losing data
5:21:43 PM Nick Liu: What data?
5:21:51 PM me: There are a number of new fields added to the database
5:21:58 PM me: Entire new tables
5:22:05 PM me: Entire systems
5:22:42 PM me: It’s just as bad to do that as to use your 5.0
5:22:53 PM me: Even if the end result works better
5:22:54 PM Nick Liu: Okay.
5:23:00 PM Nick Liu: Suit yourself. I’m going to eat dinner.

On the plus side, I did get a start to the developers blog, which should be very useful in training the new developers once they are found (fingers crossed they come forward).

Advertisements

Comments»

1. ismywebsite - May 11, 2011

Probably the biggest improvement from v3 to v4 was in how websites are handled. Remember in v3 how you couldn’t change anything about your website without having to go manually emailing me?

Well anyways, version 4 is missing critical features like permissions, which were ‘hardcoded’ into version 3. Literally, you had to modify the code to change them. Better than nothing I guess.

2. Deltik - May 11, 2011

>_>

3. Bryan Bartlett - May 11, 2011

Well.. I dont quite agree in the posting of private messages into public domain, but what is done is done…

My point then on this is Matt has every right to question any version of his system, especially if he doesnt have access to see how a supposed new version is working.

Easiest way to convince anyone that your system will work better is to show them WHILE it is being developed… and remember that us customers do not want you to work on a new version until the old one is stable.

Nor am I in full agreeance with working on any build live. A new version should always be designed stand alone before going live.

meeh to summerize then…

I personally do not have a problem with a Version 5 as long as 1. it is built stand alone before going live to work out all the bugs.. 2, it be done on a server that Matt has access to such as on one of our own nodes. 3. it be doen AFTER version 4 is running and funtional. and 4. any new version is done with the blessing of Matt, with him able to see the progress DIRECTLY.

Doing anything else can be legally defined as theft of intellectual property

4. Marc - May 11, 2011

Would it be impossible to create a small script to migrate websites back to version 3 (pulling data from the DB, reformatting, putting it in another database, before shutting down IMW, copying the old V3 files, and starting IME back up), work on V4/V5/V4.5 for a few more months, and then present it? Forbid registrations/invites for the while, help clients understand the current situation; I’m sure that, if you promise future stability when the new version is launched, they will accept to compromise. You could have, for example, a V3 division, running at a barebones level (just accepting websites or reviewing improvement stage websites) and the majority of the developers working together on a well-outlined and detail plan for the next version?

5. ismywebsite - May 11, 2011

It would be possible of course. Version 4 has about a couple weeks worth of work to be fully functional with every feature of version 3, and I expect it would take longer to revert to version 3, not to mention the features you would lose as a result.

Marc - May 11, 2011

Oh, if Version 4 is that close to completion, then where is the problem? Am I missing something?

John (Jcubed) - May 11, 2011

The problem is that version 4 is a real pain to work on, and has various problems server side. I doubt that version 4 is actually two weeks away from being done when bug fixing and testing are taken into account.

6. Bryan Bartlett - May 11, 2011

Marc, what your missing is some Members of the dev team started independant development on v5, leaving a gap in the v4 development. Matt has been working for last month to convince the dev team to finish work on v4 before finishing v5

7. ismywebsite - May 12, 2011

The problem is better described as very simple but different ways of doing things, which I believe are/were confusing the developers immensely.

In addition, the developers clearly prefer talking to me via Skype to get instant answers for their problems, and seem to have an aversion to using emails, which are slower yet can be more efficient.

Unfortunately, whenever I go on Skype I get bothered by a lot of clients and some more than others. These people have important and valid problems, which they’ve already sent to me via email and private message, and maybe also posted on the blog and forums. Usually it’s something really simple, and then they are happy, so I feel obligated to address that and just get it done.

I typically will answer the Skype conversations in a round robin fashion, going from one to the next in a large cycle. People seem to expect an instant reply on Skype (or they start trying to phone me, since Skype does not have a nudge feature like Windows Live Messenger did) or they start saying things like ‘Hello?’ and ‘Are you there?’ and ‘…’. If I don’t answer fast enough, sometimes I don’t even find out what they wanted, and they log out without any hope of getting it addressed.

In the interest of minimizing frustration for everyone who needs an answer, I make a list of things to do and address it AFTER I’ve finished replying to everyone. I also have a slow computer which has lag when switching between Skype and FireFox, so this minimizes the time cost of switching back and forth (generally about 30 seconds – meaning with 100 switches there’s a 50 minute cost associated).

The developers typically need answers to things which I have to look up on a browser, or download from the FTP client (an extra 10 seconds switching tabs, 10 seconds to download, and ~20 seconds to scroll to what I need or Ctrl+F). As a result, I often group them into the list of things to do after I answer the chats.

However, it becomes a serious problem when the chats never stop coming, or I have to leave before I can address the issues. That list beside my computer can get bumped under somewhere, or buried in other papers, or I could take it with me somewhere else. That’s why I took to writing things in a specific notepad, and yet that doesn’t help me if I forget to bring it with me, or lose the entire notepad.

The full extent of any emails I received from the developers (there were some to be fair) generally had the structure of an English essay, with giant blocky paragraphs and little formatting. This makes it hard to group information or figure out what is most important. Generally, you have the actual request, and extra information to accompany it that may/may not be necessary if I understand the request. You also have a number of requests that can be grouped. If I can just read a numbered list, with each item starting with the most basic information, then additional details, it’s a lot easier because:

1) I wont miss any issues due to just not seeing them when I check if I did everything.

2) I can easily find an issue I was working on solving.

3) If I understand the issue without the extra details of it, it saves time and gets a faster answer.

4) See how much more fun it is to read numbered items than essays?

Anyways, I’ve extolled the virtues of numbered lists via email enough times that you should all know how much I love to receive them so much more than giant essays.

My initial hypothesis that the developers were just incapable, or didn’t really want to help, or were somehow lazy is clearly proven wrong when they’re willing to put in the effort to build an alternate version of the site. However, at that point it was too late. They were completely going crazy about how it would be so good and they’d be finished in a month and everything would be all rosy, oh and how the new system would do everything oh so well.

And when they were pitching it to me, it sounded very similar to how things already were, or planned to be, except that it would be coded in a completely different style, use a different backend database (with a different structure – just for the heck of it), completely rewrite all the code I spent the last 8 months working on (to do approximately the same result), miss a number of core features which I didn’t feel they understood properly, and to top it off they didn’t want to include me in any of it.

Then, they claimed it would all be done in what was left of the month, and showed me a schedule which didn’t mention a single feature on it. I showed you all that schedule. And the whole thing was done very secretly without even telling me any of it.

Still, I liked the fact they’d taken ownership of the project and were willing to work so hard for it. That’s the frustrating part – how hard I worked to motivate them earlier and get them to see this as their project, and ask for their input, and really try to involve them earlier. When I started building version 4, when the basic framework was being built, I don’t think anyone though anything of it.

Why did I build version 4 in the first place? Well, because to put it nicely, version 3 was a mess of bandaids and duct tape. Core systems had problems. Like no password security. Like, no protection on the database. Numerous places could easily have had SQL injections, and there was a lot of code to sort through. Differing styles throughout, mixes of my old single space tabulated structure, different developers, etc… The website acceptance script was in 5+ separate places, just a copy and paste. Except that’s only how it started. Each version had taken a life of it’s own, with different checks in place, different acceptance emails, different default server settings files, different security. I mean cPanel would update and one of them would break, and I wouldn’t know which one, or how it failed, or anything about it because I built it a long time ago. The private messages system was a giant mess of what Nick called “client code” in the chat above. I was literally programming the same things over and over, because I didn’t even know they already existed.

So I resolved – no direct database access, coding standard for everything, security on all sensitive fields (with a dynamic key I spent a while on), we’d use objects to push the bulk of the code into a reusable format.

There comes a point in every developers life when they finally realize – hey there is a reason why they want us to code in this way, test in this way, add certain comments, do this, do that. And it’s not because of some anal retentive disorder – it’s because there are serious consequences. If you don’t value the time lost in extra development, or the time lost when systems fail, perhaps seeing a small business lose a major client because of your failure would make you understand. I want to be the kind of system that’s dependable.

Now, this is an essay like the ones I hate reading myself, so I’m going over some of the changes I’ve made in consideration of the new Version 5, to help developers understand version 4:

1) Base Classes Are Hidden.
There is one time and one time only when one needs access to a base class – copying the base constructor. Everything else can be built on top in the extended classes.

2) A Developedia With Everything.
Every system will be documented in the full detail necessary to implement them. I will password protect the wiki, however there will be no security-related details posted there.

In the future this will form a very useful reference for both future developers, and partners, who will be able to program their site on our system. They would use the same classes, able to access only their clients.

3) Relaxed Coding Standard
I’ve chosen to base the coding standard on the Drupal Coding Standard. Even though that was also ‘how someone feels it should be done’, it’s something official rather than just ‘how I feel it should be done’. It appears that my view on brace placement differs from most others, so I’ve relaxed that restriction to one of three acceptable styles. However, my view on tabulation (using spaces instead of tabs) is consistent in every PHP coding guide I’ve found. Using two spaces is not, however I believe that four is too many and the lost screen space is of negligible benefit. It’s on the wiki, which means it features a discussion page and yes it’s editable (though you should discuss first).

4) There are a lot less clients to bother me now (mostly since the shifted host – which I don’t blame them for nor do I think that was the wrong decision given recent events) so I should have more approachability on Skype. However numbered lists via email are always the preferable way to reach me.

I don’t think there’s any question that we could move forward if others are willing to also move forward.

Note that in my recent discussions we’ve reached a conclusion that these blog posts would be hidden for two months, before being re-released as part of our history here. If they disappear, that is why.

8. ismywebsite - May 12, 2011

Regarding the two week estimate, this is a matter of what could be done if we all worked together reasonably well. It’s by no means to say it would absolutely happen in 2 weeks since I may have missed critical features (there are only the two mentioned so far), and of course ongoing political battles may persist, and of course I need to finish up the wiki with a lot more information, and even with that there may be things which are not understood. Things can also fail. It’s programming after all.

However, during those two weeks we would make consistent continual progress and at every step of the path the system should be better than it started from.

9. John (Jcubed) - May 12, 2011

Just a quick note about how the coding standard for version 5 (yes Matt, there is one) was developed:

1) All the developers who would be working on version 5 were ask to code something in their preferred coding standard.

2) The coding styles were analyzed to see what most of the developers preferred.

3) The coding standard was established based on majority rule, so that the most people possible could be happy.

To me, this makes a lot more sense than finding a coding standard on the internet or making one up at random.

10. ismywebsite - May 12, 2011

It’s not a fair accusation to imply I didn’t know there was one. Of course I knew that.

There’s only a few things:

1) Even if you don’t like the coding styles of other projects, it’s still a good idea to at least look at them and see what’s standard. This should give you a starting point, and also a basis.

2) I’d already coded the entire site a specific way, and as I said, if you wanted to change the standard there’s a lot of code which needs to be changed over. I guess this doesn’t apply if you’re starting from scratch, which is in my opinion completely unnecessary.

3) By looking at other coding standard you can ensure yours is complete, and has all the sections it needs. I didn’t see the coding standard until a while in, and when I did, it was even more basic than mine (which was itself just a starting point).

4) You had a strange expectation that I wouldn’t be a developer, which as much as I’d love to not have to code, we both know that sooner or later something would happen where I’d be the only one able to fix it or maybe you’d all leave. Yes it’s hard to foresee something like that happening, with all the dedication and hard work and motivation, but I’m sure a year from now will be as different as a year ago. So why were my opinions not given any weight (not even equal to another develop).

5) Of course, you keep me in the dark about everything. You know that efficiency and readability is important to me. You know I’ll have feedback on it. Yet you hid it from me for this reason (which I remember was said in a chat). So why do you net even care what I think about the way code I’ll have to work with and depend on is written?

My choice of using the Drupal Coding Standard gives me a complete coding standard which is ready to use, proven, and complete. And I didn’t have to spend hours debating anything or writing it all.

11. Bryan Bartlett - May 12, 2011

Im curious about something in coding standards..

Why use double space over tabs? I use tabs in all my PHP design (perhaps because ill sometimes have commands nestled 4-5 deep)

When I program I do it manually with Notepad and my keyboard. if i need something nestled 4 deep, 4 tabs is a lot easier for me to type and track than 8 spaces.

Someone perhaps explain to me the advantages of double space over tab?

12. Bryan Bartlett - May 12, 2011

Your argument is sound. Ive always used Tabs probably because I self taught myself PHP by modding phpbb (which uses a tabbed approach)

13. Marc - May 12, 2011

Tabs won’t work across editors – some will do it two spaces wide, others 4 spaces, others more. Chrome, for example, adds ways too many spaces when looking at the source.
Plus, for web-based editing, you have to manually copy and paste a tab, unless you’re using a special editor.

14. ismywebsite - May 12, 2011

Most editors are able to treat spaces pretty much identically to tabs, so you get consistency and it’s workable.

15. Brendan McNiff (cobrastrike) - May 12, 2011

There is no benefit to using spaces versus tabs.

The prevalent argument around that tabs do not work correctly in web-based editors is one that should be dropped. It is of no consequence as there should never be code being edited live (such as through cPanel File Manager). Anytime you are going to edit an application, you should get the current copy of said file and retain it as a backup. You can then locally edit the file and copy it over to your development sandbox (if you have a proper developmental setup).

16. Marc - May 12, 2011

Editors like Gedit can substitute tabs for spaces – so you just have to type Tab and it adds 2, 3, 4, etc. spaces.

17. ismywebsite - May 13, 2011

I believe you have that backwards. Editors will allow conversion from tabs to spaces transparently, however the reverse means reprogramming a full decade of habitual programming with spaces.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: