Comment On My Kind of Random

Taking over the maintenance of a web application can be a bit scary. Depending on its age and size, there's a good chance that it lives in a developmestuction environment, has no known documentation, and was built with an amalgamation of technology ranging from custom C++ CGI engines to the latest and "greatest" AJAX toolkit. [expand full text]
« PrevPage 1Next »

Re: My Kind of Random

2007-06-01 09:07 • by Einsidler
I'm sure there must have been a perfectly logical reason for this at the time, damned if I know what it is though.

Re: My Kind of Random

2007-06-01 09:13 • by ParkinT
"Taking over the administration of a web site..." is always a scary thought.

This is classic self-assuring security.
It appears (to the coder at the time) to be a great scheme for keeping the site safe.
Unfortunately, not enough coders think like hackers.

Re: My Kind of Random

2007-06-01 09:29 • by H|B
Guid "authentication", the latest trend in security.

Re: My Kind of Random

2007-06-01 09:33 • by Aidan (unregistered)
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.

Re: My Kind of Random

2007-06-01 09:40 • by s (unregistered)
139694 in reply to 139693
Aidan:
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.


80-column terminals!

Re: My Kind of Random

2007-06-01 09:41 • by An apprentice (unregistered)
I don't see the problem. These ids surely look random enough. The developer has successfully managed to avoid the problem of weak passwords!

On a more serious note, this is stupid but not necessarily a wide-open security flaw. If these "random" "ids" are present only in links on administrative pages, then in order to find them out, you must already know an "id" (otherwise you get Access Denied). Isn't it more or less equivalent to guessing admin's password in a normal system?

Re: My Kind of Random

2007-06-01 09:45 • by Keith Hackney (unregistered)
No it isn't like that. Otherwise it wouldn't be on this site. You see?

CAPTCHA = IAMAROBOT

Re: My Kind of Random

2007-06-01 09:49 • by abx
139697 in reply to 139695
An apprentice:
I don't see the problem. These ids surely look random enough. The developer has successfully managed to avoid the problem of weak passwords!

On a more serious note, this is stupid but not necessarily a wide-open security flaw. If these "random" "ids" are present only in links on administrative pages, then in order to find them out, you must already know an "id" (otherwise you get Access Denied). Isn't it more or less equivalent to guessing admin's password in a normal system?
Yeah, I don't think security is the biggest issue here, but it's a very twisted perception of the concept of "random", as the title suggests, and maintenance of the backoffice system sure must be a drag, having to copy these strings everywhere in all links.

Re: My Kind of Random

2007-06-01 09:57 • by ChrisLively (unregistered)
Most likely the coder wanted it to be random, but then just couldn't figure out how to make that work.

Re: My Kind of Random

2007-06-01 09:58 • by The MAZZTer
One thing here is that it's impossible to have different tiers of administration. Anyone in the interface can do anything, I assume. Even if it checks the username for an access level, with the same ids used everywhere it would be trivial for someone who has partial access to the interface to get full access if they know the head administrator's username.

I'm guessing a password isn't checked, otherwise the randomids are more pointless than a WTF.

The problem with this is eventually one of the following will happen:

1) Someone will post a screenshot of the admin interface to show someone something. If they forget to block out the randomid, or assume it's just for them and won't work for others (a reasonable assumption, imo), we have a problem. Although the ids are long enough that it probably wouldn't be entirely compromised by a single screenshot.

2) Someone will save the HTML source of a page somewhere to show someone something, or to remind themselves of some information therein. With all the randomids in the HTML file intact.

3) Anyone with access to the source code can have full administrative access to the application as well (in a perfect world, all apps would be designed so that even if the source code is widespread, the app can't be cracked... usually because the passwords are hashed and stored in a DB somewhere).

4) Someone will post a link to an administrative page publicly (ie administrator A showing administrator B where particular functionality is), assuming only those with the proper access rights can access it, except anyone can use the link and gain full administrative access.

Granted, administrators could be explicitly instructed to make sure randomids are never posted publicly, but that's only a band-aid over a wound that needs stitches.

Plus there's one last problem in which the annoying fix would probably be neglected by users:

5) BROWSER HISTORY

Re: My Kind of Random

2007-06-01 10:01 • by Mitch (unregistered)
It's amazing to me how many people don't know about .htaccess. I've added that to the list of questions I interview people with.

Re: My Kind of Random

2007-06-01 10:11 • by Burgz (unregistered)
139702 in reply to 139700
.htaccess = bad, session + MySQL = good.

captcha = doom

Re: My Kind of Random

2007-06-01 10:14 • by Mitch (unregistered)
139703 in reply to 139702
Burgz:
.htaccess = bad, session + MySQL = good.


my point is they aren't attempting to create any access control lists here. Just permission = yes or permission = no

that's why .htaccess. I shudder to think what this person's session vars would look like.

Re: My Kind of Random

2007-06-01 10:46 • by Matthew (unregistered)
139706 in reply to 139698
ChrisLively:
Most likely the coder wanted it to be random, but then just couldn't figure out how to make that work.


It probably is a random string. I just wasn't dynamic. So it was generate-once-use-many.

Re: My Kind of Random

2007-06-01 11:07 • by Josh (unregistered)
Um... ever heard of output_add_rewrite_var?

Re: My Kind of Random

2007-06-01 11:20 • by sidonath
139714 in reply to 139697
abx:



You've beat me with the XKCD reference :)

Re: My Kind of Random

2007-06-01 11:28 • by Iain Collins (unregistered)
139715 in reply to 139702
Burgz:
.htaccess = bad, session + MySQL = good.


Actually, .htaccess is not bad, any more than/etc/passwd is bad.

Using LDAP, Net Info or Active Directory or PAM is more sophisticated than using plain old /etc/passwd and a shadow file for login authentication, but it's not always warrented or the right thing to do - the same thing applies to SQL v htaccess.

There are times when you are writing something and don't happen to be using an SQL DB already (or at least not one suitable for storing session data in). Maybe you are instead talking to an LDAP DB, or a number of other backend XML interfaces, or a remote SQL database where have only read access.

In that sort of instance, if you are only implimeting a few accounts (say between 1 and few hundred users), your service is going to be a lot more robust if you don't rely on an unnecessary additional point of failure like an SQL DB.

In addition you may have an NFS or SAN share (or snapmirror/rsync setup to mirror content geographically distanct hosts) that allows you to propagate an .htaccess file to multiple hosts.

There are plenty of great libraries for managing .htaccess and .htgroup files (and it's pretty trivial too) in a range of lanauges, so it's very easy to create and manage them (and of course the format itself is very simple).

You can even use info fields to store user data, like an email address for automatic password re-sets.

Re: My Kind of Random

2007-06-01 11:33 • by Iain Collins (unregistered)
That should be automated password resets (as fun as automatic password resets are ;-).

Captcha: muhahaha

Re: My Kind of Random

2007-06-01 12:21 • by rjnewton
139736 in reply to 139693
Aidan:
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it!


Oh, really? Geez, I could swear we were seeing this because someone was trying to debug it, or at least to understand what is going on in case of future need for debugging.

Aidan:
I like to just tuck that kind of thing away off the side of the screen.


So how does the maintainer know that all the line contains is the key-babble? Code that is not visible is probably the code containing the bug. Whatever may be wrong with generating security keys in HTML or JS source, I give a big thumbs up to the choice of formatting here. I just wish more developers were aware of the proper use of concatenation operators. There would be a lot less WTF code to see here, I suspect.

Re: My Kind of Random

2007-06-01 13:33 • by Zylon
Someone remind me what "developmestuction" means? That has to be the worst neologism ever. I can barely figure out how to pronounce it, let alone what it's trying to convey.

Re: My Kind of Random

2007-06-01 13:53 • by ObiWayneKenobi
139764 in reply to 139756
Zylon:
Someone remind me what "developmestuction" means? That has to be the worst neologism ever. I can barely figure out how to pronounce it, let alone what it's trying to convey.


It basically means FUBAR; sites up with random page naming, test pages alongside production, admin=false as "security", cryptic code, etc.

http://worsethanfailure.com/Articles/The_Developmestuction_Environment.aspx

Re: My Kind of Random

2007-06-01 14:05 • by Zylon
Ah yes, that's the article. And still, a horrible word. Looks like someone typoed "developmestruction" (development + destruction, whee!").

Re: My Kind of Random

2007-06-01 14:20 • by Duston (unregistered)
Is it me, or does "copying a random string" sound like an oxymoron?

Re: My Kind of Random

2007-06-01 14:43 • by w00t (unregistered)
139776 in reply to 139715
Iain Collins:
Burgz:
.htaccess = bad, session + MySQL = good.


Actually, .htaccess is not bad, any more than/etc/passwd is bad.

Using LDAP, Net Info or Active Directory or PAM is more sophisticated than using plain old /etc/passwd and a shadow file for login authentication, but it's not always warrented or the right thing to do - the same thing applies to SQL v htaccess.


Using plain old .htaccess usually implies using plain old Basic Authentication.

Just a quick update; Basic Authentication sends the password, in plaintext (well, base-64, but that's just an encoding), in the header of each request, until you close the browser. There's not even a logout button.

If you use some sort of session, you can simply ignore sessioncookies that are too old; if someone snoops part of a session after having logged in, even if the password was sent in plaintext during the login procedure, they can only get access to the current session (which they already have by virtue of snooping anyway).

There's of course a better solution, digest authentication, which uses an MD5 of the password and a nonce - but the downside to that is that an MD5 hash is made on every request. Also, there's still no logout button. It's much better for performance to just establish a session using a cookie.

Re: My Kind of Random

2007-06-01 15:54 • by rjnewton
139787 in reply to 139776
w00t:

If you use some sort of session, you can simply ignore sessioncookies that are too old; if someone snoops part of a session after having logged in, even if the password was sent in plaintext during the login procedure, they can only get access to the current session (which they already have by virtue of snooping anyway).

There's of course a better solution, digest authentication, which uses an MD5 of the password and a nonce - but the downside to that is that an MD5 hash is made on every request. Also, there's still no logout button. It's much better for performance to just establish a session using a cookie.


Better yet is a combination. Store passwords only as hashes, match on initial login and issue a ticket with server-side matching. Send the ticket to a page that does nothing but re-authenticate based on the ticket rather than password, and start the interactive session once logged in with the ticket, which can be updated with each request to keep the session current. I prefer to use hidden form fields, rather than cookies, though. That way, you can set an extremely short [30 seconds-2 minutes] timeout on the initial login, to prevent refresh exploits, while allowing for a longer timeout during the interactive session.

Re: My Kind of Random

2007-06-01 16:18 • by alkhimey (unregistered)
139789 in reply to 139697
xkcd is one of the best web comics.

Re: My Kind of Random

2007-06-01 16:22 • by David (unregistered)
They could have at LEAST used constants in an include file to make the links easy to maintain. Unbelievable.

Re: My Kind of Random

2007-06-01 16:31 • by bif
139794 in reply to 139693
Aidan:
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.


I used to agree with this philosophy until I spent two days trying to figure out why one of the fields of a struct was simply nonexistent even though I could plainly see it in the source code. It turns out that each member of the struct had a long comment after it /* old school */ C-style. The comments were long and very descriptive, but ran far off the edge of my text editor's screen.

Can you smell the WTF yet? The comment on the field before my missing field was not closed, making the missing field become part of the comment...sigh.

I didn't figure this out until I printed out the code.

There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.

Re: My Kind of Random

2007-06-01 17:11 • by RaspenJho
139798 in reply to 139688
Another concern is that if a user USED to be an adminstrator, and has since been demoted, his shortcuts to the admin pages could still work.

Re: My Kind of Random

2007-06-01 19:22 • by Ornedan (unregistered)
139804 in reply to 139794
bif:
Aidan:
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.


I used to agree with this philosophy until I spent two days trying to figure out why one of the fields of a struct was simply nonexistent even though I could plainly see it in the source code. It turns out that each member of the struct had a long comment after it /* old school */ C-style. The comments were long and very descriptive, but ran far off the edge of my text editor's screen.

Can you smell the WTF yet? The comment on the field before my missing field was not closed, making the missing field become part of the comment...sigh.

I didn't figure this out until I printed out the code.

There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.
A syntax highlighting editor might also help. Despite what some might say, Real Programmers(TM) don't use Notepad.

Re: My Kind of Random

2007-06-01 19:29 • by nwbrown
139807 in reply to 139695
An apprentice:
I don't see the problem. These ids surely look random enough. The developer has successfully managed to avoid the problem of weak passwords!

On a more serious note, this is stupid but not necessarily a wide-open security flaw. If these "random" "ids" are present only in links on administrative pages, then in order to find them out, you must already know an "id" (otherwise you get Access Denied). Isn't it more or less equivalent to guessing admin's password in a normal system?


Except that
a) There is no way to remove someone from the access list. Once they have access the only way to kick them out is to rewrite the application.
b) If someone were to copy and paste a URL and send it to someone, they could unknowingly give admin access to the site.
c) Its written in PHP.
d) Access is stored on any computer the site is accessed from in the browser history.
e) Everything else that is horribly wrong with this system.

Re: My Kind of Random

2007-06-01 19:30 • by MK (unregistered)
139808 in reply to 139794
bif:
There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.

Or maybe using an editor that implements at least rudamentary syntax highlighting...?

Anything else could pretty much be considered a WTF (in the old sense) in itself.

Re: My Kind of Random

2007-06-01 19:40 • by chrismcb
139809 in reply to 139794
bif:
Aidan:
How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.


I used to agree with this philosophy until I spent two days trying to figure out why one of the fields of a struct was simply nonexistent even though I could plainly see it in the source code. It turns out that each member of the struct had a long comment after it /* old school */ C-style. The comments were long and very descriptive, but ran far off the edge of my text editor's screen.

Can you smell the WTF yet? The comment on the field before my missing field was not closed, making the missing field become part of the comment...sigh.

I didn't figure this out until I printed out the code.

There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.


Get a BIGGER screen!

Re: My Kind of Random

2007-06-02 07:15 • by qbolec
Well, I believe that this GUID serves as a ticket.
The concept of a ticket is used to make it harder for a malicious forum user to force an administrator that has RememberMe checked, to visit <img src=admin_panel.php?action=give_user_the_power&user=17>.

So you simply combine the tickets, with any favorite authentication and authorization method, to make sure, that if somebody issues any action in admin_panel.php, she is:
1. authenticated (for example by RemeberMe coockie - which is bad:P)
2. authorized (for example by checking in SQL)
3. has visited the site by consciously clicking a link, or (preferably) by POSTing a form

What is realy bad here, is that the GUID was copy&pasted all over the place, instead of being either generated (preferably from user-related data and a validity time span), or being made a global constant

Re: My Kind of Random

2007-06-02 07:20 • by qbolec
139820 in reply to 139809
bif:


Can you smell the WTF yet? The comment on the field before my missing field was not closed, making the missing field become part of the comment...sigh.

I didn't figure this out until I printed out the code.


So you have a color printer, but a black-and-white screen?

Re: My Kind of Random

2007-06-04 04:41 • by Anonymous Tart (unregistered)
139852 in reply to 139700
Mitch:
It's amazing to me how many people don't know about .htaccess. I've added that to the list of questions I interview people with.



.htaccess == bad , httpd.conf == good

Enabling .htaccess requires apache to try to open a .htaccess in every directory from the depth that your file is at to the root, and merging the results. Anything you want to specify in a .htaccess can be specified in a <Location> or <Directory> directive.

Its amazing to me how many people dont know that. I've added that to the list of questions I interview people with. Fools.

PS

Theres f all wrong with BasicAuth, serve with TLS.

Re: My Kind of Random

2007-06-04 07:29 • by Comanche (unregistered)
139858 in reply to 139700

It's amazing to me how many people don't know about .htaccess. I've added that to the list of questions I interview people with.

It's even more amazing to me how many people mistakenly associate .htaccess files exclusively to password protection / authentication.

.htaccess files are a means to configure the HTTPd server when you don't have access to the main configuration.

Proper comment would've been "It's amazing to me how many people don't know about Allow/Deny/Require/Satisfy."

I've added you to the list of people I wouldn't hire.

Re: My Kind of Random

2007-06-04 10:44 • by savar
139867 in reply to 139794
bif:


There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.


You're understating it. I'm a big fan of joel on software, and he's quoted various metrics before about how productivity and efficiency vary with whether a piece of code fits on a single screen. For instance, two functions that are each one screen long are more easily understood and less likely to be buggy than a single method that is two screen lengths.

He also buys his developers big screens so that they are more likely to view a piece of code in a single screen.

Re: My Kind of Random

2007-06-04 10:47 • by savar
139869 in reply to 139808
MK:
bif:
There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.

Or maybe using an editor that implements at least rudamentary syntax highlighting...?

Anything else could pretty much be considered a WTF (in the old sense) in itself.


If you're using vi (and not vim, which doesn't exist in many places), I'd be really surprised to see you using color cues.

Re: My Kind of Random

2007-06-04 11:36 • by Iain Collins (unregistered)
139880 in reply to 139776
w00t:
Just a quick update; Basic Authentication sends the password, in plaintext (well, base-64, but that's just an encoding), in the header of each request, until you close the browser. There's not even a logout button.


To address those two issues:

Just as with other protocols like POP, IMAP and SMTP AUTH, authentication over HTTP with Basic Auth involves details being sent encrypted if you using SSL, but sent in clear text only if you are not, and applies whether you are using Basic Auth or an HTTP POST to send the username/password pair.

(As you rightly say, .htaccess does imply the use of Basic Auth, but of course you don't have to be using Basic Auth with an .htaccess file, you could be handling that in your application.)

Regarding providing a logout button, - you can actually provide a logout button even with Basic Authentication. IIRC there are two ways to do this. For example, you can generate a cookie with a random string and using that string as the realm you request when prompting (and subsequently verifying) client credentials.

By creating a button (powered by Javascript or CGI) that changes the contents of the cookie, you change the realm (causing the current auth credentials being supplied by the client to be rejected - and requring them to be re-entered again if the user tries to re-enter a protected area of the site).

(The other method I've kludged did something odd to fool the client into changing the details it was trying to auth using either something like a suitably crafted URL in the form http://invalid:login@www.example.com/ or HTTP header faffery, IIRC).

Now, this may all seem a bit bizzare, but there are situations when you are dealing with distributed systems and data that isn't stored in an SQL database and where using a database just for session storage would be far more trouble than it's worth and for technical reasons doesn't fit with the design (e.g. when you just have some admin users looking at some static back end content, and hitting a different distributed host each time they make an HTTP request).

Obviously common sense is required when weighing up if this sort of thing is appropriate or just fruity - I'm certainly not advocating that anyone avoid using sessions as a default position for your average website.

Re: My Kind of Random

2007-06-04 11:43 • by Iain Collins (unregistered)
139883 in reply to 139880
...of course I should say we are both primarily refering to ".htpasswd" files when talking about .htaccess in this instance, before some pedant points it out. 8)

Re: My Kind of Random

2007-06-04 14:10 • by Pingmaster
139901 in reply to 139794
And that, my friends, is why all development environments come with syntax highlighting so that if there is an issue with a missing comment symbol, or quotation, or semicolon, or period etc.. it's pretty obvious since the code in the following line is the wrong colour. If people didn't code in Notepad, they wouldn't spend two days figuring out that a chunk of code was commented out.

Re: My Kind of Random

2007-06-04 19:08 • by Your Name (unregistered)
139975 in reply to 139809
Some editors (like vi) don't truncate lines, they wrap them, so no matter how much smaller the screen width is than the line you're looking at, you see the whole line.

I feel that's a better method for me than the syntax highlighting stuff, because I'm old and all those colors are a bit confusing. I imagine if I'd grown up with color, it'd be fine.

Re: My Kind of Random

2007-06-04 21:36 • by Old Wolf (unregistered)
139981 in reply to 139756
Zylon:
Someone remind me what "developmestuction" means?


DEVELOPMent
tEST
prodUCTION

Re: My Kind of Random

2007-06-23 06:43 • by Aaron (unregistered)
142358 in reply to 139695
Access logs are indiscriminate in what they record, and sometimes, wide open to google and others

Re: My Kind of Random

2008-11-28 21:35 • by 855 (unregistered)
丽水货架
金华货架
衢州货架
余杭货架
萧山货架
临安货架
德清货架
平湖货架
海宁货架
桐乡货架
奉化货架
余姚货架
慈溪货架
诸暨货架
义乌货架
瑞安货架
永嘉货架
安徽货架
合肥货架
芜湖货架
马鞍山货架
铜陵货架
宣城货架
巢湖货架
山东货架
济南货架
轻型货架
轻型货架
中型货架
重型货架
悬臂货架
模具货架
阁楼货架
南京货架
镇江货架
苏州货架
扬州货架
徐州货架
南通货架
盐城货架
淮阴货架
连云港货架
常州货架
浙江货架
无锡货架
上海货架
杭州货架
湖州货架
嘉兴货架
宁波货架
台州货架
绍兴货架
衢州货架
温州货架
金华货架
萧山货架
海宁货架
临安货架
慈溪货架
余姚货架
建德货架
路桥货架
仓储笼
登高车
料箱
液压搬运车
堆垛车
平台车
塑料托盘
工作台
网片
南京网片
镇江网片
苏州网片
南通网片
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
小游戏
激情电影
美容BB霜免费赠送
英语天地
手机游戏下载

设计之家
美容时尚网
美食在线
<p>轻型货架
轻型货架
轻型货架
轻型货架
轻型货架
中型货架
中型货架
中型货架
中型货架
重型货架
重型货架
载物台车
堆垛货架
巧固架
货架
货架
货架
固定小推车
手推车
双层静音推车
铁板手推车
手动液压平台车
提升机
单叉手动液压平台车
双叉手动液压平台车
多层框架车
登高车H1000
塑料托盘
登高车H1400
铁屑车
南京货架
货架
仓储货架
货架公司
货架厂
角钢货架
轻型货架
货架
南京货架
中型货架
重型货架
贯通货架
通廊货架
模具货架
抽屉货架
移动式货架
密集货架
立体货架
阁楼货架
悬臂货架
滚轮式货架
整理架
托盘
钢托盘
塑料托盘
仓储笼
上海仓储笼
江西仓储笼
料箱
钢制料箱
物流台车
登高车
工具柜
浙江工具柜
工具车
安徽工具车
工作台
整理柜
手推车
静音手推车
铁板手推车
搬运车
手动托盘搬运车
液压手动堆垛机
液压手推平台车
圆桶搬运车/油桶搬运车
电动托盘搬运车
高空拣选车
电动/电瓶叉车
库房货架
货架设计
轻型货架
角钢货架
中型货架
中量型货架
重型货架
重量型货架
托盘货架
贯通货架
通廊式货架
阁楼货架
悬臂式货架
模具货架
抽屉货架
辊轮式货架
移动式货架
网片
护栏
隔离网
工具柜
安全工具柜
工具车
移动工具车
置物柜
整理架
挂板架
工作台
线棒货架
输送轨道
输送轨道机
输送带
不锈钢制品
仓储笼
折叠式仓储笼
可堆周转箱
钢托盘
托盘
钢制托盘
网格料箱
料箱
钢料箱
钢制料箱
物流台车
重型货架
镇江塑料托盘
扬州塑料托盘
无锡塑料托盘
塑料托盘
求购货架
轻型货架
中型货架
托盘货架
贯通货架
马鞍山仓储笼
宁波重型货架
杭州轻型货架
杭州中型货架
杭州重型货架
杭州悬臂架
杭州4S店货架
宁波轻型货架
宁波中型货架
盐城货架
南通货架
苏州货架
镇江货架
南京货架
工业货架
嘉兴货架
常州货架
北京货架
辽宁货架
广东货架
河北货架
山西货架
吉林货架
湖南货架
福建货架
天津货架
部队货架
上海货架
青田货架
义乌货架
瑞安货架
温岭货架
舟山货架
诸暨货架
上虞货架
慈溪货架
余姚货架
奉化货架
海宁货架
嘉善货架
平湖货架
临安货架
建德货架
萧山货架
衢州货架
余杭货架
金华货架
温州货架
台州货架
绍兴货架
宁波货架
嘉兴货架
湖州货架
杭州货架
浙江货架
芜湖货架
合肥货架
安徽货架
威海货架
青岛货架
济南货架
山东货架
洛阳货架
河南货架
西安货架
陕西货架
四川货架
武汉货架
湖北货架
句容货架
仪征货架
江都货架
太仓货架
昆山货架
吴江货架
江阴货架
张家港货架
常熟货架
金坛货架
丹阳货架
无锡货架
常州货架
连云港货架
淮阴货架
徐州货架
东台货架
盐城货架
扬州货架
南通货架
苏州货架
镇江货架
南京货架
阁楼货架
模具货架
悬臂货架
重型货架
中型货架
轻型货架
张家港货架
江阴货架
海安货架
金坛货架
巢湖货架
芜湖货架
马鞍山货架
合肥货架
安徽货架
温岭货架
阁楼货架
悬臂货架
模具货架
重型货架
路桥货架
东营货架
临安货架
义乌货架
铜陵货架
诸暨货架
慈溪货架
余姚货架
余杭货架
萧山货架
海宁货架
衢州货架
金华货架
温州货架
台州货架
绍兴货架
宁波货架
湖州货架
嘉兴货架
浙江货架
杭州货架
上海货架
无锡货架
常州货架
淮阴货架
连云港货架
徐州货架
盐城货架
扬州货架
苏州货架
镇江货架
上海货架
南京货架
苏州货架
中型货架
轻型货架
合肥货架
安徽货架
威海货架
青岛货架
济南货架
山东货架
洛阳货架
河南货架
西安货架
陕西货架
四川货架
武汉货架
湖北货架
句容货架
仪征货架
江都货架
昆山货架
太仓货架
吴江货架
江阴货架
无锡货架
轻型货架
重型货架
中型货架
悬臂货架
模具货架
阁楼货架
丹阳货架
金坛货架
常熟货架
常州货架
淮阴货架
盐城货架
徐州货架
扬州货架
南通货架
苏州货架
南京货架
东台货架
中型货架
重型货架
轻型货架
苏州货架
悬臂货架
中型货架
轻型货架
中型货架
萧山货架
阁楼货架
昆山货架
温州货架
浙江货架
常州货架
南京货架
轻型货架
重型货架
海宁货架
奉化货架
余姚货架
慈溪货架
上虞货架
诸暨货架
舟山货架
温岭货架
瑞安货架
义乌货架
青田货架
上海货架
轻型货架
中型货架
重型货架
悬臂货架
模具货架
阁楼货架
工业货架
求购货架
马鞍山货架
铜陵货架
宣城货架
巢湖货架
浙江货架
杭州货架
湖州货架
嘉兴货架
宁波货架
绍兴货架
台州货架
温州货架
金华货架
余杭货架
衢州货架
萧山货架
建德货架
临安货架
平湖货架
嘉善货架
吴江货架
江阴货架
昆山货架
太仓货架
仪征货架
句容货架
湖北货架
武汉货架
四川货架
陕西货架
西安货架
河南货架
洛阳货架
山东货架
济南货架
青岛货架
威海货架
安徽货架
合肥货架
芜湖货架
南京货架
镇江货架
苏州货架
南通货架
扬州货架
盐城货架
徐州货架
淮阴货架
连云港货架
常州货架
东台货架
丹阳货架
金坛货架
常熟货架
张家港货架
江阴货架
仓储笼
瑞安货架
义乌货架
青田货架
上海货架
温岭货架
诸暨货架
慈溪货架
余姚货架
奉化货架
海宁货架
嘉善货架
平湖货架
临安货架
建德货架
萧山货架
衢州货架
余杭货架
金华货架
温州货架
山东货架
洛阳货架
河南货架
西安货架
合肥货架
安徽货架
威海货架
青岛货架
济南货架
芜湖货架
马鞍山货架
宣城货架
铜陵货架
浙江货架
巢湖货架
湖州货架
杭州货架
嘉兴货架
绍兴货架
宁波货架
台州货架
中型货架
阁楼货架
模具货架
悬臂货架
重型货架
工业货架
无锡货架
南京货架
南通货架
苏州货架
镇江货架
扬州货架
盐城货架
连云港货架
淮阴货架
徐州货架
金坛货架
丹阳货架
常州货架
张家港货架
常熟货架
昆山货架
吴江货架
江阴货架
太仓货架
句容货架
仪征货架
江都货架
武汉货架
湖北货架
四川货架
台州货架
轻型货架
杭州货架
湖州货架
杭州货架
隔离网片
贯通式货架
模具货架
悬臂货架
重型货架
中型货架
轻型货架
重型货架
悬臂货架
悬臂货架
悬臂货架
模具货架
模具货架
模具货架
4S店货架
4S店货架
阁楼货架
仓储笼
料箱
登高车
塑料托盘
轻型货架
轻型货架
轻型货架
中型货架
中型货架
中型货架
中型货架
角钢货架
轻型货架
轻型货架
中型货架
中型货架
重型货架
重型货架
模具货架
模具货架
悬臂货架
悬臂货架
阁楼货架
阁楼货架
料箱
料箱
仓储笼
仓储笼
贯通货架
网片
丽水仓储笼
余杭仓储笼
金华仓储笼
温州仓储笼
台州仓储笼
绍兴仓储笼
宁波仓储笼
嘉兴仓储笼
湖州仓储笼
杭州仓储笼
常州仓储笼
连云港仓储笼
淮阴仓储笼
徐州仓储笼
盐城仓储笼
扬州仓储笼
南通仓储笼
苏州仓储笼
镇江仓储笼
仓储笼
中型货架
中型货架
重型货架
重型货架
重型货架
重型货架
重型货架
模具货架
模具货架
模具货架
模具货架
模具货架
悬臂货架
悬臂货架
悬臂货架
悬臂货架
悬臂货架
阁楼货架
阁楼货架
阁楼货架
阁楼货架
轻型货架
中型货架
重型货架
海宁货架
常州料箱
连云港料箱
淮阴料箱
徐州料箱
盐城料箱
扬州料箱
南通钢制料箱
镇江料箱
南京料箱
无锡料箱
轻型货架
南通货架
轻型货架
重型货架
杭州货架
宁波货架
衢州货架
余姚货架
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
不锈钢管
小游戏
激情电影
美容BB霜免费赠送
英语天地
手机游戏下载

设计之家
美容时尚网
美食在线
<p>重型货架
无锡货架
苏州货架
中型货架
重型货架
模具货架
悬臂货架
中型货架
重型货架
江都货架
泰州货架
太仓货架
昆山货架
吴江货架
张家港货架
常熟货架
溧阳货架
金坛货架
扬中货架
丹阳货架
淮阴货架
无锡货架
常州货架
徐州货架
轻型货架
上海货架
马鞍山货架
蚌埠货架
安徽货架
仪征货架
常熟货架
常州货架
盐城货架
南通货架
镇江货架
江苏货架
下沙货架
临安货架
义乌货架
嘉善货架
余姚货架
衢州货架
金华货架
台州货架
宁波货架
嘉兴货架
杭州货架
浙江货架
杭州货架
湖州货架
嘉兴货架
宁波货架
绍兴货架
杭州货架
湖州货架
嘉兴货架
绍兴货架
台州货架
液压搬运车
登高车
合肥货架
句容货架
太仓货架
金坛货架
徐州货架
镇江货架
苏州货架
常州货架
张家港货架
江阴货架
连云港货架
常州货架
无锡货架
丹阳货架
扬中货架
金坛货架
常熟货架
张家港货架
江阴货架
昆山货架
仪征货架

Re: My Kind of Random

2009-08-05 08:37 • by Craig (unregistered)
281010 in reply to 139804
Ornedan:

bif:

Aidan:

How come he/she felt the need to break the string over multiple lines? It's not like anyone's going to be debugging it! I like to just tuck that kind of thing away off the side of the screen.





I used to agree with this philosophy until I spent two days trying to figure out why one of the fields of a struct was simply nonexistent even though I could plainly see it in the source code. It turns out that each member of the struct had a long comment after it /* old school */ C-style. The comments were long and very descriptive, but ran far off the edge of my text editor's screen.

Can you smell the WTF yet? The comment on the field before my missing field was not closed, making the missing field become part of the comment...sigh.

I didn't figure this out until I printed out the code.

There is something to be said for keeping the code on the screen. Or maybe for using // instead of /* */.

A syntax highlighting editor might also help. Despite what some might say, Real Programmers(TM) don't use Notepad.


I couldn't agree more. Real Programmers(TM) use vi!
« PrevPage 1Next »

Add Comment