Speaker 1: How'd you like to listen to dot NetRocks with no ads? Easy?
Become a patron for just five dollars a month. You
get access to a private RSS feed where all the
shows have no ads. Twenty dollars a month, we'll get
you that and a special dot NetRocks patron mug. Sign
up now at Patreon dot dot NetRocks dot com. Hi,
this is Carl Franklin.
Speaker 2: And this is Richard Campbell.
Speaker 1: We've got two special shows coming up soon, episode nineteen
ninety nine and two thousand.
Speaker 2: For episode nineteen ninety nine, we're collecting people's y two
k stories what did you do to help the Y
two k event not actually happen?
Speaker 1: And for episode two thousand, we're going to be sharing
stories about how dot net shaped your career.
Speaker 2: We have a special page at dot netroocks dot com
slash voxpop where you can record messages for us that
we can play on these special episodes.
Speaker 1: So tell us what you did for Y two k
and what dot net means to you, and of course
how long you've been listening to dot net rocks.
Speaker 2: So go to dot netroocks dot com slash vox pop
now and leave us a message before the thought of
operates like whiskey left in a glass overnight.
Speaker 1: Do it? Hey, welcome back to dot net Rocks. I'm
Carl Franklin and I'm Richard County. Kathleen Dollar is here
with us. We're going to be talking to her about,
you know, what she's up to lately and all that.
But this is episode nineteen hundred and ninety two. Maybe
we should start with what happened that year? All right,
bunch of stuff, bunch of stuff. It's busy here where
you want to start? Well, Rodney King la riots very sad.
Bill Clinton defeated George W. Hw Bush. The Cold War
was declared over by the US and Russia. South Africa
Zobe Union yep, theory yep. Then before the Soviet Union
then Russia right yeah, South Africa voted to end apartheid,
and the Bosnian War began. Of course, Hurricane Andrew Let's
see Queen Elizabeth dubbed nineteen ninety two her Ennis horri
bliss Horrible year due to family scandals and a fire
at Windsor Castle.
Speaker 3: So Robin Williams one of his favorite movies I Really
Like You Did is Aladdin. So Elatin came out that
year too.
Speaker 1: Oh yes, Aladin came out. Yeah, some good movies.
Speaker 2: Don't miss out. The North American Free Trade Agreement and
NAFTA was signed that year, and so is the Masterche Treaty,
which is the beginning of the European Union.
Speaker 1: Wow, okay, amazing. And while we're on it, Richard, why
don't you tell us about tech, science and space. In
nineteen ninety two.
Speaker 2: It's a crazy year for shuttles. This is the first
year that Endeavor the replacement for Challenger flies, and so
there are eight Shuttle missions this year and devor a
fly twice once it is made in flight to do
a reboost of a satellite, Intel Sat six three, and
again for one of the three Space four space Lab
missions that happened that year. So lots of they You
don't realize this, but there was a bunch of different
space labs. They were reconfigurable, and so Discovery, Atlantis, Endeavor,
and Columbia all fly space Lab missions. The Restaurantal satellite
deploys on the Russian side now because it's nineteen ninety two,
they do their first mission back to mirr With the
breakup of the Soviet Union in July fifteen and one
last space flight, and that is in September, the final
flight of a Titan three rocket boosting the Mars Observer
to Mars, although it will not arrive and I'll wait
until we next show to tell the story of Mars Observer,
because the loss of Mars Observer changed the way NASA
approached satellites going forward.
Speaker 1: Right from that. Yeah, they lost contact with it. They
didn't know what happened right now.
Speaker 2: About three days before it was supposed to do its
orbital insertion, they were powering things up. It looks like
there was a problem with the fuel system and the
vehicle exploded, which is unfortunate because it was a billion
dollar mission. That's why I was flying on a Tight three.
It was huge, wow, and they took all This is
where a smaller, faster, cheaper comes from Dan Golden's idea
where they take the replace the spare instruments from Mars Observer,
they spread it across four other satellites that'll go to Mars,
two of which will also fail, so at least some
of the sensors will get to Mars successfully. But the
building of these massive one off exploratory satellites will never
happen again. They'll stay small after this. On the computing side,
this is the year that Deck announces their Alpha CHIPPE
sixty four bit risk processor. Yeah, it is one are
the chips. They'll be supported by NT. When that's available,
there will only be a MIT full of computers. A
few different companies will buy the build these. Eventually, as
Deck disappears, the alfship will be acquired by Compact, who
will eventually phase it out in favor of the Intel
Itanium chip that was wildly successful.
Speaker 1: Winnos three one right.
Speaker 2: Yeah, Windows three one comes out that year, which is
a great year for that, and also Visual Basic two
and VB for das.
Speaker 1: I remember it's.
Speaker 2: Also the year that Microsoft produces the Microsoft Developers and
then Network MSDN.
Speaker 1: Yeah. I was working at Cress and Software and writing
with Q and a column for then before Visual Basic
Programs Journal, I think it was called Basic Pro magazine.
And we got called into a meeting with the guys
at Microsoft on the on the Quick Basic team and
Basic seven pds, and we were they were contemplating selling
it to us, and they were like, what would you
do with it? And we said, well, we just keep
supporting it and blah blah blah, and then they said
no and came out with VB DOS interesting, thus putting
a nail in the coffin of Basic seven PDS. I
think because there was no memory left over for your code.
It was all filled with windowing stuff. Yeah.
Speaker 2: Yeah, the overhead so large. Yeah. A couple other hardware tidbits.
A company called sun Disc you now know them as
sand Disc Manufacturers, the first solid state drive at SSD
for IBM and sample quantities. Also, Intel introduces PCI, or
peripheral component in your connects. So if you're talking about
PCs back in the day, the original PC and XT
had the eight bit PC bus. As the two eighty six,
thir eighty six and forty six is come out, they
released the sixteen bit ISA bus. They'll later be a
bus called ESA, although it was not particularly popular. This
is also the year that another replacement bus announced called
Visa Local Bus, but nobody does this. PCI rapidly becomes
the popular standard. It will later be replaced by both
AGP in the late nineties, and then finally what we
use today, PCI Express.
Speaker 1: The first two words of toy boy PCI and AGP.
There you go.
Speaker 2: More Operating Systems OS two, the IBM Eparty system, the
thirty two bit edition is released. Also, Linux is released
under the GNU, which is canoes not Linux GPL license.
So that's all the OS's I think. IBM puts out
the very first think pad and from the very beginning
with the track point pointer, the little rubber looks like
a pencil eraser nub in the middle of the keyboard.
From the very first version. And just so you know
it's the first version. The display on this laptop is
ten inches and it's a TFT LCD.
Speaker 1: I want it so bad, couldn't afford one.
Speaker 2: They weren't. They're a big deal, last piece of hardware,
and I want to pull a couple of software ones.
Apple CEO John Scully announces the Newton, calling it a
Personal Digital Assistant a PDA. It won't actually start shipping
on nineteen ninety three, and it'll be dead by nineteen
ninety seven. But you know that's the beginning of that.
Speaker 1: Well, you know, it wouldn't have been bad, but it
only came in one flavor fig.
Speaker 2: But you had to learn how their language for how
to draw on it, right. Yeah, they couldn't read regular handwriting.
On the Internet side of things, This is the year
that the Joint Photographic Experts Group standardizes and image format
we know as JPEG. Yeah, and a guy named Mark
Cahill coins the term surfing the Internet right, and two
pieces of a software past the Language of Stuff. ID
Software releases Cassel Wolfenstein. Oh Yeah, and Adobe puts out
a Photoshop two point five, which is not that big
of a deal except it's the first version released for Windows.
Speaker 1: Nice.
Speaker 2: That's all I got.
Speaker 1: Well, let's talk about the top ten albums nineteen ninety two.
I'll make it quick, Sonic Youth's Dirty Album. Popular singles
are one in Sugarcane, Countdown to Extinction by Megadeth. The
popular singles there Symphony of Destruction, Sweating Bullets. Mary J.
Blige put out What's the four to one one? Real
Love You Remind me, Sweet Thing, the Bodyguard, Whitney Houston.
I will always love you. I'm every woman and run
to you. Who could forget Whitney? She was so good
that she had an amazing year. Two Yeah, Billy Ray
Cyrus Achy, Breaky Heart Lord, that's.
Speaker 3: The one I wanted you to not miss if you
hadn't got that when I was gonna jump in with
that ache.
Speaker 1: Breaky Heart was that year number six. I think that
might have kicked off the line dancing craze. I'm not
sure if it was going strong before that. The album,
of course, is called Sun Gave All Pearl Jam Wow,
some great singles, Jeremy Alive. Even Flow ten was the
nineteen ninety two fifth most popular album of that year.
You two's Aktung Baby Huge, Huge in nineteen ninety two
one mysterious ways, even better than the real thing. Who's
going to Ride Your Wild Horses? Yeah? So goodrim Automatic
for the people. Everybody hurts Man on the Moon Drive,
The Sidewinder Sleeps Tonight, amazing album. The chronic by Doctor
Dre absolutely a smash hit. This is number two, Nothing
but a g Thang Dre Day and Let Me Ride
or the singles, and the number one album of nineteen
ninety two, Eric Clapton Unplugged, Awesome, Tears in Heaven, Acoustic Layla,
all those great songs he just cleaned up in nineteen
ninety two. So anyway, that's that's it for our reminiscing.
I guess we should go on to better No Framework
awesome all right?
Speaker 3: Man?
Speaker 1: When he got.
Speaker 2: Oh, what's t unit.
Speaker 1: Well, I'll tell you it's not. Tune it.
Speaker 4: To it.
Speaker 2: I don't know.
Speaker 1: Yeah, tu n it t it's a modern testing framework
for dot net that uses source generated tests. Ooh, it's
parallel by default, parallel execution, and it has native AOT
support built on Microsoft Testing platform. Is faster than traditional
reflection based frameworks and gives you more control over how
your tests run. And more importantly, our friend Simon Kropp
loves it. Okay, however, he asked us, by us, I
mean the guys in the app nex slack, who's running
tea unit? And the answer was, what's t unit? Nice?
Speaker 2: I think that was my line?
Speaker 1: What's that? So there you go know it? Learned it?
Speaker 2: Love it?
Speaker 3: Well?
Speaker 2: Well, if it's doors by Simon Crop, you should pay
attention to it.
Speaker 1: Absolutely. Yeah. So who's talking to us today?
Speaker 2: Richard Grounded kamin Offer Show nineteen eighty eight, not that
far back with our friend Jason Bach talking a little
bit about dot net source generators. You can see a
theme here and our recent also guest Schmooley Engelard said, first,
I need to share that I have metaprogramming dot net.
That's Jason's book and I love it so much. Two
important things I wanted to share. First, the source code
generated by source generators is read only. You cannot change them.
And second, for me, one of the easy ways to
know if I may want a source is if I
was in C plus plus, would I be writing a
template or a macro? Interesting?
Speaker 1: I think you'd be asking co pilot to write it for.
Speaker 2: You bylus by stepping that whole process comments two weeks old,
it's already had a date.
Speaker 3: Yeah, yeah.
Speaker 2: Jason actually responded to Schmooley's comment and said and thanked
him for the nice comments and said, you write sorce
generator gen codes. He is read only. Also, other source
generates can't react to code created by a source generator,
so smoothly, thank you so much for your comment and Comedy
of music codey is on its way to you. And
if you'd like a copy of music Code by I
write a comment on the website at dot a rock
saw Comma on the Facebook, so we publish every show
there and if you comment there and not read it
on the show, we'll send you copy of music Code.
Speaker 1: I'm pretty sure Schmooley already has a copy of Music
to Code Vibe.
Speaker 2: I hope so, I would think.
Speaker 1: But if you don't want to leave a comment, you
just want to buy it, you can go to music
to codebuy dot Net. There's twenty two tracks approximately twenty
five minutes long, perfect for coding, and it helps you
stay in that state of flow. And with that, let
us bring back to the show Kathleen Dollard. She calls
herself a dot net connoisseur. She's certainly seen a lot
of code as a long time teacher and consultant as
well as nearly eight years at Microsoft. Transitions are tough,
but she's ready for the next big adventure. And welcome
back to the show. Kathleen. It's been a while, but
you have been a frequent guest here over the years.
Speaker 2: Yeah.
Speaker 3: I'm not sure how many I've done. It's been a lot,
but it has been a while. It maybe two years.
It's really been a little while, so I'm thrilled to
be back. It's great.
Speaker 2: Well, and you were on seventeen hundred, which was our
collection of guests who've been on the most.
Speaker 3: Yeah, yeah, yeah, yeah, yeah.
Speaker 2: You know, if you're in that, there's a pretty clear
sign you've done to manybody. Yeah, last one was four
years ago when we were talking about C sharp eleven.
Speaker 3: Oh four, Oh my, oh wow, that's crazy, that's crazy.
So I did think the fact that I've been a
bit out of touch probably is partially because, you know,
life got pretty intense the last two years that I
was in Microsoft. We were running really short staffed. So
what do you do when you're short staffed? Do you
let people off? So so the PMT was short staffed,
and I think, I think we didn't. It was very
hard to focus on what was important because there was
so much, so much going on, and then I left
Microsoft in May with the layoffs, which broke my heart.
It's my job, my dream job. And the funny thing
is the same day. It's not funny, but it was good.
The same day, about two hours before they laid me off,
I found out that I probably had cancer. And so
it sounds like a terrible day. You go, oh my god,
what a bad day. Oh, but no, if you can
imagine what would have happened if those things had happened
two weeks apart, and we had this life changing event
and you just got used to it. You just had
your plan, and then the other and dropped. That would
have been horrible. I'm so grateful that I didn't have
a moment where I saw my life without these two
things crashing on together. It was such a blessing because
I didn't have to worry about, Oh, I've got new plans,
and now these new hard plans are destroyed. So the
good news is that it was a very well behaved cancers.
Cancer as cancer goes, and so I am now. I
go back for some checkups next next weekend. I basically
should be cancer free at this point. It was a
tough it was a tough six months. It was a
tough six months, six eight months. But it's you know,
I've got my energy back and I'm ready to go,
and so sure.
Speaker 1: The stress of leaving Microsoft didn't help.
Speaker 3: Well, Yes, and no, I worry a lot about how
I would have coped if I'd had the stress of
being at Microsoft doing that. It was I mean, I
loved my job. I love the people I worked with there.
I don't want to I'm missaying anything bad about it
up that it is. It is not an easy place.
It's not an easy place to work. It's a hard
place to work, very intense, very intense yeah, I loved it,
but moving on to other things and so.
Speaker 1: Yeah, greener pastures, Yeah, I hope so think So so
what's what's charging your batteries these days?
Speaker 3: Well, there's what's charging my batteries and what you know.
I'm kind of setting out towards doing I do eventually
have to do something else. I mean, you know, it's
it's it was good to take some time off and
be able to focus on my health, but kind of
done with that right now. So the kind of two
big areas. One is c sharp with sort of a
kind of a new vision for the way we talk
about c sharp because it's a new world out there.
And the second is I'm very into clize and I
don't know which one you want to talk about first.
So first of all, clize is the thing you type
when you type in something like dot nit built. That's
what we're talking about, is what you type at the cursor.
So I want to make sure that everybody's on board
with what we're talking about. And it's an amazing space.
It's just I've been involved in it since I joined Microsoft,
which nine and a half years ago, because I went
in there just being a goodie person and they decided that.
So because of that, I should run the dt at
CLI and SDK because I'd have a good appreciation for
people who didn't have that as their first, you know,
place of comment, which I think was great. So I
learned a whole lot, really fell in love with space
because I'm not language geek from way way, way way
back way back into at least at least nineteen ninety two.
And as a language geek, I love dsl's. I love
the ability to express what you care about in a language.
And there's many places that's not a good choice, but
that's what a CLI is. You get to build your
own DSL and you get to do it within a framework.
It's like a sonnet instead of a free verse.
Speaker 1: All right, Just for the one person who didn't understand
the acronym CLI command line interface. If the DSL domain
specific language.
Speaker 3: Thank you, and demain specific language just means that you're
making up up the aspects of it. Now you generally
don't make up the syntax. It's not only with the
CLI where you don't get full control of the syntax,
but you have control of the semantics. So if we
just look at this CLI that most people listening to
this will know something about well, there's two Get and
dot net would be the two most people listening to
this will have probably used. And so when you say
dot net space build, there's code written that takes dot
Net to say that's executable and build that's what we're
working on, and then takes all sorts of other things,
like you might have configuration, and configuration would be dash,
dash config or h C and those rules are set
out and something called the PASIC standard, which is ancient,
absolutely ancient, and so one of the things that I
didn't have a chance to do while I was at Microsoft.
It was on my plate, it was on somebody else's plate,
And now I'm like, you know, I might find time
for that is to actually do some updating to that standard,
to say this is what we do. And like the
areas that's worth conversation is how we use abbreviations, because
dash F is in Frank is my favorite one to
talk about because it regularly means two different things and
they're just a teeny bit different. One is dash dash
force and the other is dash dash format. So if
you're merely thinking this should have a format, and you
go dash F to a command that you really didn't
want to do a dash dash force too. There you go.
So I think that there's some things that we want
to talk about. There's also a lot of orthogonal things.
Help has not been updated since the initial POSIC standard
in any real way, and now we have these spectacular
tools like spector Console where we can really make beautiful things.
And happily I am still closely in touch with the
net stycancel It team, and hopefully I will now be
on the outside pushing in my ideas and thoughts the
same way I did before I joined Microsoft as an MVP.
An MVP for twenty years during Microsoft got to work
on the inside. Now I'm the outside setting up the
conduits in the ways that I can work on the
outside and make a difference. So that's kind of what
I'm doing now.
Speaker 2: The POSIC standards comes into playing the sense that POSEIKS
says to dash is word rather than just like dash
out would be dash dash force.
Speaker 3: Yes, right, So the POSEK standard is all these little details,
and it's actually a good standard because it's relatively consumable.
So if you have something that needs a name, then
you can think of as a named parameter versus an
unnamed parameter. So a named parameter in poseis it is
going to be dash, dash and then the word. But
it may be abbreviated if it's a boolean flag as
just dash and then the letter. So I guess format's
a bad example. I'm gonna have to find another one
because it would not be a bullion. So you might
think that abbreviation worked, but it generally wouldn't because probably
format wouldn't be a bullion. It only works at bulliants.
Is one of the things I think it's worth another look.
I think I also come to the conclusion that we
can do it dot net. We don't have to change
the whole world. But the other thing up on that
front is open CLI. Because the other really exciting thing
in addition to you can write this little language to
help the people you work with, which people they're writing
CLIs to do regularly do it. They just may not
think of it that way. The other thing is that
you're writing for AI and in today's world, one of
the really easy ways to set out what you offer
as consumable without making it a service and without having
to stand it up in that way. So it's just
within your organization, it's just go out and find this
executable on our local stores wherever it is. Then you
can write that and have it be available to AI
via the CLI. And there's a standard that's called the
open CLI standard that Patrick Spenson is I know about
it through Patrick Spenson, but there may be some other
I know there's other people are that are involved in that,
but that hopefully will be not just on it, that
will hopefully be across the entire space.
Speaker 1: It couras to me that dsls have kind of been
replaced by these large language models. Maybe I don't know,
it would seem that you could use a large language
model in the case of you know, where you would
have a DSL before.
Speaker 3: Well. Possibly, I think that we are just so much
at the top of the ski slope or avalanche, or
just at the beginning that we have no idea. I mean,
I think we're like, I don't know what year we
would pick. I don't think it'd be nineteen ninety two
in the Internet world, But you know, we're so much
at that beginning. I don't think we have any idea.
But another possibility, the one I think is more likely,
is that dsls will feed AI, so that AI is
more likely to use a DSL on a thing that
is done well and piece things that are done well together.
I think that that is more likely to be the
place we land when we realize that when I ask
for something in chat in my browser, it doesn't matter
if it's one hundred percent correct. But when I run
a program, especially one that does money or health or
any one of a number of different things, it matters
that it works well and it's relatively fast. And so
I think that we're more likely to see a really
good merging of these spaces. But I don't know. You
may be right. It could be that you know, the
code does get enough better that we don't have those problems.
Speaker 2: It's funny because I was just thinking, I don't normally
type dot net build. I run a script that has
dot net build in it, and a bunch of other
steps too.
Speaker 3: Because repeatability, yes, absolutely, And that's one of the great
things about clized is they're so easily scriptable. And there's
two projects, ones out and ones in process in terms
of how you build them, and they both really relate
to scripts, and one of them is system command, which
is a parser in dot Netlin. Microsoft has it, which
I worked on for seven years in beta, tremendously painful
experience because we did not have support and management. Finally,
with millions and millions of downloads that weren't from Microsoft
because they had a different store, they finally said, I
guess we should do something and release this. So the
right people got on board and it got released. So
that was that was that's great?
Speaker 2: Was that that was dot net cli.
Speaker 3: No, no, no, no, dot is cli has been out forever.
The parser that runs it, the parser uses is called
system command Line. So if you want to write your
own CLI, do not do not. Do not do not
write your own parser. It will be bad. I just
tell you it's tremendously difficult to I know absolutely, it's
tremendously difficult. I know how much time and pain and
love and wisdom went into System Commandment parser. Use it,
or if you'd like Patrick Finson's console, better use use
it if you want to. There's a couple out there
that also are pretty good that they have. There's there's
subtle standards within the dot neit ecosystem that people actually
probably will expect. So it really is a good idea
to use that that went into full release in November.
So yeah, all the everybody that was involved in that
three cheers. Some real heroes in that story because they
it was it was really fighting up a hill, so
really big heroes.
Speaker 2: So it was always an internal library then, and it
was never meant to be a public.
Speaker 3: No no, no, no no, no, just the opposite. It
started as an open source public library that we did
with the community. John and I did it. What happened
is I did dot Tools. I was the PM for
dot neit tools, and when we released dot neit Tools
and I sat down and I wrote my little samples
and stuff. I just wanted to cry because even for
a completely crappy parser, over half my code was Parson code.
It wasn't anything to do with what I wanted to do.
It was all just this crap Parson code that I
did not want to write. And so I went to
start asking around who can and John Squero said I
might be interested in that, And I don't know if
he's forgiven me yet because it was a really painful
seven years for all of us and the So anyway,
we've got it out now. So there is a good
parser out from Microsoft. You know, it's fast, it's it's great,
it's it's wonderful. I don't think it has a good
U either for the for the programmer. I actually think
it's terrible. So I was in Prague at Update conference
and I stepped on stage. I'm so excited. I said, Oh,
this is just nearly released. Everybody go take a look
at this, and I'm showing examples of it. I'm going
we're still writing a bunch of code that we have
to learn about. It's interesting, just do it. So I'm
working on a side project and if it is interested,
it's get hug Kathleen Dollar. Dragon Fruit Too is the
name of it. If you're a System command Line fan,
you know what dragon Fruit is. This is the next generation.
It does subcommands and the things we've wanted in the
dragon Fruit which is now gone. That's not part of
the released System command Line. So that is going to
be able to restate what we can do in CLIs
you talked about scripting.
Speaker 1: What is dragon Fruit.
Speaker 3: It's a rapper for System command Line that gives it
a good UI. It lets you do a single create
your entire CLI with classes that are familiar to you
and they're basically DTOs. It wraps system command line and
a dto that that's a data transfer object. It's a
simple little object. So it just marries those two together
unless you write your CLI very very easily. So that's
the main goal, but it also will allow you to
extend it because it's open and we've got lots of
things in there, like better defaults. And you were talking
about scripting Richard, which if you know what you're talking,
if you know those commands, you already know them, then
it's very easy to redescript. If you don't know those commands,
it's very hard to redescript because there's things like I
talked about named and unnamed arguments. There's a huge use
of unnamed arguments within CLIs and that's a good thing
if you're typing less to type. It's a very bad
thing if you're reading, because you see a word, you
don't know what that word is. And so let's just
say that you have a project in your system that
is like I don't know, it's it's I don't know,
it's like run okay, and that's just the name of
a project you've got. Well, if you see dot net,
you know build run. You don't know what's going on there,
and because you can state a project after dot neit build,
so it's it's difficult to use them. I think it'd
be much easier for humans and definitely easier for AI
if you could read a script that was written adjacent.
And so that's one of the things that that's the
kind of thing we can enable. Prompting people have asked
for a lot, being able to pull defaults from environment variables.
All of those things are in there. They're either in
the system or they're already designed into this wrapper. So
that's what I'm coding it.
Speaker 2: Certainly I have it. I have in writing scripts, and
that's as much PowerShell as anything dot net related. Yeah,
to always use the double dash long names. Yeah, so
you chot just so because it's a pain to do once,
but it's in a script. You're never going to type
it again. But when you go to read it, holy man. Yeah.
Speaker 3: I also suspect that you're you're doing a great deal
of good for any AI usage that that script would
ever have. Yeah, I imagine either evaluation or to use
it to find out what it's doing. To use it.
For example, you might look at a bunch of scripts
to say, what are the configuration files. So for that
kind of work, I think that you're way far ahead
if you're using the dash DASH can fig and say
a dash C. Even though in theory the AI could
work it back, it also should.
Speaker 2: Be able to do you'd think it can. It's just
one less step.
Speaker 3: Well, right now today we don't yet have that open
sale I at so we don't have a guaranteed way
for it to get to the actual intent of that
particular domain specific language and what does C mean for
this particular command and so because we don't yet have
a solid pipeline there, I actually think you get better
results as well as being easier to read when AI
is involved.
Speaker 2: That's interesting. Okay, why don't we take a break. I
got some questions after that sounds good, and we're back.
It's dot at Rock's amateur Campbell. That's Carl Franklin. Hey,
hanging with our friend Kathleen Dollard after entirely too long
and were just digging in on you know, the whole
wave of CLI came from the open source side, and
to me, it always was about appealing to non ide
developers like they, especially the younger generation of web developers
who never went into visual studio that were used to
rolling their owns, and here was a way for them
to building DOT that they they're familiar with.
Speaker 3: I think that's true, but I also think that that
it's also better for certain things. So if you look
at we use the dot nea clig and that GET
is equally true and GET, it's just it's not as
structured quite as well as dot cli, I think. So
the CLI is huge. It's actually quite large. There's I
don't know, one hundred, one hundred and fifty different options
on different commands all stuffed in there, and that maybe
doesn't include new geed and net new has an entire
open system behind it of all the templates.
Speaker 2: It's huge.
Speaker 3: It's absolutely huge. So if you were just take a
second and think about what the UI would look like
if it was.
Speaker 4: A good options It was a very telling thing that
happened around I don't know if it was PARASHAWM guessing
it was, but it might have predated Parashel where some
of the work for it professionals.
Speaker 3: The people back when we had it pro folks. They
they had started they went to Gooey's and then they
started having the real command line that would be the
same thing at the bottom of the screens in many
of the tools, because yeah, you really needed that. Both
the build scripts 'very important, but also because there comes
a point that just trying to assess the information that's
coming at you, and there's this very small thing that
salies do really well that is not obviously importance of,
and that is defaults. So if you look at that
dot neit build command that's inside your script and you
do or do not see a config then that's important information. Okay,
so that's very easy, and so a configure you're going
to probably have. Okay, that's you know, that's most likely
you're going to have it. But there's a whole lot
of other things there, like what your run time is,
or what actually what the projects are. Are you just
going to build into this directory and move to the
directory or are you're going to stay what the project is.
There's just a ton of things there that either are
present or absent. But when you look at a guy,
you don't have that ability to say, these are the
things that are special about this particular case. And that's
what a default is. It's what is special about this
particular case. And nobody's ever really built gooey's that say,
you know, the bread green stuff is all the stuff
that's that's not default, right, I've never seen that, And
in fact, in a gooey you generally can't tell the
difference because if you have a zero that's a default
versus a zero somebody entered, it looks.
Speaker 2: Just the same, exactly the same. That's a great insight.
Speaker 1: You know.
Speaker 2: The neat thing about parameters is they're all intentional. You
wouldn't put them if they weren't optional.
Speaker 3: Any pleasure using optional parameters, that's absolutely true, and in clized.
You only put the things that you need to put. No,
I don't know anybody who just says, oh, for fun,
I'm going to go ahead and add a few extra
things when they're typing in to use a CEL.
Speaker 2: Yeah, that's a mean person. You don't like that person.
Don't do that. Only put in parameters that matter, especially.
Speaker 3: If they do with scripts. No, you don't, you don't,
you don't.
Speaker 2: Yeah, it's a great you know. The other obvious one
is it's really hard to keep multiple goooyes across multiple
people all in sync. For configuration, where a batch file
sitting in a folder that everybody can access, that is
the only way to build. Then yeah, you know everybody
literally runs the same piece of code.
Speaker 3: And it fits in so well and with such a
good driver for the SDK design and the overall design
of all of it. Like you know, when we when
they went to do the the file based applications, it's like, okay,
we know what to do. We don't have to sit
down and design anything. So we know that we want
to say dot net build blah blah, dot c s. Okay,
that's what it's got to be. And now how do
we make that work? And so it was a huge,
huge organizing and driving factor. Now we had some mistakes
that came in actually creamy, but it's okay, Like we
used to be able used to have to say dot
net AD. I think it was a AD project and
package AD. So but there were two almost the same
thing that we just switched and that's not removed. So
now the noun verb completely. One everybody's doing CLI is
do noun verb. Reach out to me if you need
to understand how to do obsolescence in the CLR, because
it is a it is a tricky thing to do,
but you can do it well.
Speaker 2: It did bring up the question you know, now that
you've talked about system, command line and so forth in
this tooling, who should be building CLI's, Like I get
that you should build clish you think like this, and
you're building tools always going to use. But who should
be making a CLI?
Speaker 1: I can give you one right now, just people who
are using AI agents to do things that you typically
have to build a CLI around. Right Get hub Copilot
is a perfect example.
Speaker 3: So I think that there's a bunch of answers. One
is who's your audience? So if your audience wants scoies,
your audience wants scooies. If your audience wants the people
going to use your app want a command line app,
they want a command line app. I'm of the opinion
that almost everything should be designed CLI first and then
can we second, because in that way you have the
organizing force of the CLI, which I mean, like I said,
you just it was so important in the net s
to case it's a nightmare. It was we made it
better when we at the old dot net new and
got the new dot net new. And there's some things
New gets relationship, you know, handing off to new get
got better, and a bunch of stuff got better of
the last eight years. Somebody else runs it now. Chad
husk Is is the person who does that. But the
part of it. The first answer is what do people want?
The second answer is, unless you have a really I
know this needs to be a guy in this way,
I want to design the guy first. Unless you know
you want to design guy first, design CLI first, and
it helps your testing, It helps your prototyping, it helps
you communicate with your stakeholders without worrying about whether the
button is blue. There's just a ton of things you
gain from being CLI first in your overall app design.
Also keeps your apps from being too big, because most
of us look at something like we're you just getting
dot net. They're about as big as you can get
as your CLI is actually not a single CLI. It's
a breaking off point into a whole bunch of little CLIs.
It's a prefix you can only get so big, and
it kind of keeps you with that size.
Speaker 2: And that granularity is super useful too.
Speaker 3: Yeah, it's like, how should we break this up? Now
becomes a good question for a good reason. Instead of
a guy app which is just going to keep growing
like a big amima until it's taken over your entire
company if it's a medium sized company, and that's never
good because then your ability to change to the next
great thing is drops zero.
Speaker 2: Right, that makes a lot of sense. Yeah, yeah, so
I think, I mean, I hate. I really wanted to
push on this idea that CLIs are all about AI,
that there's a bunch of reasons you were going out
CLIs anyway, going way back to the DevOps movement and
so forth. But now it really opens the door to
these new tools and the way they want to work
as well.
Speaker 3: Yeah, it really is. And that's why things I could
in CLI looking at maybe some more expressiveness, looking at
not being afraid to change. I'm no longer afraid to
change the positic standard. I will not do it on
my own, But I think that as a community, as
an ecosystem, we need to take a look and say
can we can we either solidify some things other than
H or can we you know, what can we do
here to find some space to grow alternate you know,
alternate help is a really obvious one. And prompting prompting
for required values being part of your part of your
part system, not something you have to write for every
application yourself. If you want it, it'd be just a
configuration switch.
Speaker 2: So yeah, Yeah, it's interesting to think because that is
such an old standard that maybe needs to be modernized
because of these new tools, so that we have fewer
problems going forward.
Speaker 3: Yeah, and I think everything that's there will stay forever.
I don't think anyone's going to literally.
Speaker 2: Change it, right.
Speaker 3: You know, I said I'm not afraid to change it,
but I really mean I'm not afraid to talk about
extending it to see whether there's buy in on some
of the things that we could do if we extended it,
as simple as if we're going to have help be
in a more structured format to make it easier for AI,
easier for some other things. Oh my gosh, can we
all use the same format? That's what open cli is
ultimately about. You know, it's got lots of things going
on with it, but that is, you know, we need
to use the same the same structure there.
Speaker 1: You mentioned obsoleting a few minutes ago. Yeah, is that
the same as deprecating like, well, we don't use that
anymore and now we use this pretty much?
Speaker 3: Yes, that that is really the answer, because unless something
becomes strictly dangerous strictly you really need not to use this,
and unless that happens, you can never remove anything because
you're going to break the scripts. Richard was talking about
that all these people you just think about now thet
net scripts. Of course that's massively in use. There's absolutely
kind of remove any feature ever, which is why it
was so hard to get this verb now and thing
fixed because so many people said we can't have to
ways to do something, and we're like, well, we'll never
fix it then, so can we please have two ways
to do something? And literally it's taking what is is
the old way to do it that now is obsolete
and just hiding it. That's number one. Just don't put
it in help, that's number one. And then the next step,
which the dot netcli, I think mini salies are ready for,
is to have a warning. It is to have the replacement,
and that is just so. I think you may see
that within the dot NETCLI in the mid future. I'm
not sure this year, but soon I think that's going
to be there. I'm not sure if they're working on
it right.
Speaker 1: Now or not.
Speaker 2: When you think about security around CLIs like do we
need to have a log in or some tiers of
authority for different commands in CLIs it's.
Speaker 3: Not my space right now. The answer is that kind
of the the person you are, the framework that you're in,
the things seem to be working. But as AI comes in,
will it I don't know. I don't know the answer
to that.
Speaker 2: It's currently the CLI runs in the context of the
caller exactly. And so you know this is where if
you live in a Linux line, you would pseudo before
running a CLI to promote your your rights, and then
the CLI runs in a higher level, but.
Speaker 3: Hopefully in a very thoughtful way, and only pseudo when
you actually need to because it's holding you say, and
otherwise we may wind up with some rapper basically little
terminal wrappers or repels that can hold more security for
certain things that need it. That's another way, and that's
another place to standards would be really important and valuable.
Speaker 2: Right that you could be a parameter that carries a
token that kind of thing, right, question or something.
Speaker 3: So these are the kinds of things that we we
kind of got stuck in the standard and said, well,
we're not going to think about these new things. We're
not going to think about ways to change. And there's
a lot of answers to that question, including environment variables
that have you know, and having keys that have a
short lifetime. You know, there's a ton of different things
that could be done, and what's the best thing. I
am certainly not the person to make a guess as
to what's the best answer to have the most security
with the least impact, And there might be more than
one answer.
Speaker 2: I'm sure I do not want the CLI to generate
a prompt for a password, That's what I'm sure of. Yeah,
you know, the same way invoking an SSH call or
a Bash call might have a security prompt in it. Well,
the cl I should not behave like that. That is bad.
Speaker 3: Yeah, yeah, and thank you, because I do not yet
in this project, this Dragon Fruit too, I do not
yet have a special password type to ensure that it's
never prompted. And so yeah, thank you.
Speaker 1: Well, in the Windows guey world, when you need something
that requires a higher level of context, it asks pops
a dialogue, you know, POPSI dialogue. It has been doing
that since what XP service back too, right.
Speaker 2: Yeah, well that was just UAC but even before that.
But you know, you make the point. One of the
things about gooy is that you can layer on interface
like this and interrupt.
Speaker 1: And everything stops and you can't press enter. You actually
have to click.
Speaker 2: You can't do a damn thing, you know.
Speaker 1: You have to click allow yeah.
Speaker 3: Or okay, right, Well, we can actually do that. The
problem is to scripts, so we could do that, but
then while scripts there's two actual problems with the scripts.
One is if you do an interactive mode on a
command while it's in a script, it'll hang the entire session.
So that's bad. And so then so in that case
you couldn't get any approval, and so knowing whether you're
in a script becomes then a security question. And right now,
knowing whether you're in interactive mode is kind of like
we can almost always get right. Chet worked on that
to get it in the dot net. In the dot
necli now does know whether you're in interactive mode and
does behave a little bit differently if it's an interactive
mode now, which is great, right.
Speaker 1: One thing that's in the newer version of get hub
Copilot's CLI is this slash allowed dash all okay, which
essentially says, don't prompt me for permission when you want
to do something, just go ahead and do it and
I saw that In'm like, well, that's very convenient, and
you know, convenience is the enemy of security, right, I
want to know exactly what you're I don't want to
see bunch of stuff fly by. Yeah, I want to
know exactly what you're going to do, so I don't
use that mode.
Speaker 2: Yeah, yeah, yeah, it's just a I don't want to
break automation either, Like, yeah, it's a challenge of writing
good scripts.
Speaker 3: And well it is. And this is you know, I
think all these problems are solvable if we look at
them through the eyes of twenty twenty six. And you know,
I should have looked up how all that standard is.
I didn't. It's absolutely ancient and hysterical. It's nineteen ninety two,
but I don't think it is. But it's it's it's
quite old, and it is. It has served very well.
I have nothing bad to say about it except that
it's time for us to it's time for us to
look forward, modernized. And there's one thing in it that
I personally dislike but I doubt it'll change, which is
the ability to smash different flags together. And you know
that's the only thing. It's called pozis bundling and let
let you do like dash ac if A is a
flag and C is a flag. I don't like that
very much. But other than that, you know, it's a
really good standard and it has served really, really well,
and nobody would have ever thought about the kinds of
things that we're thinking about now way back then, and
it's just time to take another look at it and
open sealies doing that. I don't think it's the only
front that we're going to be looking at that, although
perhaps that will be the venue where we can take
a look at a lot of different things and you know,
kind of update. It's time for that.
Speaker 2: Yeah, it does speak to this evolving way of interacting
with software I do. It is really something to watch
an LM write prompts like that, I spit out a
series of commands.
Speaker 3: It is, and it's I think it's awesome. It's just
it's a very nice way to communicate, you know, back
and forth, as long as the commands all stay simple
and easy to understand, which it's up to. It's up
to people are writing the CLIs to do that.
Speaker 2: So yeah, yeah, and back to that question of who's
writing a CLI and what's for. But like you said,
is any piece of software someone needs to interact with,
you should probably be making the CLI first, then defining
a GOOI or whatever of interfaces you want.
Speaker 3: Unless you hear that statement and know what's wrong for
your app, and there are certainly apps that's but if
you don't know what's wrong, think about it. I can't
think about whether that's yeah, I think if it makes sense.
Speaker 1: So yeah.
Speaker 2: I also saw this with the Azure CLI, which is
that often the new feature shows up the CLI first
and then the portal caught up sometime later. So you know,
the other side of this is you can ship faster
when your interface is just an additional parameter call in
the cl I and it just it takes time to
roll that up into the UX.
Speaker 3: Well, it does, and the Asure CLI is probably one
of the easier ones because it has a lot of
standards around. You know, the CLI looks the same across
a whole lot of different A lot of problems are
argon solved in I'm sorry, in the guy. A lot
of problems are solved in that guy. So if you're
going to write to a gouy, it's probably a pretty
easy one. But even so, the cl I allows you
to get through prototype and find out it's even a
good idea before you start putting any any time into
the arrangement of things. You know, you have to start
worrying about your semantics, your words, before you start worrying
about how those words lay out. And I think that's
a really healthy way to look at software, as opposed
to first looking at what's the shape, what's the pretty?
What color should it be?
Speaker 2: It's the color?
Speaker 3: Yeah, yeah, you know, which is terribly important, even a
guey I mean, you know, I'm not eventually. Eventually I
can't design a UI for the life of me. But
that's decent, A gooey, not a gooey A CLI I
can design fairly much.
Speaker 2: What I like about your this whole thinking is like
it's about the functionality exactly.
Speaker 3: That's exactly the point. And another thing that can drive
you away from one is if you have a lot
of data, it's not a real easy way to like,
if you're interdoance. You know, if someone has to interdeance
and you can't abbreviate enough to say any four letters
of the goods will be good enough. Yeah, then you know,
because we deal with commits all the time.
Speaker 2: Well, now you bring up a great point, which is
that you're if you're thinking CLI first, how does that
change the way you craft parameters?
Speaker 3: Exactly?
Speaker 2: That's absolutely you would manage data like you don't want
to put that in a prompt, you'd put it in
a file and a porter to the file.
Speaker 3: Yeah, yeah, absolutely absolutely.
Speaker 2: Is that actually good for a guy or another interface?
I don't know. Like it is interesting to think in
those terms.
Speaker 3: It really is. I think it's a good piece to
our conversation. I don't think it's the end of our conversation.
I just think it's a big part particularly conversation we're
having right now. Everything's changing around us and we're all
trying to figureut which way the ground is. And in
that world, I think that this is one of the
grounding pieces is just say I have something I want shared.
This is a way I can share it, and this
is a way that doesn't depend on a service to share, right.
It can certainly be wrapped by a service. That's great.
But if you try to write your service first and
then you write your sale lie second, good luck, because
you've already got too much code in your library. If
you write your library first and then your c. If
you write your CLI, design your sale first, or design
it alongside, then your library may make more sense. Your
your API, your web api may make more sense. You know,
various different pieces of your overall puzzle may make more sense.
Speaker 1: Yeah.
Speaker 2: Thinking through your parameters before you build your back end,
even at all these places, certainly makes what would it
look like?
Speaker 3: Yeah, certainly makes testing easier too.
Speaker 2: Sure, that's very automatable and work through all the different parameters.
That's that's exciting. That's a great way to think about this, Kathleen.
As usual, you got my head going.
Speaker 3: Yeah. Well, one thing about the little project I'm working
on is is if anyone is interested in uh in
source generators and they want to look at a non
trivial source generator, some fantastic there's some fantastic blogs out there,
and I'll send you resources on two of them. On
if you just want to write Hello World, Hello World
for source generator is rewriting two storing for moms that
is the Hello World. And so if you want to
go beyond that, then it gets really hard, really quick,
and it is not linear. It is very is very
non linear. It goes up fast, and I have tricks
I've been doing this a long time. I had some
really good tricks and I was showing somebody who's a
really hot programmer. I was so impressed he said this
and it was a particular thing I did, and he gets, oh,
I never thought of that. That's gonna save me a
lot of times. And so I'm going to be giving
a talk at Tikarama on that. And I'm also talking
around on C sharp both Sea Shark gotchas and h
C sharp modern Sea Shark What should what can your
code look like today? And why is that good? So
you know that that's the other thing as I'm working
on is where C sharp is at. I was so
busy building it, I couldn't really talk about it, and
that was a great frustration. And now I can talk
about that and the Richard Carl You know that I
did a workshop for a long time which was, you know,
I'll become a better sea shark programmer. I'll make you
a better sea shark programmers names like that, and so
I am hoping I'm in progress. I think I'm going
to be able to release that and put that together
in a big way. And so that along with the
modernizing and then my talk at Tekarrama is staying sane
while writing as rosin source generator.
Speaker 1: Nice.
Speaker 2: You know, I realized there's at least two more shows here.
You're thinking about what modern cy sharp looks like is
a whole other show, and everything to do with Roslin's
easily a show too.
Speaker 3: Yeah, and the Sea Shark, gotcha, this is actually another
show too, So we will not be waiting four years again.
I'm quite sure of that.
Speaker 2: No, no, I think we better not. We'll figure that out.
So much fun to talk to you again. Yeah, I'm
glad you're well.
Speaker 3: Oh it's great.
Speaker 1: Yeah, we're very happy for that.
Speaker 3: Yeah, and I am so glad to be well, so
glad to be here with you today and ready to
go and shovel my driveway that is, or snowblower too.
Speaker 1: But there's some shoveling and we're almost neighbors, so we
should be hanging out more.
Speaker 2: I know, I know.
Speaker 3: Let me, let's get in touch. So let's do it.
Speaker 1: We'll be in touch. Yeah, sounds good. All right, Kathleen,
Thanks again, and thank you, dear listener. We'll talk to
you next time on dot net rocks. Dot net Rocks
is brought to you by Franklin's Net and produced by
Pop Studios, a full service audio, video and post production
facility located physically in New London, Connecticut, and of course
in the cloud online at pwop dot com. Visit our
website at d O T N E T R O
c k S dot com for RSS feeds, downloads, mobile apps, comments,
and access to the full archives going back to show
number one, recorded in September two thousand and two. And
make sure you check out our sponsors. They keep us
in business. Now go write some code. See you next time.
Speaker 3: You got Jamal Vans and