• Merge Three Files into One Using Command Line

    I have three pdf files that I want to merge into a single file. But I don’t want the three files to be on three separate pages. I want one big page with the three files all there.

  • Problems with mp4 files in Firefox

    We had some students who took a video with their phone and wanted to post it on an html page. The html code we used was:

    <video controls="controls" width="400">
    	<source src="Robot.mp4" type="video/mp4">
    	Your browser does not support the video tag.

    In Chrome, this worked fine. But in Firefox, it would show like this.

    When that happened, I went to Tools -> Web Developer -> Browser Console. I got a message like this:

    HTTP "Content-Type" of "video/3gpp" is not supported.  Load of media resource http://www.example.com/Robot.3gp failed.

    This message was strange because I wasn’t posting a file called Robot.3gp, but one called Robot.mp4. So on my server, I checked the file.

    $ file Robot.mp4
    Robot.mp4: ISO Media, MPEG v4 system, 3GPP 

    So whatever created this file, actually made a 3gpp file and not a legit mp4. However, I found that you can convert a 3gpp file to mp4 using ffmpeg. I renamed my Robot.mp4 file to Robot.3gp and then converted it.

    $ ffmpeg -i Robot.3gp -ab 64k -ar 44100 -strict -2 Robot.mp4
    ffmpeg version 2.8.12 Copyright (c) 2000-2017 the FFmpeg developers
      built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
      configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
      libavutil      54. 31.100 / 54. 31.100
      libavcodec     56. 60.100 / 56. 60.100
      libavformat    56. 40.101 / 56. 40.101
      libavdevice    56.  4.100 / 56.  4.100
      libavfilter     5. 40.101 /  5. 40.101
      libavresample   2.  1.  0 /  2.  1.  0
      libswscale      3.  1.101 /  3.  1.101
      libswresample   1.  2.101 /  1.  2.101
      libpostproc    53.  3.100 / 53.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Robot.3gp':
        major_brand     : 3gp5
        minor_version   : 0
        compatible_brands: 3gp5isom
        creation_time   : 2017-07-26 17:45:04
      Duration: 00:00:20.23, start: 0.000000, bitrate: 5135 kb/s
        Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt470bg/bt470bg/smpte170m), 720x480, 5005 kb/s, 30 fps, 30 tbr, 90k tbn, 180k tbc (default)
          rotate          : 90
          creation_time   : 2017-07-26 17:45:04
        Side data:
          displaymatrix: rotation of -90.00 degrees
        Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 123 kb/s (default)
          creation_time   : 2017-07-26 17:45:04
    [libx264 @ 0x1e6d1e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
    [libx264 @ 0x1e6d1e0] profile High, level 3.0
    [libx264 @ 0x1e6d1e0] 264 - core 148 r2699 a5e06b9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mp4, to 'Robot.mp4':
        major_brand     : 3gp5
        minor_version   : 0
        compatible_brands: 3gp5isom
        encoder         : Lavf56.40.101
        Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 480x720, q=-1--1, 30 fps, 15360 tbn, 30 tbc (default)
          creation_time   : 2017-07-26 17:45:04
          encoder         : Lavc56.60.100 libx264
        Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 64 kb/s (default)
          creation_time   : 2017-07-26 17:45:04
          encoder         : Lavc56.60.100 aac
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
      Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    frame=  607 fps=178 q=-1.0 Lsize=    1593kB time=00:00:20.22 bitrate= 645.1kbits/s    
    video:1408kB audio:162kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.439324%
    [libx264 @ 0x1e6d1e0] frame I:4     Avg QP:19.34  size:  9992
    [libx264 @ 0x1e6d1e0] frame P:171   Avg QP:22.56  size:  4317
    [libx264 @ 0x1e6d1e0] frame B:432   Avg QP:24.06  size:  1534
    [libx264 @ 0x1e6d1e0] consecutive B-frames:  3.3%  2.6%  8.4% 85.7%
    [libx264 @ 0x1e6d1e0] mb I  I16..4: 28.5% 58.4% 13.1%
    [libx264 @ 0x1e6d1e0] mb P  I16..4:  4.2%  9.2%  1.8%  P16..4: 37.9%  7.7%  5.0%  0.0%  0.0%    skip:34.2%
    [libx264 @ 0x1e6d1e0] mb B  I16..4:  0.3%  0.5%  0.1%  B16..8: 42.5%  2.7%  0.4%  direct: 1.4%  skip:52.2%  L0:48.5% L1:48.6% BI: 2.9%
    [libx264 @ 0x1e6d1e0] 8x8 transform intra:59.6% inter:80.2%
    [libx264 @ 0x1e6d1e0] coded y,uvDC,uvAC intra: 32.2% 41.0% 4.4% inter: 7.5% 10.5% 0.3%
    [libx264 @ 0x1e6d1e0] i16 v,h,dc,p: 33% 24% 26% 18%
    [libx264 @ 0x1e6d1e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 16% 45%  3%  9%  3%  9%  2%  3%
    [libx264 @ 0x1e6d1e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 14% 27%  3% 18%  4% 16%  2%  3%
    [libx264 @ 0x1e6d1e0] i8c dc,h,v,p: 61% 18% 20%  1%
    [libx264 @ 0x1e6d1e0] Weighted P-Frames: Y:2.3% UV:0.0%
    [libx264 @ 0x1e6d1e0] ref P L0: 56.2% 10.7% 21.3% 11.6%  0.1%
    [libx264 @ 0x1e6d1e0] ref B L0: 84.3% 11.6%  4.1%
    [libx264 @ 0x1e6d1e0] ref B L1: 94.4%  5.6%
    [libx264 @ 0x1e6d1e0] kb/s:569.65
    $ ll Robot*
    -rwxr--r-- 1 hep html 12988147 Jul 27 12:53 Robot.3gp
    -rw-rw-r-- 1 hep html  1630980 Jul 27 13:43 Robot.mp4
    $ file Robot.3gp
    Robot.3gp: ISO Media, MPEG v4 system, 3GPP
    file Robot.mp4
    Robot.mp4: ISO Media, MPEG v4 system, version 1

    Now the Robot.mp4 file plays in Firefox without a problem.

  • Keyboard not working with old program setup

    At work, we use some very old programs. In one program (layout), it opens up the other program (specctra). The weird error was that the keyboard would not work in specctra if it was started from layout. If I started it by itself from the command line, it worked perfectly. I looked at the logs when it started and found a lot of warnings that looked like this:

  • Compromised Account

    I had a user account that was compromised yesterday. Fortunately, all they used it for was to send out a ton of spam for 11 hours or so. The person whose account was compromised came in today to find over 50,000 bounced messages in her account. So I had a pretty good idea of which account was causing the problem. After stopping her mailer and then starting and stopping sendmail, I saw that the messages were still going out. I changed her password and that appeared to stop things. I kept an eye on things and will continue to do so for the rest of the day, to see if anything else goes wrong.

  • Year is Half Over

    That was quick. 2017 is already halfway over. Thought I’d take a minute to see how the year is progressing so far.

  • The Back Part II

    On July 21st, I got up as usual and did some stretches for my knee, as I had started doing again a few weeks before, and was putting my shoes on when I felt a sharp pain in my back. I don’t know why, but I do know that I had done this before. So I had a pretty good idea of what to expect. It is now 10 days later and things feel pretty good. I started to be able to do normal things without a ton of pain after about a week. And as I noted in my previous blog post, ice is better than heat. And lying flat on the floor is quite helpful. Though, getting up from lying on the floor is quite painful. But I think it’ll be back to normal after another week. I’m mainly writing this to note how long things take to get better and how often this is happening.

  • The security ID structure is invalid

    All of my new users in my samba domain were getting this error when they tried to login to windows after I updated our ldap server. The problem was that I didn’t update my script to use the new SID on the new server. So for these users, the sambaSID and sambaPrimaryGroupSID values were wrong. I changed them with this ldif file.

  • Uninterruptible Sleep

    Recently, I’ve upgraded some servers at work to RHEL7. I’ve had a few things that I didn’t plan for, but that’s to be expected when you do a major upgrade and you can’t test everything in advance. However, I have had one issue that is still causing problems. And ironically, it seems to affect my own account the most.

  • New Big Project

    For quite a long time, I have wanted to write a book and try to sell it. For a multitude of reasons, I haven’t. As of yesterday, no more! I signed up for 30×500 to get started. I’m hoping to find out ways to determine if my idea will actually help people, thus making it worth doing. Am I sure about this? Absolutely not. Who do I think I am to write a book? I’m not an expert at anything. It will probably be the worst book ever and will sell zero copies. However, I’ve decided that this is something I want to try. I’ve decided that being afraid of failure is worse than failure itself. I want to give it a try. And the 30×500 class is a way to help me hedge my bets. It cost me $1900 and my goal is to make that back within the next three years. (Official date: March 8, 2020) Doable? I have no idea. But I’m going to put in the work on it. I’ve deleted everyone I follow on Twitter, except people that I know personally. So I shouldn’t be wasting any time there. I’ve also deleted all the bookmarks for blogs I like to read and youtube videos I like to watch. Again to not waste time. Lastly, I’ve created a new account on my laptop to use for studying and writing. So all of the programs and things that I have on my laptop aren’t available to this second account and thus I can’t have them open while I’m working. I’ve created a website for it. http://www.pickabout.com Let’s get started!

  • Early Year Projects

    For the start of the year, I’ve been working on some little projects that I’ve enjoyed. I guess one of the projects was big. I finished three bookshelves for my cousins for xmas.

  • Compiling GEANT4

    This one is strictly work-related.

  • January 2017 Checkin

    Based on last year, I know I won’t keep up with checking in each month. However, January is usually pretty easy. Let’s go straight to the chart.

  • Awk notes

    I love awk and use it a lot. Yesterday, I used it for something with multiline records. Awk on single lines is quick and easy to use, but I always have to look up what to do with multiline records. And I still don’t exactly understand everything about multiline records, but here’s what worked for me.

  • First Book Down

    I started it last year, but finished it in 2017. So “Thank You for Being Late” by Thomas Friedman is the first book I read this year. It’s all about how so many aspects of life are speeding up and how that’s affecting people in different ways. I’m not sure that I agree with many of his ideas, but it was an interesting read. I have to say my favorite part of the book was when he described the town in Minnesota that he grew up in. I’m sure everyone didn’t get the same sense of it that he did. But it was nice to hear about a place where different people worked together and weren’t all just looking out for themselves. I like to think that most of the country is still like that, but it’s getting harder and harder to do so. If nothing else, this book got me to go to a neighborhood advisory meeting and join the group. I’m happy about that.

  • Reset a Mailman List Admin Password

    I shouldn’t have to do this again. If I don’t have the admin password for a mailman mailing list, I can reset it with:

  • Not a great start

    So I thought I was doing a great job avoiding sugar last week and it turns out I was mistaken. I think it started with my Costco run where I thought I was buying food without sugar. I swear that I read all the labels and didn’t see sugar on what I bought. But I should take my reading glasses with me when I shop because two of my purchases have sugar. I ended up eating a chicken pot pie because I already had it in the oven when I reread the label. I wasn’t going to throw perfectly good food away. The second one was a pot roast and thanks to the chicken pot pie incident, I reread the label before I even turned the oven on. That one sort of pissed me off because I don’t think there’s any need for sugar in it. And because I love pot roast, grrr.

  • Hello 2017!

    Happy New Year!

  • 2016 Year in Review

    2016 was a year of extremes for me. It didn’t start off great with the passing of my Aunt Lu, who was one of my favorite people. However, it also included my brother’s wedding which was the nicest wedding I’ve ever attended. Like most years it had good and bad parts.

  • Things I&#8217;ve Learned About Myself This Year

    Since I usually wrap my year up on the 31st and make my plans for the coming year on the 1st, I’ve been thinking about this past year. Know Thyself is a common saying, so I think I should take a somewhat critical look at me. So what have I discovered about myself this year?

  • Adding a Windows Computer to an Openldap-Samba Primary Domain Controller

    For a number of years, I’ve used a linux computer running openldap and samba as the primary domain controller for my windows computers. This works great in that we can have a single sign-on for all of our windows and linux computers and use the same account for logins to websites. I’ve had an old piece of paper in my office with the changes that are needed on Windows to be able to get it to join this pdc. Thought I’d finally put them online in case something ever happens to my paper. (#2 below is really the only required step, but I always do all of them.)

  • Mariadb (Mysql) Setup

    I wrote these instructions years ago, but couldn’t find them the other day. So I’m updating a few things and reposting here.

  • Filtering with procmailrc

    I have an email account that I forward to a gmail account so that I can use google’s spam filtering. One thing that google does is limit the size of mail messages to 25mb. If someone sends me a mail message with an attachment greater than 25mb, google will bounce it back to my server, which will then forward it to google, who will then bounce it back to me… you get the picture. I had this happen today and while nothing crashed, it did slow my server to a crawl. So I thought that I’d put a rule in my .procmailrc file before the forward to the gmail account that moves the large file to a local mailbox. This is easy to do, I’d just add a section like this:

  • Random Thoughts

    It’s an early Sunday morning and I’m relaxing with a cup of coffee when I thought I’d post some random thoughts I’ve been having.

  • Delete a command from the history

    If I run a command that, maybe shows a password in it, I’d like to delete that command from my command history. Say I this shows when I run history:

  • Sewing Machines

    I took the sewing machine that was given to me in to get tuned up. The repairman called and said it needed a lot of work and that it would cost around $250-$300. For an old sewing machine that I didn’t like all that much, it was too much money. So I let them keep it for whatever parts they could salvage from it. I don’t sew a lot, but it is a tool that I’d like to have. So I’ve been researching sewing machines.