13,178 Matching Annotations
  1. Last 7 days
    1. This gem uses a Rack middleware to clear the store object after every request, but that doesn't translate well to background processing with Sidekiq. A companion library, request_store-sidekiq creates a Sidekiq middleware that will ensure the store is cleared after each job is processed, for security and consistency with how this is done in Rack.
    1. Please do not directly email any Sidekiq committers with questions or problems. A community is best served when discussions are held in public.
    2. I also sell Sidekiq Pro and Sidekiq Enterprise, extensions to Sidekiq which provide more features, a commercial-friendly license and allow you to support high quality open source development all at the same time.
    1. Eine wunderschön in Szene gesetzte Geschichte mit abwechslungsreichen Puzzle-Elementen in einer liebevoll gestalteten und mit grandioser musikalischer Untermalung verfeinerten Spielwelt. Leider nur in Englischer Sprache (deutsche Untertitel), diese aber in sehr guter Qualität. Ein Bisschen kurz vielleicht, aber in seiner Umsetzung so rund und geschliffen, dass die Spieldauer meines Erachtens nur ein geringes Manko darstellt. Wer Spiele im Graphic-Novel-Stil mit individueller Graphik und herzerwärmenden Geschichten mag, darf Figment nicht verpassen.Definitive Empfehlung! (ggf. im Sale)
    1. What will you do if your country would be under attack by bandits? You will surely transform into a super robot , isn't it?
    1. Sorry that the site is slow/unstable right now! I'm working on fixing it! -Michael
    1. Don’t replace words with emojis One thing you definitely don’t want to do is have your emojis get in the way of people being able to comprehend your subject lines. Emojis should be a complement to the words in your subject lines – they should never replace words themselves. It’s when people leave out words, right?
    1. It should be defined inline. If you are using the img tag, that image should have semantic value to the content, which is why the alt attribute is required for validation. If the image is to be part of the layout or template, you should use a tag other than the img tag and assign the image as a CSS background to the element. In this case, the image has no semantic meaning and therefore doesn't require the alt attribute. I'm fairly certain that most screen readers would not even know that a CSS image exists.

      I believed this when I first read it, but changed my mind when I read this good rebuttal: https://hyp.is/f1ndKJ5eEeu_IBtubiLybA/stackoverflow.com/questions/640190/image-width-height-as-an-attribute-or-in-css

    2. They cause completely different behavior for auto margins. If you have a fixed element for example with top/bottom/left/right set to zero and you stick an image in it you want to center wrapped in a div, then in order to center that div with auto margins, you MUST specify a CSS width/height, because specifying an HTML attribute width/height has no effect and the margins remain zero. I have no idea why the difference exists.
    3. Whether to specify in html or css is best judged on individual circumstances. A large number of images of the same size would probably be best served with css, a single image with html. That said, if you are specifying other styles for the image (border colour, style or radius, float etc) it would make sense to add width & height to the css.
    4. From a practical point of view it's highly desirable to specify them to prevent page reflows as mentioned above. However those suggesting it should be in the html because of this are missing the fact browsers use css when building the page initially. If they didn't the page would have to be redrawn for floated elements, specified padding, margins etc.
    5. Obviously there are practical reasons for using px for images. However keeping images in px would seem to negate the argument for not using them.
    6. I think that depends on HOW you are using the attribute. If you're styling multiple images within a list or table so that they lay out correctly, then put the width/height in your CSS to avoid the need to add another set of tags to every image in the list. Use something like ul.gallery img: { width:117px; } On the other hand, if you are inserting an image into some content and it needs to be a certain size to make the document flow properly, then put it in the HTML. That way you don't have to muck up the style sheet for each different image in the html. And this way, if you change the content to a different image, of remove the image all together, you don't have remnants of code scattered in your CSS to remember to delete.
    7. Neither question nor answer appears to understand the notion of semantic HTML. Height and width are presentational attributes regardless of where you put them. For semantics we establish what the image means to content in the alt tag. I don't remember why it was so important to width/height in the HTML but I suspect it was in case you hit browsers without CSS rendering. It's not a semantics issue. If anything it thwarts separation of concerns to a degree.

      claim: that the OP's question and this answer are incorrect

      Could we say that this answer (that this comment replies to) missed the point?

      I actually believed and thought this answer was spot on ... until I read this comment, and then I reversed my opinion.

    8. If anything it thwarts separation of concerns to a degree.
    9. It's not a semantics issue.
    10. Ah yes, excactly the right answer. Img tags are for information, css backgrounds are for layout.
    11. CSS seems like the right place to put visual information. On the other hand, few would argue that image "src" should not be specified as an attribute and the height/width seem as tied to the binary image data as the "src" is.
    12. What's the "correct" semantic way to specify image height and width? In CSS... width:15px; or inline... <img width="15" ?
    13. (Yes, I realize from a technical, end-user perspective this really doesn't matter.)

      The word "technical" in this sentence doesn't seem to belong or to clarify anything. I think it would be clearer without it.

      But I think I understand what he's saying, which is that technical details don't matter to the end user. They only know/see/care if it works or not.

    1. the double bind faced by every politician: responding to scurrilous charges only gives them unwarranted publicity; not responding to such charges is often interpreted as an admission of guilt
    1. as it stands, this only goes to highlight what a miracle, what a classic for the ages Actraiser really is, whilst confirming itself as, unfortunately, one to avoid.
    1. Graceful Explosion Machine is the gaming equivalent of empty calories. It's pretty to look at, super smooth, and has some interesting weapons, but there's no real hook to keep you sustained beyond the act of moving around and blowing up aliens.
    2. Game looks great, ignore the 1 score review. Disgruntle co worker, perhaps? Perhaps a jealous fellow pupil... When all ither reviews are 7 or more and there's one review with a 1 score and a novel saying just why they thinks... you know something's not quite right. Hopefully this will go some way to normalising the score.
    1. Probably the only thing I'd like to see fixed now is the possibility of quick restart like in the old Timberman and not having to wait for the 'Game Over' screen to finally be back to the good ol' choppin'
    2. I don't know why but they just removed some featuresAt first, you can't play this with your friend online except waiting for random matchingYou can't invite your friends to your closed room and play togheter
    1. Though few in number, these tiles create a dizzying array of possible situations, from the reemergence of Mughal authority, the rise of new kingdoms, or the aggressive rejection of the Company's efforts.
    2. negotiate over the fate of the insidious British East India Company

      insidious

    3. We know the audience for such games is limited. In order for us to produce games up to our standards, we rely on a direct sales model. Our games are not designed for traditional distribution or retail channels. The vast majority of all copies produced will be sent to Kickstarter backers or to people who purchase games through our store.  This means we can spend many more resources on the game's physical production without having to worry about retail viability.
    4. At Wehrlegig Games our objective is simple: publish beautiful games with historical themes that treat their subjects and their players seriously.
    5. Wehrlegig Games

      At first I thought it was German (like Wehrmacht), but I guess it's a play on his name, Cole Wehrle

    6. These are games that make arguments and encourage discussion. They don't shy away from difficult subjects.
    7. We are are continuing our commitment to creating our games that are free and widely accessible anyone that is curious by making our game files available under Creative Commons license BY–NC–SA 4.0. That means we will continue offering a full, free print-and-play kit for Pax Pamir, and later this campaign, John Company! Anyone can use, remix, and share the game, so long as they do not use it for commercial purposes. 
    8. Just about everything players own can be exchanged at any time. The old promise system has been redesigned to provide players with the ability to give away future favors for crucial leverage in the heat of a negotiation. Players have never had so many ways to make a deal. 
    9. John Company: Second Edition is a dramatic reimagining of the first edition that took over two years of extensive design and production work. 
    10. Though massive in scope, John Company relies on a fundamentally simple core that teaches players how to play while they play.
    11. teaches players how to play while they play
    12. John Company offers players a new understanding of British history in the eighteenth and nineteenth century that reflects contemporary scholarship on the subject and extensive research into primary documents. John Company attempts to put the critical events of that time in their proper context and show how the imperial experience transformed the domestic culture of Britain. The East India Company lurked behind every building of a textile mill and every bit of wealth in a Jane Austen novel.  John Company is an uncompromising portrait of the people who made the Company and the British Empire what it was. It is as frank as it is cutting in its satire.  Accordingly, the game wrestles with many of the key themes of imperialism and globalization in the eighteenth and nineteenth centuries and how those developments were felt domestically. As such, this game might not be suitable for all players. Please make sure everyone in your group consents to this exploration before playing. 
    13. If you'd like to read more about the game's arguments, click here. 

      I'm not familiar with this term "arguments" used like this. Isn't this more referring to the motivation for this game?

    1. I really like the ideas in this game: the theme, what it's trying to accomplish (explore the problems with imperialism, if I understood correctly), the game board, the game in general. I want to like it.

      but, I don't think I would like this one enough due to the luck and relying on other players' whims (trading) mechanisms:

      • Dice Rolling
      • Push Your Luck

      You can risk a lot getting an expensive estate, but if you push your luck too much, your risk/gamble won't pay off and you'll permanently lose that [pawn] and those victory points.

    1. Unfortunately, there is some urgency to this effort. As Shashi Tharoor writes in his book Inglorious Empire (2018), over the past 30 years, there has been a tremendous bout of collective amnesia, espeically in the UK, about the history of empire and its consequences. Into this vacuum, revisionist historians of the worst kind like Niall Ferguson have capitalized on historical blind spots of people living today to make an absurd case for the benefits of empire. This cannot be allowed to happen. Tharoor believes that one of the best bulwarks against this erasure is to do the work of inquiry and to make the history of empire accessible and apparent to the widest audience. It is into this effort that I submit my work. John Company is an unsparing portrait that hopefully will give its players a sense of the nature of empire and the long half-life of its cultural production. It is certainly not the only way to make a game about empire, but I hope that it does its part in adding to our understanding of that subject and its continued legacy.
    1. Denialism is an essentially irrational action that withholds the validation of a historical experience or event, when a person refuses to accept an empirically verifiable reality.
    2. Holocaust denial is a subset of genocide denial, which is a form of politically motivated denialism.
    3. The term COVID-19 denialism or new coronavirus denialism[31] (or viral denialism)[32] refers to the thinking of those who deny[33][34][35] the reality of the COVID-19 pandemic [36][37][38][39][40] or, at the very least, deny that deaths are happening in the manner or proportions scientifically recognized by the World Health Organization
    1. the term historical revisionism identifies the re-interpretation of a historical account.[1] It usually involves challenging the orthodox (established, accepted or traditional) views held by professional scholars about an historical event or time-span or phenomenon, introducing contrary evidence, or reinterpreting the motivations and decisions of the people involved.
    1. Sustainable DistributionGavin uses an electric scooter to transport the games to the drop off points. He would use his electric bike but he is nervous of someone nicking it when He is in the post office. Gavin has a plant based diet. The diet reduces his carbon footprint and his emissions, which his wife is very happy about.
    2. Environmentally friendly factoriesGavin uses the Cubiko Games workshop ‘factory’. Yes, it is a bit cold in the winter but, hey, I built it myself. Transporting goods from the ‘factory’ is very economical, it is about 20 metres from the factory to Gavins house via the garden. The worker in the ‘factory’ (Gavin) is committed to looking after the environment and tries his best to use every piece of wood to the best of his ability. The working conditions are great. (Flexi-time, unlimited food and drink breaks). No child labour. (Samuel sometimes ventures into the factory but we don’t put him to work).
    3. Very slow, very cheap shipping via Royal Mail. Royal Mail advertises an ‘online’ international 12 week ’no rush’ service (not trackable). The price of the service is dependant on weight. It may be possible for international shipping to be achieved for around £15 GBP, may be even less! (This is not a typing error).  If you are interested in this service you will need to contact us before the campaign ends.

      Why do we need to contact you before the campaign ends if we want cheap shipping? Why wouldn't we want cheap shipping? What will shipping be if we don't choose that? How do we choose that? Why can't we choose shipping directly after the campaign ends?

    4. We, at Cubiko Games, would love for Foundation to reach as many people as possible because it’s such a great game. We hope that the ‘stretch goals’, ’2 x reward‘ tiers and ’voucher codes’ will encourage people to back and share the campaign so that it reaches its full potential.  Then, hopefully, with more backers comes more exposure which, in turn, leads to the ultimate goal..... Foundation gets signed by a leading game manufacturer.
    1. and even though there are plenty of additional characters to unlock, they’re ultimately only cosmetic, providing no real incentive to unlock them all

      only cosmetic

    1. What you want is not to detect if stdin is a pipe, but if stdin/stdout is a terminal.

      The OP wasn't wrong in exactly the way this comment implies: he didn't just ask how to detect whether stdin is a pipe. The OP actaully asked how to detect whether it is a terminal or a pipe. The only mistake he made, then, was in assuming those were the only two possible alternatives, when in fact there is (apparently) a 3rd one: that stdin is redirected from a file (not sure why the OS would need to treat that any differently from a pipe/stream but apparently it does).

      This omission is answered/corrected more clearly here:

      stdin can be a pipe or redirected from a file. Better to check if it is interactive than to check if it is not.

    2. stdin can be a pipe or redirected from a file. Better to check if it is interactive than to check if it is not.
    1. (Ideally the run-time library would treat a pipe in the same way as a console, but it seems that most don't.)

      Often/usually treating a pipe/redirect differently is in fact what you want.

      Like if you output to a file, you don't necessarily want colors or real-time progress/status outputted along with it: you want just the bare data to be saved, which can then be filtered in useful ways with other standard tools like grep and sed.

    2. There is no equivalent. Windows doesn't have pseudo-terminals.
    3. unbuffer connects to a command via a pseudo-terminal (pty), which makes the system treat it as an interactive process, therefore not using any stdout buffering.
    4. What is the equivalent of unbuffer program on Windows?
    5. Addendum: seven years later, Windows finally supports pseudoconsoles. If you are running on Windows 10 v1809 or later, this new API should solve your problem.
    1. Bugs The man page is longer than the program.

      I assume "the program" is referring to this file:

      https://core.tcl-lang.org/expect/file?name=example/unbuffer&ci=trunk

      , which compared to the source for man page, is in fact much smaller (about 1/2 the length).

    2. When you have a pipeline, unbuffer must be applied to each element except the last (since that doesn't have its output redirected). Example: unbuffer p1 | unbuffer p2 | unbuffer p3 | p4
    3. unbuffer disables the output buffering that occurs when program output is redirected. For example, suppose you are watching the output from a fifo by running it through od and then more.    od -c /tmp/fifo | more You will not see anything until a full page of output has been produced. You can disable this automatic buffering as follows:    unbuffer od -c /tmp/fifo | more
    1. is a mechanism designed for creating an external host for character-mode subsystem activities that replace the user interactivity portion of the default console host window

      My paraphrase: A pseudoterminal replaces (fakes/pretends to be?) the user interactivity portion.

    2. To prevent race conditions and deadlocks, we highly recommend that each of the communication channels is serviced on a separate thread that maintains its own client buffer state and messaging queue inside your application. Servicing all of the pseudoconsole activities on the same thread may result in a deadlock where one of the communications buffers is filled and waiting for your action while you attempt to dispatch a blocking request on another channel.
    3. ConPTY, or the Windows PTY

      This is how I know that we are talking about a pseudoterminal here, because PTY means pseudoterminal...

    4. How is a pseudoconsole different from a pseudoterminal ?

      I'm guessing that's just a Microsoftism to make it easier to search/find things that are specifically about Microsoft's flavor of pseudoterminal.

      I see they don't use the word "pseudoterminal" at all, but they do mention

      ConPTY, or the Windows PTY

      where PTY is another synonym/name for pseudoterminal. So I think we're safe in saying that this is talking about a pseudoterminal.

    1. The basic rule of thumb is: "I'm not aware of all types of security exploits. I must protect against those I do know of and then I must be proactive!".
    2. A good heuristic is to not trust the libraries you did not write either.
    3. Within functions, you may want to check that you are not referencing something that is not valid (i.e., null) and that array lengths are valid before referencing elements, especially on all temporary/local instantiations.
    4. In this practice, only errors from outside the program's control are to be handled (such as user input); the software itself, as well as data from within the program's line of defense, are to be trusted in this methodology.
    1. It has two very different meanings, that you would have to distinguish by context. One meaning is just expressing that we have limitations. If you don't know something, that's just tough, you don't know it and you have to live with that. You don't have information if you don't have that information. The other meaning is that not only are there gaps in our knowledge, but often we don't even know what the gaps in our knowledge are. I don't know how to speak Finnish. That's a gap in my knowledge that I know about. I know that I don't know how to speak Finnish. But there are gaps in my knowledge that I'm not even aware of. That's where you can say "You don't know what you don't know" meaning that you don't even know what knowledge you are missing.

      I had this thought too.

    2. but in essence I expect OP means Rumsfeld's "unknown unknowns"
    3. I wouldn't necessarily go as far as call this a "phrase" per se.

      why not? what is a phrase then?

    4. Socrates' dictum may be wise, but I think there's a world of difference between OP's acknowledgement that the amount of things one doesn't know is indeterminate, and Socrates' assertion that, for him, everything falls into that category.
    5. But there are also unknown unknowns – the ones we don't know we don't know.
    6. We also know there are known unknowns; that is to say we know there are some things we do not know.

      known unknown

      like what?

    7. Some risk management techniques urge practitioners to consider the "known unknowns" and the "unknown unknowns"
    8. Incidentally, I'd add that it can also be used in looking toward the future, in awareness that we lack such a crystal ball: We base our plans on our knowledge, and there'll be times where we know there is a gap in that knowledge, but we're also aware that there may be things we can't possibly foresee, because "we don't know what we don't know".
    9. Yogi also said that "Half the lies they tell about me aren't true"
    10. "I didn't say a lot of the things that I said"
    11. "It ain't over 'til it's over,"
    12. "You can observe a lot by watching."
    13. Generally speaking, it would not be a good way to express something in formal writing, unless perhaps you were deliberately injecting humor.
    14. This is the essence of "You don't know what you don't know," only it's being expressed in a comical way, much like Yogi Berra might have said. (To those unfamiliar with the Yogi Berra reference, he was a professional baseball player who was reknowned for his wry way of saying things, such as, "It ain't over 'til it's over," and, "You can observe a lot by watching."
    15. Yet, in all these instances, life offers no crystal ball; there's no way of knowing what the future holds, or to be cognizant of something we are unaware of. This is the essence of "You don't know what you don't know," only it's being expressed in a comical way
    16. Had I known the van was going to overheat, I would have driven the car instead.
    17. If I had known you were going to get such bad grades on your report card, I wouldn't have let you go to the dance last weekend.
    18. If I had known your plane was going to be two hours late, I wouldn't have rushed to the airport.
    19. That said, you couldn't know what you didn't know, but now you know.
    1. Comedian Henny Youngman was famous for one-liners delivered in a deadpan manner. Much of his humor was both wry and dry.
    2. I intend to live forever. So far, so good. Whenever I think of the past, it brings back so many memories. I think it's wrong that only one company makes the game Monopoly. If it's a penny for your thoughts and you put in your two cents worth, then someone, somewhere is making a penny. What's another word for Thesaurus? I used to work in a fire hydrant factory. You couldn't park anywhere near the place.
    3. Adding another Steven Wright gem: "24 hour banking? I don't have time for that."
    4. Comedian Henny Youngman was famous for one-liners delivered in a deadpan manner. Much of his humor was both wry and dry. For example, his most famous line: Take my wife ... please. If you never saw the delivery, "Take my wife" was said as if he was using his wife as an example to set up a situation, as in "Take my wife [for example]." After a brief pause, the "please" turned it into a request.
    5. Some humor is just funny on a surface level, or incorporates words that sound funny. What makes dry humor unique is that it isn't always obviously funny, especially with a deadpan delivery; you often need to think about it. The humor is entirely within the meaning of the words.
    6. I'm sorry I hurt your feelings when I called you stupid. I really thought you already knew.
    7. Inside every older person is a younger person wondering what the hell happened.
    8. I swear; if my memory was any worse, I could plan my own surprise party.
    9. "Wry" evolved from a meaning of "to twist". Applied to humor, it refers to humor that is bitterly or disdainfully ironic or amusing; distorted or perverted in meaning; warped, misdirected, or perverse; words that are unsuitable or wrong; scornful and mocking in a humorous way--it covers a lot of territory (see WordReference.com).
    10. What is the difference between “wry” and “dry” humor?
    11. "Dry" humor is often called deadpan humor because it is delivered with a straight face and a serious tone, as if it is not intended to be funny.
    12. Wry humor can be delivered in a deadpan manner.

      .

    1. cleverly and often ironically or grimly humorous

      technically a definition for just "wry" but seems to also actually define/describe "wry humor" too, no?

    1. British HumorDry humor is particularly associated with British humor. Fawlty Towers, a British television comedy that aired from 1975 to 1979 is considered an unusually good example of dry humor. The series is set in a family run seaside hotel operated by a cynical and snobbish man, played by John Cleese, who finds himself in constant conflict with hotel guests. No matter how outlandishly silly each episode becomes, there is never any sense that the characters are trying to be funny.
    2. Dry humor is a delivery technique. As such, it shouldn't be confused with specific types of humor or with sarcasm. Sarcasm is delivered without humor because it's generally not funny but intended to mock or convey contempt. Dry humor pertains to something funny.
    3. Humor is based on a sense of the unexpected, inexplicable, ridiculous and ironic. Dry humor can enhance these qualities to make things more humorous. For example, humor that is delivered as if it were not a joke may feel more surprising and odd.

      theory

      enhances these qualities

    4. Dry humor is a comedic technique of delivering humor as if you didn't intend to be funny.
    5. .mainContent {  -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;  user-select: none; }

    1. Going through different search systems brings us some fruits in the form of indistinct mumbling about the untimely closed I/O data streams, TTYs and PTYs (pseudoterminals) and all the rest of it.
    2. because while dealing with interactive programs one often come across numerous hidden traps which doesn’t usually happen with ordinary sh-scripts. Though fortunately or may be not, but most of these problems generally turn up within first five minutes of the work under the script. The symptoms typically look like that author can’t pass the authentication from the script.
    3. Of course you must not use plain-text passwords and place them directly into scripts. You even must not use telnet protocol at all. And avoid ftp, too. I needn’t say why you should use ssh, instead, need I? And you also must not plug your fingers into 220 voltage AC-output. Telnet was chosen for examples as less harmless alternative, because it’s getting rare in real life, but it can show all basic functions of expect-like tools, even abilities to send passwords. BUT, you can use “Expect and Co” to do other things, I just show the direction.
    4. But the imho easiest solution he oversaw…
    5. Apart from some dodgy English (‘let’s don’t’ for example)
    6. Yes, autoexpect is a good tool, but it is used just to automatically create TCL-expect scripts, by watching for user. So it’s can be equal to writing expect-scripts by hand.
    7. It's essential to note that all the experiments are valid for FreeBSD and I can't guarantee they'll give the same results on other operating systems.
    8. now I'll tell you what really takes place when we start interactive applications from shell scripts
    9. Pretty good writing for what seems evident to be a non-native speaker of English

    10. Certainly, if for some reason Python doesn't suit you either you can install, let us say, PHP language. Well, I think you realize that the searching of suitable solution can go on for a long time and may be only MS Visual Basic will be lacking in the list of results. So, I believe the time has already approached to put it all aside and come to to the Point.
    11. However, if in spite of all the attractiveness of the foregoing method and all the arguments of the expect authors (see FAQ) you have made up your mind not to use expect, then you are either too lazy or entirely poisoned by Perl. Well, in this case your salvation lies in the installation of the corresponding Perl-module (http://sourceforge.net/projects/expectperl), which is supposed to support all the functions of the original expect

      integration

      unwanted dependency

      Perl

      funny

    12. you can take the opportunity of using Python as a corresponding module pexpect is written for it (http://pexpect.sourceforge.net). It's clear that Python language should be installed on the system beforehand
    13. By the way, the README file of the expect says there is a libexpect library that can be used to write programs on C/C++ which allows to avoid the use of TCL itself. But I'm afraid, this subject is beyond this article. Besides authors of expect themselves seem to prefer expect-scripts to the library.

      possible but doesn't seem preferred

      looking at what the authors themselves use

    14. But in all this incongruous abundance you'll certanly find the links to expect It's just what is wanted: the tool, which is traditionally used to communicate automatically with interactive programs. And as it always occurs, there is unfortunately a little fault in it: expect needs the programming language TCL to be present. Nevertheless if it doesn't discourage you to install and learn one more, though very powerful language, then you can stop your search, because expect and TCL with or without TK have everything and even more for you to write scripts.
    15. Really you are not the first to run into such a problem
    16. At first you feel confused because usual pipe constructions such as: $ echo luser && echo TopSecret | telnet foo.bar.com fail you and the problem which seemed so plain on the face of it grows into “mission impossible”.
    17. among these scripts there certainly will be those to cooperate with interactive applications such as telnet, ftp, su, password, ssh
    18. As a result of all this in a couple of weeks I had a working version of empty (http://www.sourceforge.net/projects/empty) which allows to start interactive programs and communicate with them using FIFO-files
    1. one of the oldest problems was the use of Command-line interactive programs in UNIX shell-scripts

      first sighting of this article

    2. In some cases empty can be the simplest replacement for TCL/expect or other similar programming tools because empty:
    3. empty is an utility that provides an interface to execute and/or interact with processes under pseudo-terminal sessions (PTYs). This tool is definitely useful in programming of shell scripts designed to communicate with interactive programs like telnet, ssh, ftp, etc.
    4. can be easily invoked directly from shell prompt or script

      Can't expect / unbuffer / etc. (whatever this is attempting to contrast itself with) be easily invoked directly from shell prompt or script too??

      Okay, I guess you have to know more about how expect is invoked to understand what they mean. One glance at the examples, comparing them, and all becomes clear:

      #!/bin/sh
      empty -f -i in -o out telnet foo.bar.com
      empty -w -i out -o in "ogin:" "luser\n"
      

      I didn't realize that expect required/expected (no pun intended) to be used in scripts with its own shebang line:

      #!/usr/bin/expect
      
      spawn telnet foo.bar.com 
      expect ogin {send luser\r}
      

      That does make it less easy/normal to use expect within a shell script.

      I was coming to the expect project from/for the unbuffer command, which by contrast, is quite easy to include/use in a shell script -- almost the same as empty, in fact. (Seems like almost a mismatch to have unbuffer command in expect toolkit then. Or is expect command the only odd one out in that toolkit?)

    5. does not use TCL, Perl, PHP, Python or anything else as an underlying language is written entirely in C has small and simple source code can easily be ported to almost all UNIX-like systems
    6. does not use TCL, Perl, PHP, Python or anything else as an underlying language
    1. If no file is detected (in case, it's being run as part of a script or the command is being piped)

      How does it detect that it's being run non-interactively as part of a script?

      Is that distinct/different from detecting whether the command is being piped?

    1. The role of the terminal emulator process is:

      Shows the relationship between a "terminal emulator" and a pseudoterminal, as alluded to in the intro:

      is a pair of pseudo-devices, one of which, the slave, emulates a hardware text terminal device, the other of which, the master, provides the means by which a terminal emulator process controls the slave.

    2. TTY is right there in the name, but this article makes no attempt to clarify what exactly the relationship between a pseudoterminal and a TTY. I feel like a whole paragraph about the relation to TTY would be warranted, including a link to TTY article, of course, which does link [back] to and explain some of the relation to pseudoterminal:

      In many computing contexts, "TTY" has become the name for any text terminal, such as an external console device, a user dialing into the system on a modem on a serial port device, a printing or graphical computer terminal on a computer's serial port or the RS-232 port on a USB-to-RS-232 converter attached to a computer's USB port, or even a terminal emulator application in the window system using a pseudoterminal device.

    1. The question talks about stdout but the title mentions stdin. I think the title is wrong.

      Refers to old title, as seen here

      Trick an application into thinking its stdin is interactive

    2. If there are some pipe between these commands, you need to flush stdout. for example: script -q /dev/null commands... | ruby -ne 'print "....\n";STDOUT.flush'
    3. unbuffer works with piping to less. That may be an easier syntax than what you've got.
    4. Is there an OS agnostic way of doing this? I like the script command on macOS because you don't have to wrap the command in quotes. The script runs and sends output to the tty which is duplicated in the supplied file, but I can't seem to get the linux version to behave the same way... I'm probably doing something wrong. So what's the equivalent linux script command for this on macOS: script -q -t 0 tmp.out perl -e 'print "Test\n"' Test cat tmp.out Test
    5. The quirky looking printf is necessary to correctly expand the script's arguments in $@ while protecting possibly quoted parts of the command (see example below).
    6. I came up with the following little helper function
    7. faketty() { script -qfc "$(printf "%q " "$@")" /dev/null }
      faketty() {
          script --return -qfc "$(printf "%q " "$@")" /dev/null
      }
      

      Now:

      ⟫ faketty python -c "import sys; print sys.stdout.isatty(); exit(1)" ; echo $?
      True
      1
      
    8. You probably want to use the --return option, if your version of script has it, to preserve the child process' exit code.
    9. This doesn't work in cases where the component checking for interactivity is looking at the $- shell variable for an "i"
    10. If you want to pipe it into something interactive, like less -R, where terminal input goes to less -R, then you need some extra trickery. For example, I wanted a colourful version of git status | less. You need to pass -R to less in order that it respect the colours, and you need to use script to get git status to output colour. But we don't want script to keep ownership of the keyboard, we want this to go to less. So I use this now and it works well: 0<&- script -qfc "git status" /dev/null | less -R . Those first few characters close stdin for this one commmand.

      Just git status | less -R worked for me without any additional trickery, but I see now that's because I told it to "always" use color in my .gitconfig:

      .[color]
        ui = always
        status = always
      

      I tried disabling that and then trying the

      0<&- script -qfc "git status" /dev/null | less -R
      

      trick, but it didn't work for me. It didn't show any output and I couldn't exit out with Ctrl-C or anything I tried. Had to force kill from another terminal.

      But it's a good example of the related but different problems:

      1. forcing less to respect colors (easy)
      2. force/trick git status to think it has a terminal
      3. force/trick it so you can control keyboard with less
    11. if you really need the child process to see a TTY, you can create a PTY.
    1. In many computing contexts, "TTY" has become the name for any text terminal, such as an external console device, a user dialing into the system on a modem on a serial port device, a printing or graphical computer terminal on a computer's serial port or the RS-232 port on a USB-to-RS-232 converter attached to a computer's USB port, or even a terminal emulator application in the window system using a pseudoterminal device.

      It's still confusing, but this at least helps/tries to clarify.

    1. Work with the open source languages you love without the hassles of runtime management.

      What is runtime management?

    2. Your Open Source Supply Chain Is Bigger Than You Think.Reduce your security, risk, and compliance load. Let us scan your Python, Perl, and Tcl application for you and help you gain the transparency you need to reduce open source risk.
    1. but our first title The Detail will be pulled from Steam and AppStore at some point.
    2. Work-life balance However, I recently understood that while we were working on the game, I broke the one and only rule I set for the founders of the company: always family first. My wife was expecting our second child and I was working long days at the office, and I became obsessed with making sure the game is as good as possible. The same probably applies to everyone in the team, since we shared love and passion for the franchise.
    3. On iOS, the figures are close to the same except there the game has been for free for a while already.

      why do publishers make games free on iOS or sometimes Android but not for PC?

    1. no big deal, the episodes are all for Steams bottom price

      Steam's bottom price = meaning $.49?

    2. I just don't understand why a finished episodically released game is still offered episodic.
    1. A charming little romp through a realm of lateral thinking.

      lateral thinking

    2. Good fun if you think along this sort of wavelength!

      .

    3. Admittedly, some of the puzzles can be a little bit obtuse, particularly without any sort of hint-system to ensure you're thinking along the right lines, but still perfectly 100%able even without that.