sketchucation logo sketchucation
    • Login
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Ruby Console woes

    Scheduled Pinned Locked Moved Developers' Forum
    17 Posts 5 Posters 866 Views 5 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      jessejames
      last edited by

      @chris fullmer said:

      Then from there we could discuss what ELSE could be added to a multi-line editor. Perhaps line numbering, syntax highlighting. It is my understanding that all those things would be possible to implement into an html inputbox like Jim's WebConsole.

      Finally! Someone that sees the truth!!!

      Chris we need to put our minds together and build a useful multi-line-editor for SketchUp. Jim has a template and maybe we can build off of it.

      Unfortunatly however, i know nothing of JavaScript or the web. I am an applications "kinda" guy so wxRuby or Tkinter would be more my cup of tea. But i will help in anyway possible because i believe this is SO important for SketchUp.

      Heck maybe i will learn JavaScript at the same time! ๐Ÿ˜‰

      Maybe after building something useful we can convince the SU guy's to package it with the source distro? But if not, at least it will be downloadable for those who need it.

      Always sleep with a loaded gun under your pillow!

      1 Reply Last reply Reply Quote 0
      • J Offline
        jessejames
        last edited by

        Sorry for the run on monologuing here but i need to show you all something. One thing Python has that Ruby desperately needs is command line help and doc strings. I could lecture about it all day but let me just show you an interactive session...

        here i import math and print all the available methods in the "math" module

        
        >>> import math
        >>> dir(math)
        ['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
        
        

        Now i just want some info on math.hypot method

        
        >>> help(math.hypot)
        Help on built-in function hypot in module math;
        
        hypot(...)
            hypot(x,y)
            
            Return the Euclidean distance, sqrt(x*x + y*y).
        
        

        Now i just show help for whole module (line breaking are mucking up the text but you get the idea)

        
        >>> help(math)
        Help on built-in module math;
        
        NAME
            math
        
        FILE
            (built-in)
        
        DESCRIPTION
            This module is always available.  It provides access to the
            mathematical functions defined by the C standard.
        
        FUNCTIONS
            acos(...)
                acos(x)
                
                Return the arc cosine (measured in radians) of x.
            
            acosh(...)
                acosh(x)
                
                Return the hyperbolic arc cosine (measured in radians) of x.
            
            asin(...)
                asin(x)
                
                Return the arc sine (measured in radians) of x.
            
            asinh(...)
                asinh(x)
                
                Return the hyperbolic arc sine (measured in radians) of x.
            
            atan(...)
                atan(x)
                
                Return the arc tangent (measured in radians) of x.
            
            atan2(...)
                atan2(y, x)
                
                Return the arc tangent (measured in radians) of y/x.
                Unlike atan(y/x), the signs of both x and y are considered.
            
            atanh(...)
                atanh(x)
                
                Return the hyperbolic arc tangent (measured in radians) of x.
            
            ceil(...)
                ceil(x)
                
                Return the ceiling of x as a float.
                This is the smallest integral value >= x.
            
            copysign(...)
                copysign(x,y)
                
                Return x with the sign of y.
            
            cos(...)
                cos(x)
                
                Return the cosine of x (measured in radians).
            
            cosh(...)
                cosh(x)
                
                Return the hyperbolic cosine of x.
            
            degrees(...)
                degrees(x) -> converts angle x from radians to degrees
            
            exp(...)
                exp(x)
                
                Return e raised to the power of x.
            
            fabs(...)
                fabs(x)
                
                Return the absolute value of the float x.
            
            factorial(...)
                factorial(x) -> Integral
                
                Find x!. Raise a ValueError if x is negative or non-integral.
            
            floor(...)
                floor(x)
                
                Return the floor of x as a float.
                This is the largest integral value <= x.
            
            fmod(...)
                fmod(x,y)
                
                Return fmod(x, y), according to platform C.  x % y may differ.
            
            frexp(...)
                frexp(x)
                
                Return the mantissa and exponent of x, as pair (m, e).
                m is a float and e is an int, such that x = m * 2.**e.
                If x is 0, m and e are both 0.  Else 0.5 <= abs(m) < 1.0.
            
            fsum(...)
                sum(iterable)
                
                Return an accurate floating point sum of values in the iterable.
                Assumes IEEE-754 floating point arithmetic.
            
            hypot(...)
                hypot(x,y)
                
                Return the Euclidean distance, sqrt(x*x + y*y).
            
            isinf(...)
                isinf(x) -> bool
                Checks if float x is infinite (positive or negative)
            
            isnan(...)
                isnan(x) -> bool
                Checks if float x is not a number (NaN)
            
            ldexp(...)
                ldexp(x, i) -> x * (2**i)
            
            log(...)
                log(x[, base]) -> the logarithm of x to the given base.
                If the base not specified, returns the natural logarithm (base e) of x.
            
            log10(...)
                log10(x) -> the base 10 logarithm of x.
            
            log1p(...)
                log1p(x)
                
                Return the natural logarithm of 1+x (base e).
                      The result is computed in a way which is accurate for x near zero.
            
            modf(...)
                modf(x)
                
                Return the fractional and integer parts of x.  Both results carry the sign
                of x and are floats.
            
            pow(...)
                pow(x,y)
                
                Return x**y (x to the power of y).
            
            radians(...)
                radians(x) -> converts angle x from degrees to radians
            
            sin(...)
                sin(x)
                
                Return the sine of x (measured in radians).
            
            sinh(...)
                sinh(x)
                
                Return the hyperbolic sine of x.
            
            sqrt(...)
                sqrt(x)
                
                Return the square root of x.
            
            tan(...)
                tan(x)
                
                Return the tangent of x (measured in radians).
            
            tanh(...)
                tanh(x)
                
                Return the hyperbolic tangent of x.
            
            trunc(...)
                trunc(x;Real) -> Integral
                
                Truncates x to the nearest Integral toward 0. Uses the __trunc__ magic method.
        
        DATA
            e = 2.7182818284590451
            pi = 3.1415926535897931
        
        
        

        This is what makes Python so intuitive to new users. It's a powerful tool! You can even create your own doc strings for classes and method/functions if you want to!

        EDIT: I actually posted this same idea on comp.lang.ruby last year. And to my surprise "Mats" (ruby's creator) himself said that it would be a great idea! So the will is there...

        Always sleep with a loaded gun under your pillow!

        1 Reply Last reply Reply Quote 0
        • J Offline
          Jim
          last edited by

          I don't think your comparison is fair - you are not comparing apples to apples.

          You are comparing the full Python language installation, with all its standard and non-standard libraries against Sketchup-ruby - which is Ruby in a single .dll and includes none of the Ruby language standard libraries you get with the full Ruby installation.

          If Google had choosen to embed Python in Sketchup instead of Ruby, we would still have only a single .dll of Python, and it would include almost none of the Python language libraries - of which IDLE is one. So you instead of the crappy Ruby Console, you'd be stuck with the crappy Python Console.

          If you are interested, here is a way to use Python for SketchUp: http://www.cosc.canterbury.ac.nz/greg.ewing/SuPy/

          Hi

          1 Reply Last reply Reply Quote 0
          • J Offline
            Jim
            last edited by

            I did start an upgrade to WebConsole (and it does have syntax highlighting!)


            211.jpg

            Hi

            1 Reply Last reply Reply Quote 0
            • J Offline
              Jim
              last edited by

              One more thing - I don't disagree that a replacement for the Ruby Console would be welcome.

              If you are up to it, I think the ruby command-line interface IRB could be hacked to use TDB's bridge to access Sketchup objects.

              Or if IRB could be made to use the ruby.dll from the Sketchup folder - it would then have access to Sketchup objects. I don't know if these strategies would work, though.

              Hi

              1 Reply Last reply Reply Quote 0
              • mitcorbM Offline
                mitcorb
                last edited by

                JesseJames wrote:
                @unknownuser said:

                Thanks, great to be back, i been out trail ridin' far too long, Whew! you know any good remedies for saddle rash? ๐Ÿ˜†

                Answer: Boudreaux's Butt Paste! I kid you not. That's the name. Also excellent for diaper rash. Jus' ax any Sout' Luzianna momma.

                I take the slow, deliberate approach in my aimless wandering.

                1 Reply Last reply Reply Quote 0
                • J Offline
                  jessejames
                  last edited by

                  @jim said:

                  I did start an upgrade to WebConsole (and it does have syntax highlighting!)

                  Jim where is the file? I cannot find it on your blog ๐Ÿ˜• I see Web Dialog but that is it. And the title of your dialog in the image is "Ruby Web Dialog 2"...

                  @mitcorb said:

                  Answer: Boudreaux's Butt Paste! I kid you not. That's the name. Also excellent for diaper rash. Jus' ax any Sout' Luzianna momma.

                  Ah yes. I have seen this in the grocery store. Very funny, thanks ๐Ÿ˜†

                  Always sleep with a loaded gun under your pillow!

                  1 Reply Last reply Reply Quote 0
                  • J Offline
                    jessejames
                    last edited by

                    @jim said:

                    I don't think your comparison is fair - you are not comparing apples to apples.
                    You are comparing the full Python language installation, with all its standard and non-standard libraries against Sketchup-ruby - which is Ruby in a single .dll and includes none of the Ruby language standard libraries you get with the full Ruby installation.

                    Respectfully, I think you misunderstood my intentions Jim. I'm not saying "look" Python IDLE rules and Ruby console sucks. No. I am saying Python IDLE has some very good things going for it and i want to create a Ruby clone of it for SketchUp.

                    @jim said:

                    If Google had choosen to embed Python in Sketchup instead of Ruby, we would still have only a single .dll of Python, and it would include almost none of the Python language libraries - of which IDLE is one. So you instead of the crappy Ruby Console, you'd be stuck with the crappy Python Console.

                    Yes this is exactly right, i am trying to change that...

                    @jim said:

                    If you are interested, here is a way to use Python for SketchUp: http://www.cosc.canterbury.ac.nz/greg.ewing/SuPy/

                    Thanks Jim giggle. It was my crusading, and begging, and nagging last year (at the expense of my reputation to multiple communities) to everyone on planet earth including "Guido van Rossum" himself that brought about this module.

                    Greg Ewing shares my interest in Python and SketchUp and my crusading helped nudge him to make this module.(Thanks again Greg!)... SketchUp, you have not heard the last of SuPy, i can assure you of that. ๐Ÿ˜Ž

                    But i am not against fixing Ruby also. I have learned alot about the language and now have a better respect for it. So that is why i want to create or improve on an existing multi-line-console for SU.

                    Jim,
                    I see you have posted an image of the new console, this looks wonderful!!!

                    Always sleep with a loaded gun under your pillow!

                    1 Reply Last reply Reply Quote 0
                    • M Offline
                      MartinRinehart
                      last edited by

                      Let's do something about this.

                      http://forums.sketchucation.com/viewtopic.php?f=180&t=21686

                      Author, Edges to Rubies - The Complete SketchUp Tutorial at http://www.MartinRinehart.com/models/tutorial.

                      1 Reply Last reply Reply Quote 0
                      • J Offline
                        jessejames
                        last edited by

                        @martinrinehart said:

                        Let's do something about this.

                        Hello Martin,

                        I knew enlightened minds like myself existed in SketchUp land, but just did not have the physical evidence until now. Well that's still only less than a handful of Python coders i have a count of... Myself, Greg, You, and a very interested fan tomot who stood by me last year through trials and tribulations and got nothing in return. And there where a few other seeming interested parties... (Sorry if i left anyone out)

                        hmm, not enough to start the revolution, but it's a start nonetheless!

                        But seriously,
                        Python IDLE is a great yardstick to judge entry level IDE's on. If you like "fancy" IDE's, well you will be disappointed with IDLE. But IDLE is built for one thing, introducing noobies to the Python programming language in a very comfortable way.

                        So we all know that a new multi-line interactive console is desperately needed. I can't see why SketchUp dev would not alow us to build this for them, and then they could throw it in the source distro.

                        But we must get this into the core SketchUp release. If someone just releases another plug-in and that ugly Ruby console stays in SketchUp then we might all just as well download one of the already existing Ruby IDE's out there.

                        But a real Ruby SUIDLE("swiddle" or "sweedle") OR SUIDE("sweede") would be a god send for everybody! And Taking IDLE's modular approach we could start simple and just add to our hearts desire!

                        The current Python IDLE weighs in a 1.53MB but a lot of this can be trimmed. Only the most important features are really needed...

                        Minimum Features
                        -syntax highlighting
                        -bracket matching

                        Icing on the Cake
                        -code completion
                        -object browsing
                        -smart indent
                        -call tips
                        -"your wish here"

                        But most importantly this whole redundant cycle of the current Ruby scripting experiance is quite laborious. Here is a short script that describes the process in painstaking detail...

                        
                        from patience import *
                        from meds import Prozac, Asperin  
                        
                        rants = [
                          'OMG!, not again!', 
                          'rats, here we go again!',
                          'Somebody just shoot me already!',
                           ] 
                        
                        def lament(self);
                           self.sanity -= 1
                           print random.choice(rants)
                        
                        def medicate();
                            self.swallow(Prozac, Asprin)
                        
                        count = 0
                        while self.sanity > 0;
                          count += 1
                          if count % 5 == 0;
                            self.medicate()
                          self.write_or_tweak_code()
                          try;
                            su = SketchUp.open()
                            try;
                              su.test_script_functionality();
                              break
                            except ScriptRuntimeError;
                              self.lament()
                          except ScriptLoadError;
                            self.lament()
                          finally;
                            su.close()
                        print 'Finally! \
                        It only took %d cycles to complete this task *sarcasm*' %(count)
                        
                        

                        ...needs to go the way of the Dodo.

                        Always sleep with a loaded gun under your pillow!

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Buy SketchPlus
                        Buy SUbD
                        Buy WrapR
                        Buy eBook
                        Buy Modelur
                        Buy Vertex Tools
                        Buy SketchCuisine
                        Buy FormFonts

                        Advertisement