« first day (1554 days earlier)      last day (1626 days later) » 
00:00 - 17:0017:00 - 00:00

12:00 AM
RELOAD!
[rubberduck-vba/Rubberduck] 3 opened issues. 6 issue comments.
 
1:00 AM
0
A: A function that tells you if a particular set of data exists in a listbox

CominternErrors and Omissions The UBound2 function is simply incorrect. You are operating on the assumption that every array is base zero with positive indexing... Private Sub ExampleOne() Dim bar() As Long ReDim bar(-10 To -5) Dim idx As Long For idx = LBound(bar) To UBound(bar) ...

Well that ^ took longer than I planned...
 
^ @KySoto It's done with love.
 
1:19 AM
^
 
1:34 AM
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4127?src=pr&el=h1) Report
> Merging [#4127](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4127?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/4df720727b79b29cd87363152ce5f7beef3446d8?src=pr&el=desc) will **increase** coverage by `1.04%`.
> The diff coverage is `92.03%`.


```diff
@@ Coverage Diff @@
## next #4127 +/- ##
=======================
> # [Codecov](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4127?src=pr&el=h1) Report
> Merging [#4127](https://codecov.io/gh/rubberduck-vba/Rubberduck/pull/4127?src=pr&el=desc) into [next](https://codecov.io/gh/rubberduck-vba/Rubberduck/commit/4df720727b79b29cd87363152ce5f7beef3446d8?src=pr&el=desc) will **increase** coverage by `1.04%`.
> The diff coverage is `92.03%`.


```diff
@@ Coverage Diff @@
## next #4127 +/- ##
=======================
[rubberduck-vba/Rubberduck] build for commit 8802fccd on unknown branch: AppVeyor build succeeded
 
 
2 hours later…
3:42 AM
@Hosch250 How'd your interview go?
 
 
2 hours later…
5:49 AM
0
Q: SpaceInvaders Second Iteration

learnAsWeGoI have revamped with some of Comintern's improvements implemented. I still need time re his presenter class. Maybe its because I am not familiar with bitmaps? Basically instead of controls we would represent these objects with sets of pixels on an X by Y grid of pixels? Which could then be "pres...

 
 
2 hours later…
8:08 AM
Cooeee!
Anyone know how in VBA to initialize the COM object queue using a list? I.e. construct it with multiple items not just one with adding individually please? Kinda like this:
15
Q: How to Enqueue a list of items in C#?

Joe CabezasUsing lists I use List<int> list = new List<int>(); list.AddRange(otherList); How to do this using a Queue?, this Collection does not have a AddRange Method. Queue<int> q = new Queue<int>(); q.AddRange(otherList); //does not exists

 
 
3 hours later…
11:29 AM
@IvenBach thanks! I took a quick look, but will have to read through in depth.
Interesting. Ctrl-<backtick> wasn't working for the initial parse in Access and I had my coffee in my mouse hand, so I hit Alt-b to bring up the RD menu. The RD status bar said Pending and the first item on the RD menu is Refresh, but Refresh was disabled because, I guess, it refreshes, but won't do an initial parse?
I'd guess that's , but seems a bit... odd... Maybe it could be enabled and read Parse if the initial parse hasn't been done, just like the status bar button...
 
11:56 AM
@this In the MSDOS 8.3 days? no, I'm not 100% certain, but I'm pretty sure that a file name of 0123456789.txt would have simply been truncated to 01234567.txt. There was no smart-renaming.
I think it was probably around Win95 time that copying myFile.xls and pasting it back into the same directory would automatically name it myFile (2).xls. Later versions change the pure numbering to * - Copy (n).* format. In case you couldn't tell that it was a copy...
 
12:48 PM
@FreeMan if it's by design, it shouldn't be...
 
there might have been a bit of snarkieness in that pseudo-tag...
 
\o
 
@IvenBach Not very good.
I kind of made it clear I wasn't actively looking for a new position, and he promptly said "sorry, we've only got positions for people with more than one year of experience."
 
1:25 PM
What kind of commands are RSet/LSet? They do have quite a particular syntax...
Dim SomeText
SomeText = "0123456789"
RSet SomeText = "Right->"
will output " Right->"
I've not come across such commands until now (that I'm aware of).
The output is from ?SomeText, of course. So RSet behaves like a function in that it takes some arguments and does something with them, assigning a return value. But the syntax is nothing like that.
 
Inarion, it's used to right-align your text
and with LSet, it's useful for binary copying of your UDT.
example:
Private Type x
  a As Integer
  b As Integer
End Type

Private Type y
  a As Long
End Type

Public Sub DoIt
  Dim x As x
  Dim y As y

  x.a = 1
  x.b = 1

  LSet y = x

  Debug.Print y.a

End Sub
With RSet, you normally use pre-formatted string of a fixed length. Used for building text-only tabular output....
 
1:49 PM
@this lightbulb moment
although, it's kind of cryptic nonetheless
 
IKR?
and it has to be a UDT
You can't LSet to a Long directly
 
It's a bit more clear than a call to CopyMemory.
 
but then again, VBA is kind of weird in that regards.
and safer, too.
You don't have to worry about GPF with a LSet
 
Well that's no fun.
 
says the guy who enjoys blowing up Excel
 
1:53 PM
I've really only ever succeed at getting it to implode. Explode would be better - I envision cleaning cells off the walls of my office.
2
 
lol
oh one caveat. No dynamic arrays. (and strings, either,unless it's fixed length)
since neither are pinned to the UDT structure.
 
wonders whether @MathieuGuindon uses LSet and RSet in his StringFormat class.
 
never used either in my lifetime
learned about their existence with Rubberduck's grammar
 
Not nearly as esoteric as Circle and Scale, but they are definitely beasts of a different era.
 
@Comintern I created Subs Foo and Bar, then called Bar from Foo and halted execution inside Bar, then went looking for the AddressOf Foo and Bar in Excel's memory. i.e. searching for the call stack.
 
2:07 PM
ironically I vividly remember using 2px dark gray + 1px light gray Line to make "3D-looking" section/divider lines on forms in VB6
 
@this Wizardry! o.O
 
I think I found it, although there were 2 other pointers between the pointers I expected. I need to create a deeper call stack and see if it's easier to reverse engineer.
@MathieuGuindon not vivid, but that does ring a bell
@Comintern PSet is even odder
 
wait no I'm confusing things. wasn't there an actual "Line" button in the form designer toolbox?
 
@ThunderFrame Doesn't a standard call push the parameters onto the call stack along with the return address?
 
pretty sure I was drag-n-dropping them
so, not-quite-vividly
 
2:10 PM
@Comintern there weren't any params (I was starting out simple)
 
Hmmm... I wonder if the modules carry an implicit this pointer to the static instance. That could explain one of them. They wouldn't be like library calls - you still need a "reference" to the server for "Module1" if that makes sense.
 
@Comintern yeah, and the other Long could be flags, because the View Call Stack dialog seems to know about non-VBA code
 
@FreeMan if something doesn’t make sense about it let me know. I have a couple more in mind for how to work in the VBA IDE and getting the most out of it with hotkeys.
 
As an aside, I need to use a splitter/panel in VBA, neither of which exist. I'm thinking of using a label along with mouse events, and wrapping it up in a class. Any better ideas, short of writing an actual control?
 
@ThunderFrame I wonder if having a debugger attached pushes anything else onto the stack. I.e. a hook.
 
2:16 PM
@Comintern or maybe a line number?
 
That would be a cringe-worthy implementation.
 
@Comintern I meant a cross-reference to the position in the p-code/execode, rather than the actual line number.
 
Gotcha - like a symbol pointer.
 
Yep, so if you want to read the callstack, you need to know: where to find it, what all of the procedure/parameter addresses resolve to in the TypeLib, and what each line of p-code resolves to in the VBE. i.e. Wayne's call stack black magic sits atop a lot of other black magic.
@MathieuGuindon I was thinking about RD's tagline: "Bringing the VBE into the 21st century". I guess technically, we've been bringing the VB IDE into the 21st century. The VB Editor is very much on the (Avalon) roadmap, but we haven't actually done anything to that yet, other than autocomplete (everything else is an IDE feature) And in any case, hauling the entire IDE is a much bigger undertaking, and the editor is just one small part of the IDE.
 
@Comintern Frankly it really gets my goat that VBA understand how to reference a module but it simply can't use it like a variable.
 
2:32 PM
@this You might be able to calculate the base address of the function table and pass that around as raw pointer. It would require the caller to have some knowledge of the module though.
Damit, now you got me considering whether I can wrap a class around that to get a "true" VBA singleton.
 
I suppose but TBH, I think it's more valuable to be able to create standalone VB project
that can be linked by any hosts
Because that way, we can leverage the project boundary
and also be able to ship code that 'll work in any VBA host
not just Excel add-in limited to Excel host, Access library limited to Access, etc.
That would also make nuggets very a real possibility
 
@this +1
 
That sounds like an excellent way to propagate macro viruses.
 
and that's news?
it always has been a vector for virus for quite a while...
 
Corel draw lets you reference a project that doesn't have any document modules... That's getting pretty close to what you need. I wonder if MS deliberately made it impossible, to prop up sales?
 
2:45 PM
@ThunderFrame according to @mansellan it was possible to create standalone projects with Office 200? developer editions.
 
@Comintern welp i asked for it on that CR post
 
but yeah, you had pay a bit extra for those old developer editions.
then all of sudden they pulled it. Maybe because of macro virus incidents, IDK.
 
@ticker - that sounds like a better question for Woodworking than Stack Overflow...
 
it was pretty painful realize just how crap a coder i am
 
But frankly, I don't see how you can not avoid it being an attack vector.... Literally any DLL is an attack vector.
 
2:47 PM
any code is an attack vector...
 
^^
 
The Unviewable+ company seems to have made it possible to have execode only Excel files (like ACCDEs)... I wonder if the project binary code be tweaked to allow opening in any host? IIRC, the only project properties that preclude a project opening are the version of the original VBA editor and the bitness. So you just need a way of removing the host-specific reference.
 
it's a matter of your risk tolerance.
 
@KySoto Best to know that you need to improve than never knowing that you were in need of improvement. It's the only way to get better.
2
 
@this I have Developer XP. IIRC, it was a DLL that got created.
 
2:48 PM
^^ That's what CR is for. I'd rather have my good code ripped to shreds than my bad code hand waved.
 
its a struggle to not take it personally when i KNOW it isnt, hes just doing an honest review
its like owwwww
 
@ThunderFrame I once naively thought that you could reference any VBA and was disappointed to find out that Excel cannot reference an Access project and vice versa. I think I tried changing file extension but that didn't work either.
 
Separate yourself from your code, padawan.
You might be the best person on earth, but you just aren't an expert in this field yet.
 
you mean ever right?
 
@Hosch250 Frankly my spider sense goes off when anyone says "don't worry, I'm an expert in this!"
 
2:50 PM
LOL.
Even Eric Lippert and Jon Skeet?
 
@this yeah, I tried it too. I think it successfully added the reference, but then promptly blew up the host... And I'd saved the change, so it blew up the host whenever I opened the file.
 
Almost inevitably after they've made the statement, they manage to screw up massively and say, "Well, that wasn't what I was expecting...."
 
Totally had a moment of that at work recently.
 
@this lol yeah sounds like "WAIT!! I know RegEx!"
 
dunning kruger anyone?
 
2:51 PM
Turns out I wasn't connected to the right local DB.
 
@MathieuGuindon you do know that the Regex Analyzer is currently a bit totally broken, right?
 
and code metrics
 
Totally not my fault for saying exactly that... cough
@MathieuGuindon huh? those are ded?
 
"we've been running this website securely for 15 years without your help, and we've never had a security incident.... Next day... Website offline, database purged.
 
damn I really need to get stuff I put into RD back on track
 
2:52 PM
"we've been running this website securely for 15 years without your help, and we've never had a security incident.... Next day... Website offline, database purged."
 
all I get is a blank toolwindow
@Vogel612 me too!
 
@MathieuGuindon you did parse?
 
@Vogel612 me 3x
 
@Vogel612 yup. @IvenBach repro'd too
 
then I need to hope I'm able to blame it on Hosch for making the UI pretty
 
2:54 PM
lol
 
See, even chat baulks at an over-confident security assertion
 
but first: coffee
 
@this This was me a couple of weeks ago. Now I launch a full blown Access instance to get there... it's pretty slow. But my users are used to much worse things. (Not from me...) So I guess they'll accept it just fine.
 
@Comintern i never knew about using or instead of + to get multiple flags on a messagebox
i didnt actually know it was an option
 
I have to say I was quite surprised when testing that process, that stepping (F8) into a call to another VBA host will end up opening that host's VBE and marking the active code line there...
@KySoto I learned it from the RD folks. ;)
 
3:00 PM
i dont even know why it matters
 
@KySoto compare the result of ?vbInformation Or vbInformation to ?vbInformation + vbInformation
 
i could see that causing an issue since you are adding the same value twice
but if they are different values why would it matter?
 
with a bitmask, you are not really supposed to "add"
it's kind of the same reason why you shouldn't 1 + "1"
it's legal but it might not do what you think it should do
 
right that makes sense
its the same flag
but if you add 1 + 2
 
vbInformation Or vbInformation communicates that you are using a bitmask
not just some integers
 
3:03 PM
hm
 
@KySoto Basically what @this said. Adding can work with bit-flags, but it can also create a bunch of problems in some situations.
 
IMPOV, it has more to do with telling the reader what your code is doing.
Oring a bitmask is more accurate portrayal of what you are doing with those flags.
 
^ what you intend to do with them...
 
for same reason DateAdd("d", 1.5, Now() is better than Now() + 1.5
Yes, thanks for better phrasing
Just because they produce same results doesn't mean they're equivalent.
Sounds weird but it is logical when you think about it
 
@FreeMan Wow, I'm slow today. I just got that... Create Table from Tree
2
 
3:09 PM
oh by the wya, @Comintern i had an issue once when i was doing the whole if debugmode thing
where i left off the else, and it wouldnt properly go the else path
and one other thing, if you don't do a resume at the end of the error handling portion of the procedure and just left the function end, doesnt that error state carry over into a calling procedure?
because i could swear that when i used to do that when i had error catching code that should have caught an error, didnt i changed the function called to have the resume and the error didnt go up
ugh my words are getting derpy, sorry
 
@KySoto No:
Public Sub Caller()
    Test
    Debug.Print Err.Number
End Sub

Public Sub Test()
    On Error Resume Next
    Err.Raise 6
    Debug.Print "returning"
End Sub
 
It's actually the GoTo out of the error handling that's harmful
 
@Comintern Lol, that was actually a good one. :D
 
Note that the Debug.Print Err.Number still prints "6", but it is considered handled in the Caller.
 
right, but you are using on error resume next
if you AREN'T using that
 
3:14 PM
Then it propagates up the stack until it is handled.
 
and caller ends up throwing an error
 
Just like if you'd explicitly called On Error Goto 0
 
Hmm. OERN changes things.
 
even if it had an error handling block
 
this won't carry over:
Public Sub callit()
    callme
    Debug.Print Err.Number
End Sub

Public Sub callme()
On Error GoTo oops
    Debug.Print 1 / 0

oops:
End Sub
 
3:15 PM
@this Correct. In that case the error is handled in callme. OERN is not a handler.
 
I think that explains why some templates put in On Error GoTo 0 in the cleanup section.
 
hm
its looking like i had a wierd one of error, and it colored my whole error handling experience
though i do tend to do things like close recordsets and the like
 
It's still pretty pointless though:
Public Sub Caller()
On Error GoTo foo
    Test
foo:
    Debug.Print Err.Number
End Sub

Public Sub Test()
    On Error GoTo 0
    Err.Raise 6
End Sub
 
just not always (if it doesnt have one
so when it ends it closes out a recordset, error or no
 
@Comintern not in this case, though:
Public Sub Caller()
On Error GoTo foo
    Test
foo:
    Debug.Print Err.Number
End Sub

Public Sub Test()
    On Error Resume Next
    Err.Raise 6

ExitSub:
    On Error GoTo 0
    Exit Sub
End Sub
 
3:19 PM
something like
Error_Exit:
    If Not rs = Nothing Then
        rs.Close
        Set rs = Nothing
    End If
    Exit Sub
error_handler:
    StandardErrorBox "Save", Err, Errors
    Resume Error_Exit
End Sub
 
Uh, how bad exactly is doing something like that: For iCol = 1 To rst.Fields.Count * (1 + CInt(someFlagToSkipLoop))? (It made me feel smart for a moment, but I think in actual code, I likely shouldn't do it... Clarity and all...)
 
if you wanna jump out of your for loop
 
@KySoto see, when not using watchdog, that's why I think it's best to OERN inside the exit
 
you can use exit for
 
I would have written something like....
 
3:21 PM
@this That's even more pointless. That's a 3 line version of Err.Clear using GoTo's
 
@this OERN ?
 
@KySoto yeah, but then it's an extra line :D (I agree that it would be much clearer and less error prone -> better)
 
Error_Exit:
    On Error Resume Next
    rs.Close
    Set rs = Nothing
    Err.Clear
    Exit Sub
error_handler:
    StandardErrorBox "Save", Err, Errors
    Resume Error_Exit
End Sub
which is why I hate the old way of doing things and use watchdog. :)
 
On Error GoTo 0 still doesn't do anything there.
 
so its better to use on error resume next than to just check if the object is not nothing?
 
3:23 PM
@Comintern yet if you comment out the On Error GoTo 0, the error state carries over?
 
Unless you expect Exit Sub to throw?
@this Err.Clear.
That's what it's for.
 
Yes, you're right. That's more idiomatic
As I said earlier:
8 mins ago, by this
I think that explains why some templates put in On Error GoTo 0 in the cleanup section.
(not very good ones but that's what MZ Tools 3.0 was doing, IIRC)
it really bothered me but didn't connect the dots why.
 
I obviously haven't tested it, but it's probably more performant too, because it isn't rearranging the state of the debugger.
 
for some reason i thought it was better to negate the possibility for the error instead of just on error resume next'ing it
 
@KySoto it's more that you shouldn't have any errors when you're cleaning up. If you do, it's a lost cause anyway.
 
3:26 PM
right
well if i lose connectivity to the database server
 
and there are more reasons why there could be an error, though.
 
the recordset never could be set to an instance of an object
so i cant perform a .close
and that DOES happen.
 
right, but you can have a situation where you ahve a valid recordset and you still can't .close it
 
what?
 
so the test for nothing can fail, but you still can't close it.
 
3:27 PM
ADO?
 
@KySoto Depends on the situation. I'll use it to "inline" error handling:
On Error Resume Next
DoTheThingThatCanThrowA6
If Err.Number = 6 Then
    'Whatever
End If
On Error GoTo 0
 
i frequently work with DAO recordsets
how the heck could rs.close fail
 
example:
Public Sub derp()
    Dim rs As DAO.Recordset

    On Error GoTo derp

    Set rs = CurrentDb.OpenRecordset("MSysObjects")
    rs.Close

exity:
    On Error GoTo 0
    If Not rs Is Nothing Then
        rs.Close
    End If
    Set rs = Nothing
    Exit Sub
derp:
    Resume exity
End Sub
This isn't very subtle but there are ways where it can fail (e.g. because you did a db.Close which can cause its children recordsets to become disconnected)
but you must handle the possibility. #BeltsNSuspenders
 
i dont believe i have ever actually used a db.close in code
but valid
 
@KySoto It's a review of the code itself, not the individual that produced said code.
 
3:33 PM
yeah, separating that is difficult
logically i know that anyway
but then i also want to understand the why's of his critique
so why is xyz thing the right way to do things?
 
More experience with failure will help you learn that.
@MathieuGuindon What's repro'd? Can't tell from chat so far.
 
no content in the code metrics tw
 
I get content.
 
so in my standardErrorBox function, i technically dont need to pass in the errObject because the function just gains access to it by default?
 
Yep. You can call Err anywhere to get the current state of the error object.
 
3:40 PM
VBA.Information.Err -> global function
 
also on the IsArray function --------_____________________________------------
 
@KySoto have you read Joel On Software?
 
how the heck did i not see it
Joel who?
2
 
 
i started muddling my way through VBA like 2-3 years ago
 
3:41 PM
@KySoto Spolsky
 
with only crappy VB.net habits
 
he wrote the spec for VBA, and is Stack Exchange / Stack Overflow's CEO & co-founder
 
that blog is totally worth checking out
 
@this Hrm... So OEGT0 effectively invokes Err.Clear?
 
@IvenBach Assuming you're talking the Code Metrics RD feature in the VBE - it works for me as well. (3751-pre)
 
3:44 PM
@IvenBach any OE** statement will reset the err.
I also understood that Exit ** would do the same thing but from tests above, it's not the case if we're exiting with an OERN
 
wth, code metrics work now
 
It was all in your imagination.
 
FWIW I don't like that there's no way of seeing at a glance where the problematic areas are. kinda defeats the purpose
 
Excluding when I was trying to add the vertical split bar, I've always gotten results with CodeMetrics.
 
Needs moar beer! (I'm off to start the weekend. Cya around!)
 
3:47 PM
@Inarion later!
 
@Comintern getting back to the start of your post stating that the purpose of the function is unclear, the whole point of the function is to see if a "row" of data already exists in the listbox
 
> I like the *look* of the revamped Code Metrics toolwindow, however UX-wise, the grid was much better. Not being able to see at a glance (or with a quick scroll-through) where the problematic areas are, is a problem - IMO it defeats the very purpose of the tool.

In no particular order:

- Double-clicking a module or member should navigate there
- Selecting a module should display a grid in the RHS pane with all the members and their respective metrics.
- Selecting a member should disp
 
because i frequently end up using listboxes to visiblely store data (so the operators can see it) and i needed a way to check if the data already existed
 
so that led me to never envisioning that i would ever have a non zero based array. (usually when i call the function i use array(value1,value2,value3) for the datapoints checked
 
4:07 PM
@KySoto why not query?
 
because they are adding data to the listbox that will be saved
also i dont use bound forms
 
so an example situation that i am using it for, we have an application where people need to report a non conformance for parts, they have a 2d barcode with a lot number. they scan the lot number in, then enter the quantity non-conforming
then they click the add button, and it adds it to the listbox so that when they click save, they can save everything at once. well the checklist2 function is there so they cant enter duplicate data
there are a couple of other areas ive used it in where more datapoints are possible to overlap
i just cant remember them off hte top of my head
 
> I once drove our Microsoft support team in Israel to distraction by accidentally changing both Arabic and Hebrew locales to display dates right-to-left apparently Arabs really do read dates right-to-left but Israelis use left-to-right dates even when they are embedded in right-to-left Hebrew text.
 
> IMO this is a useless nano-optimization, and it's not refactoring-friendly; TypeName(Me) will always return the actual class' name, whereas renaming the class and then forgetting to update the constant can lead to confusing error logs/messages. If your program's performance is fine-tuned so hard that TypeName(Me) makes any kind of a noticeable difference, you're done - stop tweaking it, it's as efficient as it will ever get.
^ my latest Excel-L reply
"use a constant, TypeName(Me) is much slower - here, ran a million times, took that many ticks, compared to 0 for the const"
 
4:19 PM
why even use TypeName, anyway? They never give meaningful information.
e.g. no distinction between ProjectA.Class1 vs ProjectB.Class1
 
I do it rather often
Err.Raise 5, TypeName(Me), message
my point was that if their performance is down to TypeName(Me) making a difference, then they might as well inline all procedure and function calls, and embed precompiled assembler instead of writing readable VBA code.
 
Makes sense - I was thinking type comparison
I remember someone posting a sample on VBExpress or whatever where you could inline assembly in VBA.
 
> The present slogan is the brain-achingly oxymoronic “Diet Dr. Pepper: There’s Nothing Diet About It” – really? Seems like one ought to change the name then, if the name of one’s product is so misleading as to require its complete and utter disavowal in the slogan.
 
@Hosch250 Like "I can't believe it's not butter!" "butter"?
 
LOL.
 
4:27 PM
Society is showing the level of derpitude it's achieved.
 
> Advertisers love pseudopredicates. Once you realize that they exist you see them all the time. Advertisers love them because they make no testable claim which could be shown to be false in a court of law. Rather, they rely on either the irrational belief that “more” anything means “better”, or upon your brain’s ability to fill in the rest of the objects which they intend you to infer.
 
^ The Mr Snaffleburger corporation is very fond of those.
 
@KySoto I was referring to the purpose of the UBound2 function specifically.
 
@this "I can't believe it's a plastic emulsion of transformed polysaturated fats!" was a distant 2nd
3
 
lol
 
4:32 PM
Betcha that nobody at the plant eat the same product they make out
 
@Comintern oh... now i feel extra dumb there
though really, having now found the isarray function, having invalid arrays hitting ubound is less likely now
i really really dont know how i never found that particular function
 
IsArray doesn't test to see if it's initialized though. For that, check the linked answer.
Dim foo() As Long
Debug.Print IsArray(foo) '<-- true
Debug.Print UBound(foo) '<-- runtime error
 
@this there was an actual heated debate in the 1980's in Canada, at the end of which it became law that it was illegal to colour margarine in order to make it look like butter
 
oh really?
so they're colored red or what?
 
...it's white
 
4:38 PM
Margarine. The other white spread.
 
lol.
 
I can work with that...
 
Me, just avoid the nasty stuff that is margarine. They're good for giving migraines, nothing more.
 
margarine is outright disgusting if you think for half a second of how it's made and what it actually is
 
IDK, they're pretty good for giving coronary artery disease too.
 
4:40 PM
another stupid thing that's everywhere is palm oil. it's solid at body temp
 
It's like mayonnaise if you substitute hydrogen for the eggs?
 
> Unlike my crazy friends, I never prank called people, but I prank answered them all the time. You phone me, you take that risk. The moral: send email.
 
Haven't seen that. The current popular thing is coconut oil
 
> Having two voice lines in the house (one for my 300 baud modem on the Commodore 64, of course) led to ample opportunities for consecutive calls from clueless telemarketers. On the second call I'd just answer with "Don't say anything! I have a mysterious fifth sense! My psychic powers tell me that your name is Helen, and you want to sell me... magazine subscriptions! Yes?"
 
@this look at the ingredients list of any industrially-made pastry, or try to find a brand of cookies that doesn't have modified palm oil in it. it's everywhere - because it's cheap.
 
4:45 PM
hmm. I'll have a look. Thankfully I don't buy them anyway.
 
@Hosch250 Slow day at work?
 
Yeah.
Waiting for a mock up and some verbiage.
So reading Eric Lippert.
 
mind you, in the US you already have high-fructose corn syrup in everything. that shit is illegal in Canada.
 
At least it's halfway relevant to my position :P
@MathieuGuindon Meh. It's just organic molecules...
 
so is palm oil
 
4:47 PM
Yeah, HFCS is just awful. It's practically impossible to avoid if you go to your standard grocery store and buy packaged foods. We opt to cook at home so that helps avoid HFCS.
 
HFCS is the US producing WAY too much corn for its own good, and figuring out a way to sell it
 
But the Ethanol!
It's green!
 
I do wish they'd get over the tariff already.
 
We grow so much we have to find creative ways to burn it.
 
4:50 PM
We are actually subsidizing farmers to grow corns
 
^ there
 
(Not to mention that in the south it burns dirtier than gasoline unlike in the north for some peculiar reason.)
 
as opposed to say... buying sugars from Communist Cubans!!! OH NOES!
 
Mmm.... commie sugar.
Makes good commie rum.
 
4:51 PM
Meh. I don't care where it came from. Sugar is much preferable than HFCS
and frankly, we'd be doing cubans a favor if we bought from them.
 
You'd care if you made it into rum.
 
so you make corn into whiskey instead
 
Pretty sure sugar's still sugar whether it's grown in a communist soil or in dicatorial soil.
 
If you've ever tried a micro-distilled rum, you'll know what I mean. The reason they spice captain morgan's is to make it taste like, well, rum.
@this Nope. Capitalists will plant sugar beets.
 
Communist Beets = Capitalist Beets. Communist Sugar = Capitalist Sugar. Capitalist Beets ≠ Communists Sugar. What's your point?
 
4:54 PM
They grow sugar cane in the south.
 
sweet fun fact: in Canada sugar must be refined. so all the hippies who think they're putting "raw sugar" in their eco-friendly coffee are actually putting refined white sugar that was reprocessed and coloured
 
#Irony
 
LOL. What was the reasoning for requiring refining?
 
no clue
probably something to do with some industrial lobby, like everything else
 
probably to protect hippies from getting sick
 
4:55 PM
lol
 
99% of laws can be traced to some kind of self-serving lobby.
Corn farmers here aren't stupid.
they'd rather watch reruns of Hee-Haws while gov't pays them big bucks for growing corns that nobody needs.
 
I never understood the whole "un-refined sugars" thing. If you miss what they took out, well... molasses?
 
^ brown sugar = white sugar + molasses
 
there's lot of people who think that "processing" is the debbil
but hey, i put some veggies in oil in my frying pan.... OH NOES I M PROCESSING!
 
@this if it involves margarine, I can agree with that
 
4:57 PM
Sure, but you have to explain what "processing" actually entails.
everyone thinks, IDK, you're adding some shitty chemical and that's "processing"
but the definition doesn't work well all time.
 
if you want unprocessed food, kill your own chickens and grow your own carrots
 
^
imagine asking eco hippies to do that.
 
Are the chickens processing the food or something?
 
yeah. it's called "digestion", I think.
 
lol
 
4:59 PM
on that note, it's fry day. off to McD's
 
"Oddest thing, the chickens are making margarine in the chicken coop. It's behind their still."
 
00:00 - 17:0017:00 - 00:00

« first day (1554 days earlier)      last day (1626 days later) »