comp.lang.ada
 help / color / mirror / Atom feed
* newbie, Spark 2014 or Ada 2012
@ 2015-07-06  0:28 nomadlite
  2015-07-06  1:30 ` Paul Rubin
                   ` (2 more replies)
  0 siblings, 3 replies; 33+ messages in thread
From: nomadlite @ 2015-07-06  0:28 UTC (permalink / raw)


I am new to Ada.
I am choosing my hobby programming language for system programming.  I am doing programming for a hobby. It is going to be Java, python, VB .Net or Ada/Spark. If I learn Ada 2012 then learn Spark 2014, is it often to confused Spark 2014 code  with Ada 2012 code when you do programming? I just want to learn basic of each language to try them out. My understanding is that Ada reinforce good engineering practice. I prefer my code to be easier to read so Spark 2014 may be a better choice for me. 

For Example, I like to write my java code 

public static int number_of_days_public_static_int=0;

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  0:28 newbie, Spark 2014 or Ada 2012 nomadlite
@ 2015-07-06  1:30 ` Paul Rubin
  2015-07-06  7:04   ` nomadfate
  2015-07-06  2:16 ` David Botton
  2015-07-10 22:49 ` nomadfate
  2 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-06  1:30 UTC (permalink / raw)


nomadlite@gmail.com writes:
> I am new to Ada.
> I am choosing my hobby programming language for system programming.  I
> am doing programming for a hobby. It is going to be Java, python, VB
> .Net or Ada/Spark.

Ada is the only one of those suitable for what I usually think of as
system programming, i.e. close to machine level.  The others are for
application programming, which is further away from the hardware and
which are able to automate more of the program's requirements
(particularly memory management).  That makes them easier to use, at the
cost of some efficiency and timing determinism.

Are you new to programming in general?  The first thing I'd want to ask
is if there are specific types of programs you'd like to write: OS
kernels, robot control, web servers, or what?

If you don't have a clear direction yet, I'd say that Ada probably isn't
the best place to start.  Python doesn't have Ada's high-reliability
features or its performance, but it's easier to learn and more
productive for slapping small, non-critical projects together.  Ada is
for when you need large scale organization and deeper control and
assurance about what the code is doing.  Those benefits are sometimes
invaluable, but they don't come for free.  Think of the difference
between hopping on your bike and riding somewhere (Python) and flying a
jetliner there, complete with mechanical preparation and preflight
checklists (Ada).

> If I learn Ada 2012 then learn Spark 2014, is it often to confused
> Spark 2014 code with Ada 2012 code when you do programming? 

No I don't think so.  Spark is basically a subset of Ada with some extra
annotations to write high-level specifications into your program, and
then some tools for making sure the program actually matches the spec.
This can get pretty complicated to use, but it's basically the gold
standard for high-assurance real time programming.  You probably want to
know some mathematical logic if you want to use Spark in a sophisticated
way.  

If you like the mathematical-logic approach to programming, you might
also like to try out Haskell.  It's much further "out there" than the
other languages you've mentioned but brings a cleaner mathematical
approach.  See:  http://haskell.org for some resources.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  0:28 newbie, Spark 2014 or Ada 2012 nomadlite
  2015-07-06  1:30 ` Paul Rubin
@ 2015-07-06  2:16 ` David Botton
  2015-07-06  6:56   ` nomadfate
  2015-07-10 22:49 ` nomadfate
  2 siblings, 1 reply; 33+ messages in thread
From: David Botton @ 2015-07-06  2:16 UTC (permalink / raw)


If you learn Ada well you will be a better programmer in any imperative language. So if this is about hobbies, it is the better choice since you can convert your skills in to any other imperative language easily. It offers the widest ability to express your ideas. D is not far behind (and in many areas offers more), but lacks the rigidity that will help you go from programmer to engineer.

As for Spark, it has a very specific niche, but not a first choice or general purpose.

The other languages you list offer little educational / personal growth benefit, but once you know Ada well can just step in to them when you need to.

If the goal is dollars and not personal growth, your probably better off learning Python and then Java.

David Botton

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  2:16 ` David Botton
@ 2015-07-06  6:56   ` nomadfate
  2015-07-06 19:18     ` David Botton
  0 siblings, 1 reply; 33+ messages in thread
From: nomadfate @ 2015-07-06  6:56 UTC (permalink / raw)


On Sunday, July 5, 2015 at 4:16:49 PM UTC-10, David Botton wrote:
> If you learn Ada well you will be a better programmer in any imperative language. So if this is about hobbies, it is the better choice since you can convert your skills in to any other imperative language easily. It offers the widest ability to express your ideas. D is not far behind (and in many areas offers more), but lacks the rigidity that will help you go from programmer to engineer.
> 
> As for Spark, it has a very specific niche, but not a first choice or general purpose.
> 
> The other languages you list offer little educational / personal growth benefit, but once you know Ada well can just step in to them when you need to.
> 
> If the goal is dollars and not personal growth, your probably better off learning Python and then Java.
> 
> David Botton

Thank you for your reply.
This is for a hobby. I am trying to choose between embedded micro-controller programming and application programming. It seems working with micro-controller and electronic component is more fun to me than looking at the computer screen screen for application programming. I tried Basic Stamp micro-controller 10 years ago. Now I have Arduino uno. I guess I am ready to learn how micro-controller really work. I think I will eventually choose between Ada and C for micro-controller programming. I will also learn assembly for debugging. This hobby will take me years to learn. I do have an 2-year Electronic A.S. degree, so that helps a lot.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  1:30 ` Paul Rubin
@ 2015-07-06  7:04   ` nomadfate
  2015-07-06  7:20     ` Paul Rubin
                       ` (3 more replies)
  0 siblings, 4 replies; 33+ messages in thread
From: nomadfate @ 2015-07-06  7:04 UTC (permalink / raw)


On Sunday, July 5, 2015 at 3:30:27 PM UTC-10, Paul Rubin wrote:
> nomadlite@gmail.com writes:
> > I am new to Ada.
> > I am choosing my hobby programming language for system programming.  I
> > am doing programming for a hobby. It is going to be Java, python, VB
> > .Net or Ada/Spark.
> 
> Ada is the only one of those suitable for what I usually think of as
> system programming, i.e. close to machine level.  The others are for
> application programming, which is further away from the hardware and
> which are able to automate more of the program's requirements
> (particularly memory management).  That makes them easier to use, at the
> cost of some efficiency and timing determinism.
> 
> Are you new to programming in general?  The first thing I'd want to ask
> is if there are specific types of programs you'd like to write: OS
> kernels, robot control, web servers, or what?
> 
> If you don't have a clear direction yet, I'd say that Ada probably isn't
> the best place to start.  Python doesn't have Ada's high-reliability
> features or its performance, but it's easier to learn and more
> productive for slapping small, non-critical projects together.  Ada is
> for when you need large scale organization and deeper control and
> assurance about what the code is doing.  Those benefits are sometimes
> invaluable, but they don't come for free.  Think of the difference
> between hopping on your bike and riding somewhere (Python) and flying a
> jetliner there, complete with mechanical preparation and preflight
> checklists (Ada).
> 
> > If I learn Ada 2012 then learn Spark 2014, is it often to confused
> > Spark 2014 code with Ada 2012 code when you do programming? 
> 
> No I don't think so.  Spark is basically a subset of Ada with some extra
> annotations to write high-level specifications into your program, and
> then some tools for making sure the program actually matches the spec.
> This can get pretty complicated to use, but it's basically the gold
> standard for high-assurance real time programming.  You probably want to
> know some mathematical logic if you want to use Spark in a sophisticated
> way.  
> 
> If you like the mathematical-logic approach to programming, you might
> also like to try out Haskell.  It's much further "out there" than the
> other languages you've mentioned but brings a cleaner mathematical
> approach.  See:  http://haskell.org for some resources.


Thank you for your reply.
I am not new to programming. I went to basic programming classes when I was in school. I am more interested in micro-controller and electronic stuff.  I have 2 years Electronic A.S. degree. I don't like math so Haskell is not for me. I guess my language choice is going to be Ada, C, or assembly for now. Java have Java ME for embedded systems and Python have Raspberry Pi system so Python and Java are still on my watch list.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  7:04   ` nomadfate
@ 2015-07-06  7:20     ` Paul Rubin
  2015-07-06  7:50     ` Jacob Sparre Andersen
                       ` (2 subsequent siblings)
  3 siblings, 0 replies; 33+ messages in thread
From: Paul Rubin @ 2015-07-06  7:20 UTC (permalink / raw)


nomadfate@gmail.com writes:
> I am not new to programming. .... I am more interested in
> micro-controller and electronic stuff. .. I guess my language choice
> is going to be Ada, C, or assembly for now. Java have Java ME for
> embedded systems and Python have Raspberry Pi system so Python and
> Java are still on my watch list.

For small embedded systems like the Arduino you are right, C is probably
the dominant choice (but it is terrible).  Ada is better than C in lots
of ways but I think the Ada toolchain for the Arduino is a bit
problematic.  For mid-sized (Cortex M) systems the Ada situation is
better and there are a few threads on this group about it.  C++ should
also be mentioned as an option, though it has many of the same problems
as C, and it's very complicated.  For hobby use you might also like
playing with Forth (amforth.sf.net) on your Arduino.

The Raspberry Pi is almost a desktop computer and I'd encourage you to
try out Python.  It's very quick and convenient though not as
"engineering" oriented as Ada.

I wouldn't bother with Java unless you have a clear need for it.  I
don't know if anyone still uses J2ME (it was popular in 1990s-era cell
phones).  Java itself tries to solve some of the same problems as Ada,
and is better in a few places, but worse in others, and its runtime is
much more bloated.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  7:04   ` nomadfate
  2015-07-06  7:20     ` Paul Rubin
@ 2015-07-06  7:50     ` Jacob Sparre Andersen
  2015-07-06 18:44       ` Jeffrey R. Carter
  2015-07-06  9:34     ` Björn Lundin
  2015-07-06 19:20     ` David Botton
  3 siblings, 1 reply; 33+ messages in thread
From: Jacob Sparre Andersen @ 2015-07-06  7:50 UTC (permalink / raw)


nomadfate@gmail.com wrote:

> I am not new to programming. I went to basic programming classes when
> I was in school. I am more interested in micro-controller and
> electronic stuff.

For embedded systems Ada and C seem like the sensible choices.

C is useful to know because it (still) is the lingua franca of systems
programming.  You may also occassionally want to program a
microcontroller without an easily available Ada compiler.

Ada is useful to know because it helps you structure your
implementations and helps you avoid programming errors [1] (giving the
very short explanation).

SPARK 2014 should in your case probably be seen as an optimisation tool.
If you notice that some section of your Ada sources are taking too much
time, you can use the SPARK tools to evaluate if it is safe to disable
checks for that part of your application.

Greetings,

Jacob

[1] John McCormick has written a paper on his experiences with letting
    students use Ada and C for implementing a model railway control
    system.  It explains in detail which Ada features are most important
    for that kind of problem.
-- 
»Great minds discuss ideas,
 Average minds discuss events,
 Small minds discuss people.«

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  7:04   ` nomadfate
  2015-07-06  7:20     ` Paul Rubin
  2015-07-06  7:50     ` Jacob Sparre Andersen
@ 2015-07-06  9:34     ` Björn Lundin
  2015-07-06 16:19       ` Paul Rubin
  2015-07-06 19:20     ` David Botton
  3 siblings, 1 reply; 33+ messages in thread
From: Björn Lundin @ 2015-07-06  9:34 UTC (permalink / raw)


On 2015-07-06 09:04, nomadfate@gmail.com wrote:
> On Sunday, July 5, 2015 at 3:30:27 PM UTC-10, Paul Rubin wrote:
>> nomadlite@gmail.com writes:
>>> I am new to Ada.
>>> I am choosing my hobby programming language for system programming.  I
>>> am doing programming for a hobby. It is going to be Java, python, VB
>>> .Net or Ada/Spark.
>>
>> If you don't have a clear direction yet, I'd say that Ada probably isn't
>> the best place to start.  Python doesn't have Ada's high-reliability
>> features or its performance, but it's easier to learn and more
>> productive for slapping small, non-critical projects together. 

That is a matter of taste. I still struggle with python.

> Ada is
>> for when you need large scale organization and deeper control and
>> assurance about what the code is doing. 

Yes that too.
But not only that.
It is great for one-man-shows too.

> 
> Thank you for your reply.
> I am not new to programming. I went to basic programming classes when I was in school.
> I am more interested in micro-controller and electronic stuff.
> I have 2 years Electronic A.S. degree. I don't like math so Haskell is
> not for me. I guess my language choice is going to be Ada, C,
> or assembly for now. Java have Java ME for embedded systems and
> Python have Raspberry Pi system so Python and Java are still on my
watch list.
> 

if you get an RPi and do sudo apt-get install gnat,
you the have an ada compiler omboard your R-pi.
I use that quite a lot.

And for Arduino, I've used winavr-ada
based on avr-ada
http://sourceforge.net/p/avr-ada/wiki/Home/

There is a new book out, that
discusses ada on arduino.

http://www.inspirel.com/articles/Ada_On_Cortex.html

It also points to the possibility to not cross-compile, if you develop
an a R-pi.

--
Björn


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  9:34     ` Björn Lundin
@ 2015-07-06 16:19       ` Paul Rubin
  2015-07-06 22:37         ` Björn Lundin
  0 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-06 16:19 UTC (permalink / raw)


Björn Lundin <b.f.lundin@gmail.com> writes:
>>> Python doesn't have Ada's high-reliability features or its
>>> performance, but it's easier to learn and more productive for
>>> slapping small, non-critical projects together.
> That is a matter of taste. I still struggle with python.

Hmm, if you're having specific problems with Python, comp.lang.python
and the Freenode #python channel are pretty helpful.

> And for Arduino, I've used winavr-ada based on avr-ada
> http://sourceforge.net/p/avr-ada/wiki/Home/

How has that been going for you?  I had heard that avr-ada was very
limited.  People usually program AVR's in C.  But I haven't looked into
it much.

> There is a new book out, that discusses ada on arduino.
> http://www.inspirel.com/articles/Ada_On_Cortex.html

There are some ARM-based Arduinos but usually Arduino refers to boards
with 8-bit AVR processors.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  7:50     ` Jacob Sparre Andersen
@ 2015-07-06 18:44       ` Jeffrey R. Carter
  0 siblings, 0 replies; 33+ messages in thread
From: Jeffrey R. Carter @ 2015-07-06 18:44 UTC (permalink / raw)


On 07/06/2015 12:50 AM, Jacob Sparre Andersen wrote:
> 
> SPARK 2014 should in your case probably be seen as an optimisation tool.
> If you notice that some section of your Ada sources are taking too much
> time, you can use the SPARK tools to evaluate if it is safe to disable
> checks for that part of your application.

That's an odd view of SPARK. SPARK is about proving that code is correct and
implements its requirements. That such code is also proven not to fail run-time
checks is a side benefit.

Besides, in 30 yrs of using Ada I've never encountered a case where turning off
checks made the difference between not meeting timing requirements and meeting them.

To the OP: If you're interested in creating well designed, correct, robust,
readable software (that is, in being a software engineer), then you'll like Ada
and not be happy with any of the other languages you mentioned. The skills you
learn with Ada will make your software better if you do have to use such a language.

If, however, you want to be one of the incompetent hacks whose poorly designed,
error-ridden, fragile, write-only code is the source of most of the security
vulnerabilities in the world, then you won't like Ada and will like one of your
other choices. You'll also get the pleasure of spending more of your time
finding and correcting your errors than you do designing and writing code.

-- 
Jeff Carter
"It's symbolic of his struggle against reality."
Monty Python's Life of Brian
78

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  6:56   ` nomadfate
@ 2015-07-06 19:18     ` David Botton
  0 siblings, 0 replies; 33+ messages in thread
From: David Botton @ 2015-07-06 19:18 UTC (permalink / raw)


> This is for a hobby. I am trying to choose between embedded micro-controller programming and application programming.

Then Ada is your ideal choice. Take a look at http://gnoga.com for a great way to do modern UIs using Ada with browser or browser components as rendering engines. With Ada you can learn one language and explore both options. Even better you can have use Gnoga to provide an application interface to your board in a light weight and active fashion for live monitoring, etc.

David Botton


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  7:04   ` nomadfate
                       ` (2 preceding siblings ...)
  2015-07-06  9:34     ` Björn Lundin
@ 2015-07-06 19:20     ` David Botton
  3 siblings, 0 replies; 33+ messages in thread
From: David Botton @ 2015-07-06 19:20 UTC (permalink / raw)


>Python have Raspberry Pi system so Python and Java are still on my watch list.

I use Gnoga and Ada as well as others on Raspberry Pi (Jesse distro). In fact I've even designed and written my code using the Pi itself. There are others on the gnoga list that use the Pi for production systems with Ada and Gnoga.

David Botton

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06 16:19       ` Paul Rubin
@ 2015-07-06 22:37         ` Björn Lundin
  2015-07-07  1:30           ` Paul Rubin
  2015-07-07  3:46           ` Nasser M. Abbasi
  0 siblings, 2 replies; 33+ messages in thread
From: Björn Lundin @ 2015-07-06 22:37 UTC (permalink / raw)


On 2015-07-06 18:19, Paul Rubin wrote:
> Björn Lundin <b.f.lundin@gmail.com> writes:
>>>> Python doesn't have Ada's high-reliability features or its
>>>> performance, but it's easier to learn and more productive for
>>>> slapping small, non-critical projects together.
>> That is a matter of taste. I still struggle with python.
> 
> Hmm, if you're having specific problems with Python, comp.lang.python
> and the Freenode #python channel are pretty helpful.

Thanks, I have sorted out my issues.
The python documentation is good.
But - I often fall into the IndentationException trap
when I have rewritten some code -
or find that I did not declare a variable
where I should, so after a change,
it is uninitialised when I read it -
which is same as reading an undeclared variable
and I get an exception.
Or not str(var) when I print it.

I know how to resolve the errors,
but it does not come as natural as Ada compile errors do.

I find it more fragile. Or I am to bad at testing.


>> And for Arduino, I've used winavr-ada based on avr-ada
>> http://sourceforge.net/p/avr-ada/wiki/Home/
> 
> How has that been going for you?  I had heard that avr-ada was very
> limited.  People usually program AVR's in C.  But I haven't looked into
> it much.

I guess it depends on your standard.
For me, it was my first try into
embedded, so I got blinky going,
and bought some ds1820 one-wire temp sensors,
and got 7 to work, reporting the temp over serial line
to a mac, over bluetooth. (with a serial to bluetoth adapter on the Nano. )

I then printed the temps on an LCD.

But I never got interrupts to work.
(for a hc-sr04 distance sensor)
Most likely my inexperience.
But the maillist is very friendly and helpful.

So it works for basic stuff for a beginner like me.
Without too much hassle.
But more complicated - I cannot say, but I see no reason why not.

>> There is a new book out, that discusses ada on arduino.
>> http://www.inspirel.com/articles/Ada_On_Cortex.html
> 
> There are some ARM-based Arduinos but usually Arduino refers to boards
> with 8-bit AVR processors.

yes, but I did not imply that Arduinos are not AVR.
In the book, there is a tip that compiling
 on a native ARM is ok, if you specify the cpu.

I guess it's like you can compile for i386 on a newer
intelbox, with correct switches.

example from the book is
 gcc -c -mcpu=cortex-m3 -mthumb program.adb

of course, other tools are applied later to the object file.
see chapter 2 and 3 of the book.

No - I did not try myself yet.


--
Björn


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06 22:37         ` Björn Lundin
@ 2015-07-07  1:30           ` Paul Rubin
  2015-07-07  9:35             ` darkestkhan
  2015-07-07  3:46           ` Nasser M. Abbasi
  1 sibling, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-07  1:30 UTC (permalink / raw)


Björn Lundin <b.f.lundin@gmail.com> writes:
> But - I often fall into the IndentationException trap...
> or find that I did not declare a variable...
> I know how to resolve the errors,
> but it does not come as natural as Ada compile errors do.
> I find it more fragile. Or I am to bad at testing.

Yeah, it's a different style, you have to write just a small bit of
code, then test it, then write the next bit, etc.  But you can bang out
working code very fast that way, especially with an interactive
interpreter shell.  Python is more fragile in that refactoring breaks
stuff and the way around that is with comprehensive test automation that
takes considerable determination to maintain.  It's IMHO best for small
to medium sized tasks that aren't complex enough to need Ada's
organizational machinery, like up to a few thousand LOC.  And 200 LOC of
Python can often do as much stuff as 1 KLOC of Ada (Python is a lot
slower though, since it's interpreted).  For really big programs, you
need as much maintenance infrastructure that you might as well use a
typed language.  I've been using Haskell some, and have been wanting to
try the ML family.

This article is really good:

https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/

it's mostly about the typed-vs-untyped debate, but gives a useful
picture of debugging and untyped languages.  

>>> http://sourceforge.net/p/avr-ada/wiki/Home/
>> How has that been going for you? 
> I guess it depends on your standard.  For me, it was my first try into
> embedded, so I got blinky going, ...

Nice, I will give it a try sometime.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06 22:37         ` Björn Lundin
  2015-07-07  1:30           ` Paul Rubin
@ 2015-07-07  3:46           ` Nasser M. Abbasi
  2015-07-07  8:24             ` Björn Lundin
  1 sibling, 1 reply; 33+ messages in thread
From: Nasser M. Abbasi @ 2015-07-07  3:46 UTC (permalink / raw)


On 7/6/2015 5:37 PM, Björn Lundin wrote:

> Thanks, I have sorted out my issues.
> The python documentation is good.
> But - I often fall into the IndentationException trap

Worst feature of any computer language I've seen.  No closing
token such as "}" or "end", to help the programmer _visually_
see and align the end of a construct or a block around.
It depends on white spacings.

White spacing is not visible as an "anchor" to align the eyes at
as {...} or begin....end and I find I need more mental effort
to see the code arrangement and the logic when looking at Python
code due to its missing these visual anchors.

I found this so bad of a design, and so distracting, that is why
I did not look at Python after this.

> when I have rewritten some code -
> or find that I did not declare a variable

There are no variable declaration in Python. Another bad
feature of dynamics languages. Having variable declarations
at the top of the function helps in self documenting
the code as well. All of this is missing.

> where I should, so after a change,
> it is uninitialised when I read it -
> which is same as reading an undeclared variable
> and I get an exception.
> Or not str(var) when I print it.
>

Welcome to the wonderful world of dynamic languages
and duck typing.  After 60 years of software engineering,
the world has managed to get rid of all good solid programming
features al in order to make programming "easier" for newbies.

This is the first thing any one hears about Python or
any language like it, it is "so easy" to program in it.
(but wait until the bugs start showing up when the
program gets larger than 100 lines and when has to
maintain the program later.)

> I know how to resolve the errors,
> but it does not come as natural as Ada compile errors do.
>
> I find it more fragile. Or I am to bad at testing.
>

All the duck typing and loose typing languages are fragile.

But this is by design. To make it easy to just type anything
and it just supposed to know what you meant and it does it,
thanks to duck typing. Try this is Lua for example (another
one of those modern dynamic languages)

----------------------------------
>lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio

> a=1+10
> print(a)
11

> a=1+"10"
> print(a)
11
>
------------------------

See? It knew what to do. duck typing at its best.

We need duck typing in Ada, to make it more popular and
easy to program in ;)

--Nasser

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07  3:46           ` Nasser M. Abbasi
@ 2015-07-07  8:24             ` Björn Lundin
  2015-07-07  8:57               ` Georg Bauhaus
  0 siblings, 1 reply; 33+ messages in thread
From: Björn Lundin @ 2015-07-07  8:24 UTC (permalink / raw)


On 2015-07-07 05:46, Nasser M. Abbasi wrote:
>> when I have rewritten some code -
>> or find that I did not declare a variable
> 
> There are no variable declaration in Python.

No not declaration in the Ada sense.
But you do have to assign a variable before use,
so that

a1=12
print(a)

gives
NameError: name 'a' is not defined

so in one sense, you need to declare your intention
to use a variable

if A :
  B = False

if B :
  print("breaks if A is False")

--
Björn


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07  8:24             ` Björn Lundin
@ 2015-07-07  8:57               ` Georg Bauhaus
  2015-07-07 18:48                 ` Randy Brukardt
  0 siblings, 1 reply; 33+ messages in thread
From: Georg Bauhaus @ 2015-07-07  8:57 UTC (permalink / raw)


On 07.07.15 10:24, Björn Lundin wrote:
> On 2015-07-07 05:46, Nasser M. Abbasi wrote:
>>> when I have rewritten some code -
>>> or find that I did not declare a variable
>>
>> There are no variable declaration in Python.
>
> No not declaration in the Ada sense.
> But you do have to assign a variable before use,

The argument (of no variable declarations) is also a tough
sell because of pylint.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07  1:30           ` Paul Rubin
@ 2015-07-07  9:35             ` darkestkhan
  2015-07-07 17:26               ` David Botton
  0 siblings, 1 reply; 33+ messages in thread
From: darkestkhan @ 2015-07-07  9:35 UTC (permalink / raw)


On Tuesday, July 7, 2015 at 1:30:41 AM UTC, Paul Rubin wrote:
> Björn Lundin writes:
> [..]
> It's IMHO best for small
> to medium sized tasks that aren't complex enough to need Ada's
> organizational machinery, like up to a few thousand LOC.

Incidentally I quite often use "Ada's organizational machinery" for rapid prototyping - even when I end up writing in C or anything else with weak/duck typing (due to various reasons, usually $ from employer). This organizational machinery is really nice for quickly checking if approach taken is correct.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07  9:35             ` darkestkhan
@ 2015-07-07 17:26               ` David Botton
  0 siblings, 0 replies; 33+ messages in thread
From: David Botton @ 2015-07-07 17:26 UTC (permalink / raw)


> Incidentally I quite often use "Ada's organizational machinery" for rapid prototyping

I have done the same now for 12+ years. I find that Ada is the ideal language to "hack in" since it helps get the "Hack" right from the start. Most importantly years back I can still read and reuse that code and still do.

David Botton


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07  8:57               ` Georg Bauhaus
@ 2015-07-07 18:48                 ` Randy Brukardt
  2015-07-07 22:56                   ` Paul Rubin
  0 siblings, 1 reply; 33+ messages in thread
From: Randy Brukardt @ 2015-07-07 18:48 UTC (permalink / raw)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 759 bytes --]

"Georg Bauhaus" <bauhaus@futureapps.invalid> wrote in message 
news:mng47i$ctt$2@dont-email.me...
> On 07.07.15 10:24, Björn Lundin wrote:
>> On 2015-07-07 05:46, Nasser M. Abbasi wrote:
>>>> when I have rewritten some code -
>>>> or find that I did not declare a variable
>>>
>>> There are no variable declaration in Python.
>>
>> No not declaration in the Ada sense.
>> But you do have to assign a variable before use,
>
> The argument (of no variable declarations) is also a tough
> sell because of pylint.

One could argue that if the use of a separate tool is needed to make the use 
of a language sensible, there's something wrong with the language design. 
(After all, why isn't that tool part of the compiler?)

                              Randy. 


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07 18:48                 ` Randy Brukardt
@ 2015-07-07 22:56                   ` Paul Rubin
  2015-07-08 19:50                     ` Randy Brukardt
  0 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-07 22:56 UTC (permalink / raw)


"Randy Brukardt" <randy@rrsoftware.com> writes:
> One could argue that if the use of a separate tool is needed to make
> the use of a language sensible, there's something wrong with the
> language design.  (After all, why isn't that tool part of the
> compiler?)

You could say the same thing about SPARK.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-07 22:56                   ` Paul Rubin
@ 2015-07-08 19:50                     ` Randy Brukardt
  2015-07-08 22:57                       ` Paul Rubin
  0 siblings, 1 reply; 33+ messages in thread
From: Randy Brukardt @ 2015-07-08 19:50 UTC (permalink / raw)


"Paul Rubin" <no.email@nospam.invalid> wrote in message 
news:87pp438tm6.fsf@jester.gateway.sonic.net...
> "Randy Brukardt" <randy@rrsoftware.com> writes:
>> One could argue that if the use of a separate tool is needed to make
>> the use of a language sensible, there's something wrong with the
>> language design.  (After all, why isn't that tool part of the
>> compiler?)
>
> You could say the same thing about SPARK.

I would! I'm not at all a fan of SPARK. It solves a problem in a way that is 
only useful for an elite few. I want to solve problems for all programmers 
(at least those that are willing to use Ada!).

                                           Randy.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-08 19:50                     ` Randy Brukardt
@ 2015-07-08 22:57                       ` Paul Rubin
  2015-07-09 17:59                         ` Björn Lundin
  0 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-08 22:57 UTC (permalink / raw)


"Randy Brukardt" <randy@rrsoftware.com> writes:
> I would! I'm not at all a fan of SPARK. It solves a problem in a way
> that is only useful for an elite few. I want to solve problems for all
> programmers (at least those that are willing to use Ada!).

You might give Python a try, since unlike Ada you don't need a separate
compiler.  Pylint is not really that important once you understand the
usual errors people make.  Of course the programming philosophy is
totally different.

One thing that's really changed about programming in the past 10 years
or so is that "software engineering" has become kind of a niche area,
like embedded programming.  It used to be that programs were valuable
and cherished, carefully maintained permanent objects.  Today it's more
like: data is gold, code is crap.  Development has gotten so much faster
and easier that tons of code has just one user, or is used just a few
times.  Meanwhile, organizations revolve around amassing data and
sometimes throwing code or computers at it to extract info or
statistics.  But the code is semi-ephemeral.  So long term software
engineering considerations don't apply to it nearly as strongly
as in the traditional Ada/Java/C++ world.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-08 22:57                       ` Paul Rubin
@ 2015-07-09 17:59                         ` Björn Lundin
  2015-07-09 20:10                           ` Paul Rubin
  0 siblings, 1 reply; 33+ messages in thread
From: Björn Lundin @ 2015-07-09 17:59 UTC (permalink / raw)


On 2015-07-09 00:57, Paul Rubin wrote:

> You might give Python a try, since unlike Ada you don't need a separate
> compiler.  Pylint is not really that important once you understand the
> usual errors people make.  

I find that it is. As I stated above, I tend to get
loads of different error when maintaining Python.
RuntimeErrors, that surley pylint would have caught.

But pylint needs some config. Not all
like constants with CAPS and
and not being able to write

if A : doB

But pylint is not mandatory to get something 'working'
And not being mandatory, it is not used all the time.
And crash ...

--
Björn


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 17:59                         ` Björn Lundin
@ 2015-07-09 20:10                           ` Paul Rubin
  2015-07-09 20:22                             ` Jeffrey R. Carter
  2015-07-10 22:12                             ` Randy Brukardt
  0 siblings, 2 replies; 33+ messages in thread
From: Paul Rubin @ 2015-07-09 20:10 UTC (permalink / raw)


Björn Lundin <b.f.lundin@gmail.com> writes:
> I find that it is. As I stated above, I tend to get loads of different
> error when maintaining Python.  RuntimeErrors, that surley pylint
> would have caught.

I don't have too much trouble with this once my stuff is debugged.  It
helps to program Python in a somewhat Haskell-like style (avoid mutating
data and try to follow a consistent datatype discipline at coding time,
even though the runtime allows a chaotic mixture of types).  That isn't
too constraining and it eliminates a lot of potential sources of errors.

I probably should use pylint but in practice I don't, and haven't missed
it too badly.  I've used the Erlang Dialyzer (same idea as pylint) and
found that it does miss stuff.  Heck, I use Haskell and that misses
stuff too.  Software Foundations (book about Coq) has been on my study
list for quite a while.  One of these days...

> But pylint is not mandatory to get something 'working' And not being
> mandatory, it is not used all the time.  And crash ...

Yeah, it's a different development style, as the Chris Smith essay I
linked to earlier describes.  With Python-like languages, it's SOP to
write code expecting it to crash, then then rely on the extensive
runtime type and data checks to quickly diagnose and fix the crashes.
You can get a module to be pretty solid after a few iterations of this.

I don't claim this process gives the level of assurance that traditional
Ada application areas require, but similarly, most people don't need to
drive a military battle tank if they're only going to the corner store.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 20:10                           ` Paul Rubin
@ 2015-07-09 20:22                             ` Jeffrey R. Carter
  2015-07-09 20:41                               ` Paul Rubin
  2015-07-10 22:12                             ` Randy Brukardt
  1 sibling, 1 reply; 33+ messages in thread
From: Jeffrey R. Carter @ 2015-07-09 20:22 UTC (permalink / raw)


On 07/09/2015 01:10 PM, Paul Rubin wrote:
> 
> I don't claim this process gives the level of assurance that traditional
> Ada application areas require, but similarly, most people don't need to
> drive a military battle tank if they're only going to the corner store.

Actually, driving a tank is simpler than going to the corner store. A tank is
armed and armored and you don't care much where it goes or if it runs into
things. Going to the corner store, you need to stay on the street, avoiding
other cars, people, dogs, buildings, and so on.

In simple terms: all programs need to be correct, robust, and reliable.

-- 
Jeff Carter
"Violence is the last refuge of the incompetent."
Foundation
151


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 20:22                             ` Jeffrey R. Carter
@ 2015-07-09 20:41                               ` Paul Rubin
  2015-07-09 21:59                                 ` Jeffrey R. Carter
  0 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-09 20:41 UTC (permalink / raw)


"Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:
> In simple terms: all programs need to be correct, robust, and reliable.

But they also have to ship on time, and that's often of higher priority ;-).

Here's a famous and somewhat relevant study:

http://web.cecs.pdx.edu/~apt/cs457_2005/hudak-jones.pdf


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 20:41                               ` Paul Rubin
@ 2015-07-09 21:59                                 ` Jeffrey R. Carter
  2015-07-09 22:37                                   ` Paul Rubin
  0 siblings, 1 reply; 33+ messages in thread
From: Jeffrey R. Carter @ 2015-07-09 21:59 UTC (permalink / raw)


On 07/09/2015 01:41 PM, Paul Rubin wrote:
> "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:
>> In simple terms: all programs need to be correct, robust, and reliable.
> 
> But they also have to ship on time, and that's often of higher priority ;-).

"It doesn't matter what you do, the bridge must be finished by the end of the
month." If the civil engineer goes along with that, when the bridge collapses,
killing hundreds of people, he's going to be in big trouble. Same if he agrees
to use inferior materials.

All bridges need to be correct, robust, and reliable. Schedule and cost are
secondary.

Allowing error-ridden, fragile S/W to cost people huge sums of money and
inconvenience should be equally unacceptable. The incompetent coders who create
such S/W should be in the same kind of big trouble as the irresponsible civil
engineer. When that happens, shipping on time will never be of higher priority.

-- 
Jeff Carter
"Violence is the last refuge of the incompetent."
Foundation
151

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 21:59                                 ` Jeffrey R. Carter
@ 2015-07-09 22:37                                   ` Paul Rubin
  2015-07-09 22:55                                     ` Jeffrey R. Carter
  0 siblings, 1 reply; 33+ messages in thread
From: Paul Rubin @ 2015-07-09 22:37 UTC (permalink / raw)


"Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:
> "It doesn't matter what you do, the bridge must be finished by the end
> of the month." If the civil engineer goes along with that, ...  All
> bridges need to be correct, robust, and reliable. Schedule and cost
> are secondary.

Would you say the same thing about making a bookshelf?  Lots of people
make bookshelves with home tools and not much planning or engineering.
Cue the jokes about the million dollar bookshelves built by the US
military.  The home tool approach is much quicker and more cost
effective and you get a perfectly usable bookshelf.

To be sure, I'd have doubts about flying in an airplane that was
programmed in Python.  That kind of thing is why I'm interested in Ada.
Blogging software?  Python works perfectly well for that.  Youtube is
programmed in Python, it's spread across 10,000's of computers, and if a
few percent of them are down at any given moment, nobody cares outside
of their own staff.  If there's a serious enough bug report, they can
push out a change within a few hours.  And even if all of Youtube
crashes for part of a day (I don't think this has happened, though Gmail
(written in Java) has had such outages), people might get annoyed but
nobody will die.  They probably won't even remember the incident if it
doesn't recur too often.

In construction terms, there's a spectrum ranging from "bookshelf" to
"suspension bridge" and civil engineering starts becoming important
somewhere in the middle of that scale.  What Python does is expand the
range of the "bookshelf" construction approach to tasks of intermediate
complexity and moderate performance demands.  So lots of programs that
used to take planning and teamwork and multi-week schedules can instead
be banged out by one person in a few afternoons, if they start from a
reasonably clear idea of what they want to do.  I'm sure you can
understand why people value this.  A full-spectrum programmer should be
able to use the techniques best suited to solve the problem that they
actually have.  If your bookshelf proposal requires a 6 month study
before you start driving nails, your approach is not competitive.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 22:37                                   ` Paul Rubin
@ 2015-07-09 22:55                                     ` Jeffrey R. Carter
  2015-07-09 23:25                                       ` Paul Rubin
  0 siblings, 1 reply; 33+ messages in thread
From: Jeffrey R. Carter @ 2015-07-09 22:55 UTC (permalink / raw)


On 07/09/2015 03:37 PM, Paul Rubin wrote:
> 
> Would you say the same thing about making a bookshelf?  Lots of people
> make bookshelves with home tools and not much planning or engineering.
> Cue the jokes about the million dollar bookshelves built by the US
> military.  The home tool approach is much quicker and more cost
> effective and you get a perfectly usable bookshelf.

So when does this bookshelf that doesn't need to be correct, robust, and
reliable need to ship? This is a red herring. It has nothing to do with what
we're discussing.

> In construction terms, there's a spectrum ranging from "bookshelf" to
> "suspension bridge" and civil engineering starts becoming important
> somewhere in the middle of that scale.

Engineering becomes important when the thing will be used by others. That's at
least 99% of S/W.

-- 
Jeff Carter
"Violence is the last refuge of the incompetent."
Foundation
151


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 22:55                                     ` Jeffrey R. Carter
@ 2015-07-09 23:25                                       ` Paul Rubin
  0 siblings, 0 replies; 33+ messages in thread
From: Paul Rubin @ 2015-07-09 23:25 UTC (permalink / raw)


"Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:
> So when does this bookshelf that doesn't need to be correct, robust,
> and reliable need to ship? This is a red herring. It has nothing to do
> with what we're discussing.

It's possible to make a reliable bookshelf without a lot of engineering
is all I'm saying.

> Engineering becomes important when the thing will be used by
> others. That's at least 99% of S/W.

I don't believe that.  I'm probably the sole user of 50% of the code
that I write at work, and 90%+ of the code that I write at home.  And
the stuff I write at work that's used by others is generally running on
servers, so the users are interacting with it but not actually running
it themselves, which also makes things easier.  One such program crashed
dozens of times a day during its early deployment and nobody noticed or
cared (a monitoring daemon restarted it within milliseconds after every
crash).  Yes we could have worked more of the bugs out before deploying,
but that would have meant delaying launch for no significant gains.  We
instead examined the crash logs and fixed problems when they occurred,
and things got stable after a while.  That would have been an
irresponsible approach for a safety critical or financial site or one
with medical records etc., but for what we were doing (an information
service) it was fine.

It occurs to me, some of the highest reliability systems in the world
(phone switches designed for 40-year lifetimes with zero seconds down)
are programmed in Erlang, which is typeless like Python.  Those systems
do need real development and QA processes, but part of the Erlang
mindset is that the software WILL have bugs and the system has to keep
running in the presence of those bugs.  So the programs are written as
interacting lightweight processes that are expected to crash if they hit
problems.  Crashed processes are monitored and restarted, or the
workload migrated if the restart scheme fails.  One of the mottos is
"the power cord is a single point of failure" which means that the
systems use redundant hardware and have the ability to keep running
(maybe at degraded capacity) even when something breaks.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-09 20:10                           ` Paul Rubin
  2015-07-09 20:22                             ` Jeffrey R. Carter
@ 2015-07-10 22:12                             ` Randy Brukardt
  1 sibling, 0 replies; 33+ messages in thread
From: Randy Brukardt @ 2015-07-10 22:12 UTC (permalink / raw)


"Paul Rubin" <no.email@nospam.invalid> wrote in message 
news:878uap8539.fsf@jester.gateway.sonic.net...
...
> Yeah, it's a different development style, as the Chris Smith essay I
> linked to earlier describes.  With Python-like languages, it's SOP to
> write code expecting it to crash, then then rely on the extensive
> runtime type and data checks to quickly diagnose and fix the crashes.
> You can get a module to be pretty solid after a few iterations of this.

I've always used Ada this way (especially on low importance programs). 
There's of course one more step (get rid of the compile-time errors), but 
that's way better than spending lots of time building test harnesses. Ada's 
extensive runtime checks catch most of the rest of the errors.

I hate compile-time errors as much as the next guy, but I hate debugging 
programs a lot more. I expect my programs to work the first time I run them, 
and most do. (And, after a few off-by-one errors, the only programs that 
don't work are the ones that ultimately solved the wrong problem. No 
programming language or system could do anything about that.)

What I want is more compile-time detection of errors to increase the 
likihood that the programs work immediately (or tell me precisely why they 
didn't work). Once you've reached runtime, it's too late for the computer to 
provide much help in getting the program to do what's intended.

                            Randy.


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: newbie, Spark 2014 or Ada 2012
  2015-07-06  0:28 newbie, Spark 2014 or Ada 2012 nomadlite
  2015-07-06  1:30 ` Paul Rubin
  2015-07-06  2:16 ` David Botton
@ 2015-07-10 22:49 ` nomadfate
  2 siblings, 0 replies; 33+ messages in thread
From: nomadfate @ 2015-07-10 22:49 UTC (permalink / raw)


I decided to learn Python because it can use as a system administer scripting tool. I will reserve Java and VB .net for later if I ever need them. C, Java, Python, VB .Net and Ada/Spark all have a lot of library to use. They all can do the job with the right library. I guess for a hobby general purpose programming language it is not what programming language you learn, it is what library you learn. 

For embedded system, I will learn Assembly and (C or Ada). I will learn Python for system administer purpose. If I don't like Python, C or Ada for developing applications then I will learn Java or VB .Net.

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2015-07-10 22:49 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-06  0:28 newbie, Spark 2014 or Ada 2012 nomadlite
2015-07-06  1:30 ` Paul Rubin
2015-07-06  7:04   ` nomadfate
2015-07-06  7:20     ` Paul Rubin
2015-07-06  7:50     ` Jacob Sparre Andersen
2015-07-06 18:44       ` Jeffrey R. Carter
2015-07-06  9:34     ` Björn Lundin
2015-07-06 16:19       ` Paul Rubin
2015-07-06 22:37         ` Björn Lundin
2015-07-07  1:30           ` Paul Rubin
2015-07-07  9:35             ` darkestkhan
2015-07-07 17:26               ` David Botton
2015-07-07  3:46           ` Nasser M. Abbasi
2015-07-07  8:24             ` Björn Lundin
2015-07-07  8:57               ` Georg Bauhaus
2015-07-07 18:48                 ` Randy Brukardt
2015-07-07 22:56                   ` Paul Rubin
2015-07-08 19:50                     ` Randy Brukardt
2015-07-08 22:57                       ` Paul Rubin
2015-07-09 17:59                         ` Björn Lundin
2015-07-09 20:10                           ` Paul Rubin
2015-07-09 20:22                             ` Jeffrey R. Carter
2015-07-09 20:41                               ` Paul Rubin
2015-07-09 21:59                                 ` Jeffrey R. Carter
2015-07-09 22:37                                   ` Paul Rubin
2015-07-09 22:55                                     ` Jeffrey R. Carter
2015-07-09 23:25                                       ` Paul Rubin
2015-07-10 22:12                             ` Randy Brukardt
2015-07-06 19:20     ` David Botton
2015-07-06  2:16 ` David Botton
2015-07-06  6:56   ` nomadfate
2015-07-06 19:18     ` David Botton
2015-07-10 22:49 ` nomadfate

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox