k

LXer: Linux SED Command: Everything you Need to Know

Published at LXer: In this tutorial, we will explain the Linux SED command using some real examples. SED (Stream Editor) is one of the most used Linux commands in scripts and command lines. It...



  • Syndicated Linux News

k

LXer: Busd Taking Shape As A D-Bus Broker Written In Rust

Published at LXer: Open-source developer Zeeshan Ali Khan presented at last week's systemd "All Systems Go" developer conference on busd as a new D-Bus broker written in the Rust programming...



  • Syndicated Linux News

k

Ultrathin Keyboard Folio m1 connected but no typing

Hello Gents, I wanted to connect my Logitech Ultrathin Keyboard Folio m1 which worked OK in the past but now is not typing anything. The battery is freshly charged and connected. Removing/Adding...




k

LXer: Firefox 132 Enters Beta with Support for Blocking Third-Party Cookie Access

Published at LXer: With the Firefox 131 release rolling out today to all supported platforms, Mozilla promoted the next major version, Firefox 132, to the beta channel for public testing. Read...



  • Syndicated Linux News

k

LXer: RISC-V-Based KVM Solution in PCIe Form Factor with Low/High Profile Compatibility

Published at LXer: The NanoKVM-PCIe is a recent solution from Sipeed, designed to simplify remote management of ATX PC cases and 2U servers. Built on the RISC-V architecture, it offers low power...



  • Syndicated Linux News

k

Mieux que les back dormitory boys




k

Sarko show

Comme si il ne faisait pas assez la star en France…. voilà que notre très aimé président vient exposer ses bourrelets dans la presse chinoise . Hesiem, Pékin (Chine)




k

Olympic tickets wanted !

Sans commentaires... Hesiem, Pékin (Chine)




k

Realitätsscheuklappen in der heilen Welt

Und wieder hat Deutschland sein neues "Littleton". Wie an dem aus Michael Moores Film "Bowling for Columbine" bekannten Ort, an dem zwölf Schüler ihr Leben verloren, stürmte Sebastian B. am 20. November 2006 seine ehemalige Schule in Emsdetten. Bewaffnet mit vier Gewehren und drei Rohrbomben schoss er um sich. Rund 30 Menschen wurden verletzt, drei davon schwer. Der 18-jährige Amokläufer tötete sich noch im Schulgebäude selbst. Ein Kommentar über die Hintergründe.




k

Angst und Schrecken in New Orleans

New Orleans, eine Stadt umgeben von Wasser. 1965 erlebte die Metropole des Jazz? seine bis dahin größte Hurrikankatastrophe. Betsy überschwemmte den Großteil der Stadt. Exakt 40 Jahre später steht die Stadt abermals unter Wasser - dieses Mal bis zu 7,6 Meter. Nach dem Bruch der Dämme trat der Lake Pontchartrain über die Ufer und überschwemmte 80 Prozent der Stadt. 1.800 Menschen kamen durch Hurrikan Katrina im August 2005 ums Leben. Kristin erlebte die Stunden vor der Ankunft des Hurrikanes vor Ort.




k

Weitere 70 Flüchtlinge kommen in Osterode an

70 Flüchtlinge kamen am Dienstag in zwei Bussen in Osterode an, 100 weitere sollen am heutigen Tag aus Bayern folgen. Das gab Gero Geißlreiter, Erster Kreisrat des Landkreises Osterode am Harz am letzten Mittwochnachmittag in einer Pressekonferenz bekannt. Die Helfer wurden erst am Mittwoch eine halbe Stunde vor eintreffen der Busse ...




k

Frontex: Regierung Merkel hat angeblich gelogen

Die EU-Grenzschutzagentur Frontex hat gemeldet, dass sie die deutsche Bundesregierung bereits im Frühjahr 2015 über die hohen Flüchtlingszahlen informiert habe. Der Leiter von Frontex, Fabrice Leggeri bestätigte, dass er die Bundesregierung im März über eine Zahl von ca. 500.000 bis 1 Millionen Flüchtlinge informiert habe. Bereits zu diesem Zeitpunkt war ...




k

Großer Mafia-Prozess: Mehr als 40 Angeklagte stehen vor Gericht

Am 5. November 2015 begann in der italienischen Hauptstadt ein großangelegter Prozess gegen die Mafia. Im Mittelpunkt steht Massimo Carminati, der im Dezember 2014 verhaftet worden war. Aus Sicherheitsgründen erscheint er nicht persönlich, sondern wird per Videoübertragung am Prozess teilnehmen. Die Angeklagten sollen Bestechungsgelder bezahlt haben, um staatliche Aufträge bei ...




k

Free Pascal 3.0 "Pestering Peacock" veröffentlicht: Viele neue Funktionen im größten Update seit 10 Jahren

Am 25. November 2015 wurde der verbreitete Free Pascal - Compiler (FPC) in der aktualisierten Version 3.0 (Pestering Peacock) veröffentlicht. Die Vielzahl der Neuerungen hat die Entwickler zum ersten großen Versionssprung seit 10 Jahren bewogen. Version 2.0 war 2005 eingeführt worden, die letzte Hauptversion war 2.6 aus dem Jahre 2012. Version ...




k

US-Präsidentschaftskandidat hält an abenteuerlicher Pyramidentheorie fest

Der US-amerikanische Präsidentschaftskandidat Ben Carson vertritt eine abenteuerliche Theorie über die ägyptischen Pyramiden: nach seiner Überzeugung dienten diese als Getreidespeicher. Diese Theorie verkündete er bereits im Jahre 1998 und wiederholte sie vor kurzem gegenüber dem Nachrichtensender CBS. Bis 2013 war er der heute 64jährige Carson als Facharzt für Neurochirurgie tätig ...




k

GNU Gatekeeper 5.3 released

I have just released GNU Gatekeeper version 5.3.

You can download it from https://www.gnugk.org/h323download.html

This release has a number of new features as well as some important bug
fixes.

Whats new ?

  • LRQ loop detection to optimize calls flows between multiple neighbor gatekeepers This new feature has the potential to significantly reduce the load on all gatekeepers and prevent "LRQ storms".
  • new routing policy to set call destinations by querying HTTP or REST servers, see [Routing::Http]
  • much improved support for SNMP
  • important bug fix for TLS encryption of signaling channels
  • important bug fixes for H.460.18 NAT traversal (for H.245 tunneling and for multi-homed servers)
  • performance optimization: this version can handle 5-10% more proxied  calls on the same hardware
  • performance optimization: re-authenticate lightweight, additive registrations only when new aliases differ. This significantly reduces the load on password databases.

Enjoy!


Full change log:

- BUGFIX(ProxyChannel.cxx) don't send H.245 address to tunneling
  H.460.18 endpoint, breaks call when H.245 multiplexing
- performance optimization: 5% faster UDP handling
- changed default: [SNMP] Implementation=PTlib
- remove unfinished Windows-SNMP implementation, use PTLib-SNMP on Windows
- support SET and GET-NEXT in PTLib-SNMP
- support SNMP sysUpTime when running as standalone agent
- BUGFIX(configure.in) LARGE_FDSET defaults to off
- new SNMP OID 1.3.6.1.4.1.27938.11.1.9 to query total bandwidth allocated to ongoing calls
- BUGFIX(ProxyChannel.cxx) fix hangup when making many TLS calls quickly one after another
- BUGFIX(RasSrv.cxx) don't require H.460.22 parameters in ARQs
- BUGFIX(ProxyChannel.cxx) fix TLS without LARGE_FDSET
- BUGFIX(ProxyChannel.cxx) don't send H.460.22 priority field in SCI
- BUGFIX(gkauth.cxx) free memory from cached and expired passwords
- re-authenticate lightweight, additive registrations only when new aliases differ
- remove switch [Proxy]DisableRTPQueueing, always disabled now
- new routing policy: http with config section [Routing::Http]
- BUGFIX(ProxyChannel.cxx) fix H.460.18 on multi-homed servers (SCI comes from the correct IP now)
- new switch to disable SNMP traps [SNMP] EnableTraps=0
- BUGFIX(ProxyChannel.cxx) don't throw SNMP trap on H.245 connection errors
  (causes crash under load with Net-SNMP)
- BUGFIX(snmp.cxx) shutdown GnuGk when SNMP agent can't be started
- BUGFIX(snmp.cxx) protect NetSNMP library calls with mutex
- changed default: ForwardResponse now defaults to 1 in [RasSrv::LRQFeatures] and [Neighbor::...]
- new feature: loop detection for LRQs [RasSrv::LRQFeatures] LoopDetection=1
- BUGFIX(Neighbor.cxx) some settings in [RasSrv::LRQFeatures] were ignored if not set in [Neighbor::...]




k

Howto block H.323 spam calls with fail2ban

When you run the GNU Gatekeeper, you can block spam calls from the well known bots ("MERA RU", "SimpleOPAL" etc.) eg. using a small LUA script in your config.

But that alone doesn't stop the load on the server, because often these bots keep on making calls.

Fail2ban to the rescue!

With this filter definition in /etc/fail2ban/filter.d/gnugk.conf you can check fro rejected calls:

[Definition]
failregex = Dropping call CRV=[0-9]+ from <HOST>:[0-9]+ due to Setup authentication failure
ignoreregex =



And then you can add this jail definition to /etc/fail2ban/jail.local to block the IP:

[gnugk]
enabled  = true
logpath  = /var/log/gnugk.log
filter   = gnugk
bantime  = 6000
maxretry = 2
action   = iptables[name=GnuGk, port=1720, protocol=tcp]



Voila!




k

GNU Gatekeeper 5.4 released

I am happy to announce the release of GNU Gatekeeper 5.4.

You can download it from https://www.gnugk.org/h323download.html

New features:

  • new accounting module to send accounting data to an MQTT server
  • support for redis as database (eg. as backend for password storage)

Bug fixes:
  • important fix for H.245 tunneling translation with H.460.18 endpoints
  • fix for snmpwalk in PTLib-SNMP implementation
  • fix sending alternate gatekeeper list to endpoints with assigned gatekeeper
  • improved DRQ from child gatekeepers
  • fix TLS with neighbor gatekeeper


Please also note that a bug has been found in PTLib that can cause a crash in any GnuGk version if you use the status port (manually of from an application). Please upgrade to PTLib 2.10.9.3!




k

GNU Gatekeeper 5.5. released

I am happy to announce the release of GNU Gatekeeper 5.5.

This release has new features and bug fixes when you run clustered gatekeepers. It also improves the port detection feature and we have a complete and up to date Chinese documentation.

You can download it from https://www.gnugk.org/h323download.html

New features:

  • new feature GnuGkAssignedGatekeeper to push endpoints back to their intended home gatekeepers in the cluster, even if the endpoints don't support assigned gatekeepers
  • support new PBKDF2 password hashes for ssh logins to the status port
  • new switches to fine tune port detection for H.239 channels (IgnoreSignaledPublicH239IPsFrom=x and IgnoreSignaledAllH239IPs=1)
  • new Chinese manual

Bug fixes:
  • select correct source IP for neighbor pings
  • set altGKisPermanent=true when redirecting endpoints
  • fix RRJ to include alternates when RedirectGK=Endpoints limit is reached
  • fix reading of AllowSignaledIPs= switch
  • don't complain about [Neighbor::xxx] SendAliases switch when using--strict

Enjoy!




k

GNU Gatekeeper 5.6 released

Today GNU Gatekeeper version 5.6 has  been released.

Download: https://www.gnugk.org/h323download.html

It contains an important bug fix to H.460.19 multiplexing and H.460.26 (media over TCP) when using GnuGk's internal call forwarding (ForwadOnFacility).

I have also added an interop tweak to be able to call video services that don't understand H.323 URL aliases (eg. videobutler.nl). You can enable it with

[Routing::SRV]
ConvertURLs=1

Here is the full changelog:

  • new switch: [Routing::SRV] ConvertURLs=1 to convert URL_IDs into H323_IDs
  • BUGFIX(ProxyChannel.cxx) fix RTP multiplexing and H.460.26 when ForwardOnFacility is used
  • BUGFIX(ProxyChannel.cxx) remove H.460.19 feature from Setup when using ForwardOnFacility=1
  • new switch: [Gatekeeper::Main] GrantAllBRQ=1 to accept any BRQ, even if the conferenceID is invalid





k

Using TCP Keepalive to Detect Network Errors

This is not only a H.323 topic, but since H.323 also uses TCP connections, it applies to H.323 as well:

To detect network errors and signaling connection problems, you can enable TCP keep alive feature. It will increase signaling bandwidth used, but as bandwidth utilized by signaling channels is low from its nature, the increase should not be significant. Moreover, you can control it using keep alive timeout.

The problem is that most system use keep alive timeout of 7200 seconds, which means the system is notified about a dead connection after 2 hours. You probably want this time to be shorter, like one minute or so. On each operating system, the adjustment is done in a different way.

After settings all parameters, it's recommended to check whether the feature works correctly - just make a test call and unplug a network cable at either side of the call. Then see if the call terminates after the configured timeout.

Linux systems

Use sysctl -A to get a list of available kernel variables
and grep this list for net.ipv4 settings (sysctl -A | grep net.ipv4).
There should exist the following variables:
net.ipv4.tcp_keepalive_time:   time of connection inactivity after which
                               the first keep alive request is sent
net.ipv4.tcp_keepalive_probes: number of keep alive requests retransmitted
                               before the connection is considered broken
net.ipv4.tcp_keepalive_intvl:  time interval between keep alive probes

You can manipulate with these settings using the following command:

sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 
    net.ipv4.tcp_keepalive_intvl=10

This sample command changes TCP keepalive timeout to 60 seconds with 3 probes,
10 seconds gap between each. With this, your application will detect dead TCP
connections after 90 seconds (60 + 10 + 10 + 10).

FreeBSD and MacOS X

For the list of available TCP settings (FreeBSD 4.8 an up and 5.4):

sysctl -A | grep net.inet.tcp

net.inet.tcp.keepidle - Amount of time, in milliseconds, that the (TCP) 
connection must be idle before keepalive probes (if enabled) are sent.

net.inet.tcp.keepintvl - The interval, in milliseconds, between 
keepalive probes sent to remote machines. After TCPTV_KEEPCNT (default 
8) probes are sent, with no response, the (TCP)connection is dropped.

net.inet.tcp.always_keepalive - Assume that SO_KEEPALIVE is set on all 
TCP connections, the kernel will periodically send a packet to the 
remote host to verify the connection is still up.

therefore formula to calculate maximum TCP inactive connection time is 
following:

net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8)

the result is in milliseconds.

therefore, by setting
net.inet.tcp.keepidle = 10000
net.inet.tcp.keepintvl = 5000
net.inet.tcp.always_keepalive =1 (must be 1 always)

the system will disconnect a call when TCP connection is dead for:
10000 + (5000 x 8) = 50000 msec (50 sec)

To make system remember these settings at startup, you should add them 
to /etc/sysctl.conf file

Solaris

For the list of available TCP settings:

ndd /dev/tcp ?

Keepalive related variables:
- tcp_keepalive_interval - idle timeout

Example:
ndd -set /dev/tcp tcp_keepalive_interval 60000

Windows 2000 and Windows NT

Search Knowledge Base for article ID 120642:
http://support.microsoft.com/kb/120642/EN-US

Basically, you need to tweak some registry entries under
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters




k

Using the GNU Gatekeeper to create TLS tunnels

Most H.323 vendors did not implement encrypting the signaling connection with TLS. They only encrypt the media (RTP). But you can use the two GNU Gatekeepers to encrypt you call signaling even when your endpoints don't support this natively.

Suppose you have 2 locations and want to connect them securely over the public internet.

GnuGk can encrypt call signalling between those locations using TLS and encrypt the media (RTP) using H.235.6 (AES encryption). 


 Configuration for GNU Gatekeeper 1 (prefix 01)

 

[Gatekeeper::Main]

[RoutedMode]
GKRouted=1
H245Routed=1
CallSignalPort=1720
AcceptUnregisteredCalls=1
; make sure H.245 gets tunneled for TLS
H245TunnelingTranslation=1
; add AES media encryption if the endpoint doesn't encrypt itself
EnableH235HalfCallMedia=1
; only allow encrypted calls
RequireH235HalfCallMedia=1
; change the media key after 2^31 operations
EnableH235HalfCallMediaKeyUpdates=1

[Proxy]
Enable=1

[ModeSelection]
0.0.0.0/0=PROXY
; only use routed mode for local calls
192.168.0.0/18=H245ROUTED

[TLS]
EnableTLS=1
PrivateKey=/path/to/server.pem
Certificates=/path/to/server.pem
CAFile=/path/to/rootcert.pem
Passphrase=MySecret
CheckCertificateIP=1

[Gatekeeper::Auth]
FileIPAuth=required;Setup

[FileIPAuth]
; allow all calls from local network
192.168.1.0/24=allow
; only allow TLS encrypted and authenticated calls from elsewhere
any=onlyTLS

[RasSrv::PermanentEndpoints]
; the GnuGk in the other location, serving prefix 02
1.2.3.4:1300=remote-gw;02

[EP::remote-gw]
; use TLS to call remote GnuGk
UseTLS=1 
 

Configuration for GNU Gatekeeper 2 (prefix 02)

[Gatekeeper::Main]

[RoutedMode]
GKRouted=1
H245Routed=1
CallSignalPort=1720
AcceptUnregisteredCalls=1
; make sure H.245 gets tunneled for TLS
H245TunnelingTranslation=1
; add AES media encryption if the endpoint doesn't encrypt itself
EnableH235HalfCallMedia=1
; only allow encrypted calls
RequireH235HalfCallMedia=1
; change the media key after 2^31 operations
EnableH235HalfCallMediaKeyUpdates=1

[Proxy]
Enable=1

[ModeSelection]
0.0.0.0/0=PROXY
; only use routed mode for local calls
192.168.0.0/18=H245ROUTED

[TLS]
EnableTLS=1
PrivateKey=/path/to/server.pem
Certificates=/path/to/server.pem
CAFile=/path/to/rootcert.pem
Passphrase=MySecret
CheckCertificateIP=1

[Gatekeeper::Auth]
FileIPAuth=required;Setup

[FileIPAuth]
; allow all calls from local network
192.168.1.0/24=allow
; only allow TLS encrypted and authenticated calls from elsewhere
any=onlyTLS

[RasSrv::PermanentEndpoints]
; the GnuGk in the other location, serving prefix 01
1.2.3.5:1300=remote-gw;01

[EP::remote-gw]
; use TLS to call remote GnuGk
UseTLS=1 
 

Other options

You could also configure the remote GNU Gatekeeper as a neighbor, but beware that the RAS traffic between neighbors will show meta data (whois is caling who) in clear text! 

See the GnuGk manual section on TLS for more details and examples how to generate the OpenSSL certificates. 

 




k

GNU Gatekeeper 5.7 released

GNU Gatekeeper version 5.7 has some important bug fixes, improves interoperability
with other vendors and also has a few new features.
 

Several severe crashes and a few memory leaks have been fixed.

Improved interoperability with:

  • Lifesize endpoints
  • Poly's Microsoft Teams gateway
  • Polycom RealPresence Capture Server


New features:

  • You get a warning in the GUI / on the status port if one of your endpoints has an incorrect time setting and this password authentication fails. This makes trouble shooting a lot easier.
  • Invalid TPKT packets (eg. due to network errors) now don't necessarily take down an otherwise healthy call. Use the new  AbortOnInvalidTPKT=0 switch to enable.
  • GnuGk will now also return unused memory back to the OS periodically to make it available again to other applications on the same server.
  • You have a new %{Vendor} variable for SqlAuth RegQuerys and LuaAuth



Full change log:

- BUGFIX(ProxyChannel.cxx) fix crash on non-standard H.245 Indication from
  Polycom RealPresence Capture Server
- BUGFIX(ProxyChannel.cxx) fix possible crashes on non-standard generic information in OLCs
- print warning message on status port when passwords get rejected due to wrong time
- BUGFIX(httpacct.cxx) fix memory leak
- BUGFIX(ProxyChannel.cxx) fix possible crash
- BUGFIX(gk.cxx) avoid crash when terminating in the middle of program startup,
  set non-zero exit code so restarter notices error
- return unused memory back to OS periodically
- new switch: [RoutedMode] AbortOnInvalidTPKT=0 for more graceful handling of network errors
- BUGFIX(gk.cxx) fix for running on Alpine Linux (needs updated PTLib, too)
- don't start GnuGk if RTP multiplexing is configured, but we can't start the listener
- new switch: [RoutedMode] MatchH239SessionsByType=0 to fix presentations with
  LifeSize endpoints over Poly's Microsoft Teams gateway
- BUGFIX(ProxyChannel.cxx) make sure we don't set RTP address on multiplexed RTCP keepalive
- BUGFIX(RasSrv.cxx) look at all tokens for H.235.TSSM
- add %{Vendor} variable for SqlAuth RegQuery and LuaAuth




k

GNU Gatekeeper 5.8 released

GNU Gatekeeper version 5.8 has been released with a number of bug fixes and a few new features.

To stay updated on new releases, please also follow us on Twitter!

Improved interoperability with:

  • EdgeProtect
  • Avaya

 New features:

  • experimental support for Avaya's non-standard version of H.323 (./configure --enable-avaya) (thanks Konstantin Prokazov)
  • consider RFC 6598 shared network space (100.64.0.0/10) and Zeroconf (169.254.0.0/16) as private IPs
  • new switch [Proxy] AllowSignaledIPsFrom= to skip auto-detect for messages received directly from certain IPs when IgnoreSignaledIPs=1
  • new switch [Proxy] AllowAnyRTPSourcePortForH239From= to handle incorrect RTCP addresses in H.239 OLC (EdgeProtect interop)
  • new switch [RoutedMode] MatchH239SessionsByIDOnly= to never attempt to match a H.239 reverse channel by type for improved interoperability with EdgeProtect
  • new switches to set the HTTP Content-Type header in HttpAcct, HttpPasswordAuth and Routing::Http
  • new switch [Routing::Http] JSONResponse=1 to send more flexible routing data in the HTML reponses
  • many new status port shortcuts (see manual section for details)

Bug fixes:

  • fix H.460.18/.19 on multi-homed servers
  • fix race condition when handling H.460.19 multiplex IDs
  • fix media loop on half port-detected channel when media is very early
  • fix Net-SNMP query for total bandwidth
  • save RTCP address from OLC for port-detection
  • always check AllowSignaledIPs= before applying IgnoreSignaledAllH239IPs or IgnoreSignaledPrivateH239IPs
  • handle extensions and CSRC in RTP header with H.235 half-call media
  • better endpointIDs on Windows when compiling without OpenSSL





k

GNU Gatekeeper 5.9 released

GNU Gatekeeper version 5.9 is out with a number of bug fixes and a few new features.

Download: https://www.gnugk.org/h323download.html

New features:

  • new switches [Proxy] CachePortDetection=1 and CachePortDetectionDuration= to cache port detection packets for faster media connects when IgnoreSignaledIPs= is active
  • new switch: [EP::] ForceTerminalType=
  • new place holder for port notifications: %t for port type
  • experimental: better error recovery if multiplexed RTP sending fails

Please note that Radius support is disabled by default now. You can enable it with the --enable-radius switch when running configure.

Bug fixes:

  • fix bug in port detection with AllowSignaledIPsFrom=
  • when DNS name resolves to IP without alias, remove alias from ACF completely (Cisco interop)
  • remove RTP session 0 from internal tables once H.245 master has assigned a session ID
  • fix compilation of Avaya support
  • initialized cmsg struct to zero before using
  • fix regression introduced with MatchH239SessionsByIDOnly= switch






k

GNU Gatekeeper 5.11 released

GNU Gatekeeper version 5.11 has been released.

Download: https://www.gnugk.org/h323download.html

This is a bug fix release with a few new features added.

An important bug in the handling of the ExternalIP switch has been fixed.

We also added a few features that make it easier to use GnuGk with Graphana and InfluxDB monitoring.

Changes and additions:

  • remove non-working command line switch -e / --externalip, use config file to set ExternalIP
  • new accounting variables %{registrations}, %{calls}, %{total-calls}, %{successful-calls}, %{allocated-bandwidth}
  • new switch [HttpAcct] Authorization= to send authorization headers to support InfluxDB
  • replace and in HttpAcct body with carriage return and line feed characters
  • new switch: [RasSrv::LRQFeatures] PreserveDestination=1 (helpful when calling Pexip servers)





k

GNU Gatekeeper 5.12 released

 GNU Gatekeeper version 5.12 has been released.

Download: https://www.gnugk.org/h323downldad.html

This is a bug fix release with a few new features added.

Another important bug in the handling of the ExternalIP switch has been fixed as well as Y2K38 issues.

This release also adds features:

  • support for Oracle databases
  • easier cloud deployment with IP detection with STUN
  • better load scaling by mixing proxied with direct mode endpoints in a single gatekeeper
  • Windows 64bit executables with VS2022

Full list of changes:
  • enable more runtime hardening flags from OpenSSF recommendation 11/2023
  • fix bug with H.245 address when using ExternalIP= switch without H.460.18/.19
  • auto-detect public IP with ExternalIP=STUN and STUNServer=stun.example.com
  • compiler support for VS2022
  • new database driver for Oracle and new timestamp format 'Oracle'
  • new switch [EP::xxx] ForceDirectMode=1 to handle all calls from this endpoint in direct mode
  • BUGFIX(RasSrv.cxx, gkauth.cxx) make sure time_t is handled unsigned to avoid Y2K38 issue
  • BUGFIX(ProxyChannel.cxx) check for too small packets when acting as encryption proxy


 





k

A Magnetic Mount for a Wireless Fast Charging Dock

I like the convenience of a charger for my phone in my car or by my desk at the office. The constant plugging and unplugging a micro-usb cord is a bit harsh though, a least from a first world problem perspective. I ran across a post on the XDA-Developers forum that described modding a Wireless Charger […]

The post A Magnetic Mount for a Wireless Fast Charging Dock first appeared on robotthoughts.




k

Build a 3D Printed Ukulele

I’ve recently been looking at building instruments using a 3D printer. I’ve been playing the guitar for over 40 years but most of the builds for 3D printed guitars seemed a little daunting as a place to start. I found a couple of 3D printed ukuleles that looked like quicker one day builds. I finally […]

The post Build a 3D Printed Ukulele first appeared on robotthoughts.




k

Installation Notes for Kubuntu 18.10 on the Alienware 17 R5 Laptop

Before Installation Installing Kubuntu / Ubuntu on the Alienware 17 R5 Laptop NVME Drive To get the NVME drive or M.2 drive to show up as an installation candidate for the installer, you need to make a small BIOS change and modify two kernel arguments at boot time. First, boot into the BIOS on the […]

The post Installation Notes for Kubuntu 18.10 on the Alienware 17 R5 Laptop first appeared on robotthoughts.




k

Moving the Root Partition to a New Disk in Ubuntu 18.10 (General GRUB Chicanery)

I had a Ubuntu 18.10 install setup perfectly on a disk shared with a Windows 10 install. I originally setup Windows 10 and then reduced the size of the Windows 10 partition to make room for a Ubuntu 18.10 install. After the install of Windows 10 and the Ubuntu 18.10 install I had these partitions: […]

The post Moving the Root Partition to a New Disk in Ubuntu 18.10 (General GRUB Chicanery) first appeared on robotthoughts.




k

Sometimes I wish I was a bookmaker...

As I write this, outside the sun is burning lazily down on a quiet, sleepy and green corner of Manchester as the day draws to a close. Fine weather, often makes me think about an alternate career I considered about a decade ago. I thought I’d share the story.

In 2002, the dot.com crash was in full effect. The internet era looked like it might be over for a while. As a software developer specialising in internet technologies, I was in a little bit of trouble. Whilst contracts appeared occasionally, I realised I was looking at 6-7 months of unemployment.

Not having any savings, and as yet mentally unprepared for the path of entrepreneurship I have now followed for half a decade, I was a little stumped as to how to actually pay my food bills, etc. I applied for barwork, but there was none forthcoming. I looked at minimum wage jobs, perhaps as a cleaner, but was “over qualified”. One CTO of an ISP I interviewed with thought I was too bright for the role he had in his firm, and that I would quickly become bored.

One contract I acquired however, led to an interesting discovery. I was hired by a small startup in Eccles to help “fix” a betting platform. It was a clone of Betfair.com, which was still relatively young at the time. I was hired for three reasons:

  1. I knew how to fix the problem - their Bulgarian programmer was an idiot who didn’t understand what he was doing
  2. I knew quite a bit about horse racing and gambling, and therefore had “domain expertise”
  3. I was cheap

Since the age I’ve been legally allowed to gamble, I’ve been interested in it as a maths problem. Books on technical analysis in FOREX trading - one of which I’ve been reading recently - fascinate me. I had developed quite an eye for reading form, had become a better than “good” poker player, and enjoyed “the game” and all that came with it. I still have an impressive collection of books on sports betting and horse racing. Gambling, quite simply, is something I have always found a little bit fun.

An example of how confident I was: A few years before the events below unfolded, my mother was very concerned about my “gambling problem”. I did not have a gambling problem, beyond the fact I gambled, and this alone was enough to scare her. Sat in a small cafe in the town I grew up in, she decided to try and prove a point. She handed me £10 of her own money - money she could scarecely afford to fritter away at the time - and told me to go and bet on a horse with it there and then. If it lost, I would agree to repay her the £10 and to stop gambling. I didn’t quite understand her logic, but I agreed. I walked to the bookmakers around the corner, backed £5 each way a 4/1 chance in a jumps race, and then sat and watched as it won by 3 lengths. I returned to the cafe with my mother’s winnings, and she became silent as I handed her the cash.

So when I turned up at a rather dingy office in Eccles and discovered Betfair, I was transfixed. The major appeal to me was simple:

It allowed you to take the position of a bookmaker.

Bookmakers say that the moment somebody has to make a choice about which competitor will win a challenge, they are at a disadvantge. That means the bookmakers put themselves in a position where they don’t have to make a choice, they just balance the odds with the bets coming in.

The bookmakers generally don’t care who wins - they will “lay a book” at odds that mean whoever wins, they make a guaranteed profit. Some of them - especially on big prize handicaps - will often “lay to a common liability” which means they might lose some money if a favourite wins, but make a much larger profit if an outsider wins. A few don’t bother risk managing and just hope it all balances out. There are some truly horrifying scare stories about the last group.

The advantage they have however - encompassed in a mathematical measure of odds we call “the over-round” is that they are pretty much guaranteed to make money in the long run.

I opened a Betfair account, deposited £20, and laid a book on a race. I made 27p. It might not sound significant, but the important thing is, because of how I had done this, my risk was effectively zero by the time the race started. It was a “free” 27p that had magically been produced out of thin air.

I dived into the subject, buying whatever I could about bookmaking. I spent a lot of time - and frankly money - understanding the different conditions different laying approaches were best in. Like most geeks, once I choose to learn a subject, I go deep - I try and completely understand the whole domain. This was no different. I read up on the history of bookmaking, the backgrounds to important bookmakers, the maths, the probabilities, the strategies, and spoke to whoever I could about it that understood “the game”.

With my work done at the company, I now had an abundance of free time to put some of this learning to effect.

I was able to lay - and sometimes back using a method called “Dutching” on “under-round” books - over that summer out of Internet cafes (I had no connection to the Internet at home at the time), and cover my living expenses. I ate and drank well, I had a comfortable apartment in Manchester city centre, and was learning about being a bookmaker on a razor thin margin of 102% over-round.

About this time, I thought about becoming a professional bookmaker. The lifestyle of being on-course appealed to me almost as much as the 130% over-round (i.e the roughly 30% profit on capital staked pretty much guaranteed to a bookmaker), and I started to enquire about how to make it happen. I would need £100,000-£150,000 to get started at the courses I wanted to get started at which meant it would have to be a long-term plan. I contemplated assisting established names in the meantime, but without a driving license or a car, I was going to have a problem there as well.

And then the dream was interrupted, and all hell broke lose. 

When you’re trading all day on Betfair, you’re moving money around in order to make just a little tiny bit more money. You are not improving the planet, or people’s lives. It’s boring, and frankly, it’s selfish. Your ego takes a hit, even when you’re winning.

I didn’t have the equipment available to automate the process (despite being a software developer), so for me it was about just grinding it out, hour after hour, day after day. I would get up at 10am, buy and read a copy of the Racing Post, head to an Internet cafe for midday, and lay books on around 20 races until at least 5pm, and during the Summer as late as evening racing allowed. Sometimes I even laid books on US races in the evening, or started earlier and managed to catch races in timezones some hours to the East of us.

It was soul-destroying and boring work. I lost discipline. I stopped managing my risks, and suddenly started to gamble a little to make things more “interesting”. I rode out a lucky streak for a few weeks.

And then I took some losses. I don’t like losing. Nobody does. The original plan said losses were impossible, but I was now being reckless. It was more exciting. But stupid. But the losses hurt.

I started to chase the losses. Any experienced gambler will tell you that this is the beginning of madness.

When you lose, walk away, and accept it. It’s as a good a lesson for life as it is for gambling: don’t take it personally. Right then though, the “red mist” gamblers talk about descended, and it stuck with me for days.

The numbers accumulated as loss after loss built up. Three days later, as an unemployed - perhaps unemployable - software developer, I had lost just over £5,200. Given my goal was to make just £3 per race, this was a rather large sum.

I stopped, stood back, and took a deep breath. I went and decorated a friend’s bathroom for some spare cash to live on and to get away from the screen for a day or two.

I thankfully got a job, and recouped my losses in a more traditional manner, and until the mist that had enveloped me had left, stayed away from Betfair.

Betfair now has an API - a means for a software developer to automate trading strategies. I’ve put off coding anything against it for years for a few reasons. Principally, the environment is now very different as a trading arena to what it was (the liquidity makes the markets zero-sum games, in essence, and that means profitability is harder to come by), and frankly I have other more interesting things to spend my time working on that are likely to make me more money, sooner. I still ponder it though - an automated solution can be developed calmly and unemotionally. It should work quite well.

That said, on evenings like this, when the weather is fine, and a great Derby will be with us at 4pm tomorrow, I think back to those dreams of becoming a bookmaker. Being in the ring at Epsom tomorrow - or even better, on the rails - would not be a terrible way to make a living. Providing you manage your risk properly, of course…

… but then I remember, as with most things, my Mum was probably right.




k

Long Term Life Tips: Top 5 Regrets People Make on their Deathbed

Long Term Life Tips: Top 5 Regrets People Make on their Deathbed:

An astonishing “top 5 list” blog comes to us via longtermtips and I’m pleased to say I’m pretty sure I won’t have any of these regrets when my time inevitably comes.

By Bronnie Ware (who worked for years nursing the dying)

For many years I worked in palliative care. My patients were those who had gone home to die. Some incredibly special times were shared. I was with them for the last three to twelve weeks of their lives.

People grow a lot when they…

Go read. It’s worth it. Then think on it.




k

bookoasis: The World In A Bookshop by infra-leve. My living...



bookoasis:

The World In A Bookshop by infra-leve.

My living room is starting to look like this actually…




k

Thank God that's over (2011)

Presuming I do not choke on a pretzel, drown in a gin and tonic or get run over by a minicab driver hurtling around the streets of Manchester in order to maximise his double fare revenues, I should see out 2011 in the next few hours.

Thank the invisible big man in the sky who probably isn’t there for that.

This year, I was hospitalised, my girlfriend broke her arm and spent 2 weeks waiting for surgery in hospital, and I missed almost every single deadline and objective I set for myself.

To say it has been an emotional, miserable year would be an understatement. Given the year before it we lost my grandmother to cancer and my business went under, it would be hard to call it my “worst year ever” but it’s dialled quite high on that scale.

Some silver linings though: I now have a job at a startup I love working with people whose company I enjoy and my probable financial situation 5 years from now looks very good indeed. Having more time at home with the girlfriend has been great, and it seems I’ve given up smoking again (I’ll consider myself truly a non-smoker sometime in February if I get there without another cig).

I don’t do “resolutions” normally, but I do have a few objectives:

  • I need to get my weight down. I’m finally prepared to do something about it.
  • I want to create more, so will aim to not go more than two or three consecutive days without working on something creative in 2012. It could be writing (here, for example), it could be code for a personal project, or it could be something I’ve never really tried before (music? art? Don’t know yet). I basically want to spend less time reading/consuming and more time doing stuff. David Tate provides excellent inspiration if you want to consider doing the same. I’ll try to document as much of that as possible here.
  • I’m going to try and shift from always being behind/late for almost everything going on in my life, to being early. I don’t know how I’m going to do this, but I suspect if I can pull it off, I’ll be calmer and happier as a result.

And that’s all I’m aiming for in 2012: get healthier, lose some weight, create more, stop being late. They’re objectives, not resolutions, so can’t be broken. If I slip up, I’ll just crack on.

I really hope it’s enough to make 2012 better than 2011 and 2010. I’m overdue for a good year.




k

Why you should be a geek

Philosophers ask questions.

Artists interpret questions.

Theologians ignore questions.

Scientists and engineers answer questions.

Geeks do some or all the above.

Everybody else is just a spectator.




k

How I delayed at least 25,000 people's journey to work this morning

This is not an exciting story, despite the title. But it’s true. And it happens to dozens of people every day, and is the reason why getting to work in London can sometimes take so long.

First, let me explain that this is not a story of me causing a fire alarm to go off, for anti-terrorist police to close a station for half an hour, or some dramatic incident that has left TfL seeking an ASBO against me.

This is a story that starts with a strap of a backpack. This strap, in fact:

This morning I caught a tube from Baron’s Court on the District Line heading East. Normally I change at South Kensington for a Circle Line to Moorgate, or hop off at Mansion House and walk up to the office through the City. This morning I had decided to stay on the District line until Blackfriars, and change there for a Circle line. It’s a man’s perogative, etc.

The tube this morning was very busy. During the Olympics it has on the whole been very quiet, but this morning it was the normal 8:15-8:45am peak time crush. I was stood right next to the door at the very front of the train, crushed in by about 20 other souls attempting to share the exact same square foot I was stood on.

At Victoria, as is often the way for the District Line, a lot of hustling and bustling went on as people fought their way out to the platform, and others tried to struggle onto the train. After around a minute, the doors closed.

Except for the one next to me. Looking down, it was jammed on my bag strap.

Swearing, I attempted to free it. It was jammed solid because the hydraulic pressure of the door was pushing against it, but not with sufficient force for the door to close. The guy next to me tried to help. The guy on the platform waiting for the next train also tried to help. Neither of us could free it. Moving it simply led to the door moving along a bit, keeping the strap jammed.

Then the sound of hydraulics releasing was heard, all the doors on the train went to open, and the driver climbed out of the cab. The release of pressure had allowed me to unjam the strap, and recover it into the train. The driver confirmed we were all fine, climbed back into the cab, closed the doors, and off we went.

I apologised to those around me for delaying their journey, even though the total delay was perhaps 60-90 seconds.

Then realised everybody else on the train was delayed, too.

Then a thought about queuing theory and a little knowledge about how loaded that line is with train traffic at that time of the morning hit me: I had delayed tens of thousands of people.

Let me explain how I worked this out.

The District Line is composed of rather large gauge trains. I estimate that conservatively, each train is capable of shifting 2,000 people during peak times. There were certainly at least 2,000 people on my train this morning. Yes, they are only 6 carriages each, but each is certainly capable of holding nearly 350 people, and frequently does. I’m prepared to revise my numbers down if shown evidence.

In addition, the District Line platforms are not just used by the District Line. They’re also used by the Circle line between Gloucester Road and Tower Hill.

A glance at any “passenger information display” on a platform along this part of the network during rush hour will tell you the mean time between trains is 1 minute. There are close to 60 trains an hour going along that piece of track during rush hour.

Because my train was delayed for over a minute, this must have caused the train behind it to be given a red signal. This in turn would have caused the train behind that to be given a red signal, and so on. This buffer effect would be dampened beyond Gloucester Road going West, because the Circle and District lines diverge, giving more time for the red signals to switch to green, meaning scheduled trains would not have to stop in an unscheduled manner.

However, there would have been at least - I think - 5 trains affected by this delay in addition to my own. So we’re now up to 12,000 people in total delayed by my bag strap jamming a door.

It gets worse.

I changed at Blackfriars to a Circle line train. I got off the train I had delayed, waited 60 seconds on the platform and got on the Circle line train immediately following it, obviously now delayed. Cautiously making sure my bag was far from any doors, I boarded aware this train was now at least 2 minutes late against schedule.

Satisfied at the figure I had come up with of around 12,000 delayed passengers, I had assumed I had done no more damage, until we got to Aldgate.

The tube system has a tendency to expect passengers always want to be moving all of the time. Any delay of more than a minute or two at a station is always explained via an announcement. As we sat at Aldgate, the driver announced we were being “regulated” by a red signal. Looking out of the window, I could see an East-bound Metropolitan line train crossing our tracks to head across to East London.

That’s when it hit me. We were “out of position”. The train was a couple of minutes late, and so the guys running the switching had decided to give priority to the Metropolitan Line train, and we were held for approximately 4-5 minutes.

Whilst this part of the Circle line between Aldgate and Tower Hill was not as busy as the District/Circle line Tower Hill back West, a 4 minute delay was enough to ensure that the train behind us was going to be red signalled waiting for us to clear the platform.

That would be enough for the train behind that to be stopped.

And that would be enough for the train behind that to be stopped, which would probably be on the shared part of the network. That would be enough to cascade across the whole part of that line back to Gloucester Road, causing delays to perhaps 12 trains in total.

By now the numbers per carriage were down a little as we were close to the end of peak, but there was probably at least 1,000 people per train out there. Rounding up for the few more probably still around the Victoria area, and we’re up to 25,000 people.

There’s obviously some fudging here - people boarding trains at the “correct time” for them, did not realise the train they were getting was in fact the one after the one they had expected, and they did not suffer any delay. But I also suspect that this effect wasn’t dampened until after the peak ended at around 9:30am, and there were people who boarded their trains at 8:30am or before still out there (it can take 60 minutes easily to get from the “end” of a line into central London), whose journey had taken at least a few minutes longer than normal.

I doubt many noticed. I doubt anybody cares.

But it did make me think about how queueing theory applies to real world problems, and how when TfL moan about people keeping coats, bags and belongings clear of the doors, or jamming the doors to squeeze on rather than wait 6 more minutes for the next train, that they might have a point.

If you cause a train to be delayed, you are not simply inconveniencing the dozen or so people glaring at you in your vicinity. Or the people on the rest of the train who would glare at you if they could. But in fact, you have a cascade effect down the rest of the network. Tens of thousands of people delayed, because you didn’t want to wait 5 minutes. Or because you didn’t keep an eye on your belongings near the door.

I’ll certainly be more careful in future.

The next time I’m sat waiting for a signal to clear or am told that we are “being regulated”, I’ll wonder about whose bag or foot was to blame, and how the numbers of people flowing through London make butterflies flapping their wings on the network capable of huge cascading effects on transport infrastructure.




k

In South Kensington they take their fashion so seriously, that...



In South Kensington they take their fashion so seriously, that if you find yourself on the District/Circle line platform wearing something untrendy, TfL have got you covered. 

Gap are a bit mainstream though. Surely a jumper from somewhere more boutique would have been more fitting?




k

Reading Less, writing more. Or "How I learned to hate Twitter and Facebook"

I love knowing what my friends and family are up to. I love finding out about the latest thoughts going on within my peer groups. I enjoy reading many blogs, newsletter and emails. I used to regularly get over 400 emails a day including group/mailing list traffic, followed over a thousand people on Twitter and was friends with more than 250 people on Facebook. I subscribed to over 200 blogs. I read all of it, all the time.

Mix in LinkedIn, reddit, Hacker News and a few other corners of the web, and we’re suddenly talking about a lot of data flowing into my head.

I’m led to believe that some even value the contributions I make myself from time to time.

However, I’m about to start dialling all that down. I’ve made a start in some places, but over time I’m going to stop reading anywhere near as much short-form (twitter, Facebook, etc.), a little less medium-long form (blogs), and use the time to start reading longer form work again (books) and creating more.

The reason is not because of burn-out, cynicism or some other excuse: I’m not arguing that it’s all pointless, and I’m not being a Luddite. I just want to create more, and there are only so many hours in the day.

This was prompted by going back over my resolutions posted here in December, and realising I’ve made little progress:

  • I need to get my weight down. I’m finally prepared to do something about it.
I’ve been doing a lot of reading up on this in recent months. Worried that as I attempted to cut calories I actually gained weight, I decided to go back to the science the calorie-counting diets are based on and made a shock discovery: there is no science.
There is absolutely no evidence that calorie counting works. Not one experiment has been able to show that calorie-counting is successful.
Managing carbohydrates? Different story.
I’d like to write about this some more, and I’d like to share my diet in detail and provide some raw data almost “live”. Consider it a series of scientific experiments on one person done in public. I need to think about the details of doing this more, but this is one resolution that I need to kick up a gear on above any other.
  • I want to create more, so will aim to not go more than two or three consecutive days without working on something creative in 2012. It could be writing (here, for example), it could be code for a personal project, or it could be something I’ve never really tried before (music? art? Don’t know yet). I basically want to spend less time reading/consuming and more time doing stuff. David Tate provides excellent inspirationif you want to consider doing the same. I’ll try to document as much of that as possible here.
I have failed at this dismally. I mean, really, really, really badly. I get to be quite creative in my work, but that wasn’t the goal here. My goal was to be somebody who contributed more online than I took, and in that respect, I’ve failed dismally.
I have a lot of ideas in this regard as to how to correct this fault, but it’s going to take a few weeks of planning to commit to it. I know by reading less social network commentary, blog output and community websites, I’m going to have more time to do that planning, and also to create things.
I work long days, and have just a few hours a day in which to address this, so please be patient with me.
  • I’m going to try and shift from always being behind/late for almost everything going on in my life, to being early. I don’t know how I’m going to do this, but I suspect if I can pull it off, I’ll be calmer and happier as a result.

This, I am happy to report, seems to have actually happened for the most part. Public transport not withstanding - including my own self-sabotage - I tend to be where I need to be on-time (or early), far more than I was last year.

Back to the main point: by reading what’s going on out there, by trying out new apps, by listening to all these voices, I am feeling engaged and plugged in, but only as a consumer. The purpose of the Internet is not to simply consume but to create, amend, edit, destroy, vandalise and promote. Ideas, content, products, whatever.

Also, am I the only one who has noticed how exhausting this hosepipe of information can be on a daily - even hourly - basis? I’m tired of consuming. It’s worse than television - at least with television an editor or commissioner has attempted to do some curation.

So I’m not departing, I’m not shutting down accounts, I’m just going to read a great deal less online, to the point the relevant apps might disappear off my phone. In return, I should be able to produce a few new things to share. Watch this space!




k

Leeds remortgage package

Leeds Building Society is launching a new fixed rate mortgage in light of new research which has revealed that fixed rate mortgages accounted for over half of all loans in August this year. Leeds two-year fixed rate mortgage offers a...




k

Leeds remortgage package

Leeds Building Society has launched a new Base Rate Tracker (BRT) mortgage at only 0.14 per cent above Bank of England base rate. The product, which is currently 4.64 per cent, also allows 10 per cent capital repayments each year...




k

Abbey Tracker Remortgage of 4.38%

Abbey has just released a two-year tracker mortgage offering a rate of 4.38 per cent it will cost you £699 you can remortgage up to £500,000, this remortgage is available up to 90 per cent loan-to-value. Barry Naisbitt, of Abbey,...




k

El PageRank y los enlaces en la Web

La popularidad de un sitio es un valor calculado basándose en la cantidad de sitios que lo enlazan. Desde ahí se saca una cuenta fácil (PERO ERRONEA), "mientras mas gente apunte mi sitio pues mejor ubicado estará", lo cual no es exactamente así. No obstante algunas personas han confiado erróneamente en la cuenta fácil ...




k

Valor del ranking de Alexa en la promoción Web

La información de tráfico de Alexa es a menudo un valor llamativo cuando deseamos analizar el éxito de un sitio por la cantidad de visitantes que posee. Sin embargo este es un valor al que se le concede en múltiples ocasiones más importancia de lo que realmente debería representar, o más bien se podría señalar que no siempre es interpretado de forma correcta. ¿Como lograr aparecer en el ranking de Alexa ? ¿Como mejorar el raking en Alexa? ¿ Como interpretar y usar el valor del ranking de Alexa ? Estas son preguntas comunes...




k

Faith's Checkbook by C.H. Spurgeon

Faith's Checkbook by C.H. Spurgeon
Devotional for Wednesday November 13, 2024

The Unfailing Watch

Behold, he that keepeth Israel shall neither slumber nor sleep. (Psalm 121:4)

Jehovah is "the Keeper of Israel." No form of unconsciousness ever steals over Him, neither the deeper slumber nor the slighter sleep. He never fails to watch the house and the heart of His people. This is a sufficient reason for our resting in perfect peace. Alexander said that he slept because his friend Parmenio watched; much more may we sleep because our God is our guard.

"Behold" is here set up to call our attention to the cheering truth. Israel, when he had a stone for his pillow, fell asleep; but His God was awake and came in vision to His servant. When we lie defenseless, Jehovah Himself will cover our head.

The Lord keeps His people as a rich man keeps his treasure, as a captain keeps a city with a garrison, as a sentry keeps watch over his sovereign. None can harm those who are in such keeping. Let me put my soul into His dear hands. He never forgets us, never ceases actively to care for us, never finds Himself unable to preserve us.

O my Lord, keep me, lest I wander and fall and perish. Keep me, that I may keep Thy commandments. By Thine unslumbering care prevent my sleeping like the sluggard and perishing like those who sleep the sleep of death.


View more daily devotionals online.



  • Daily Bible Devotionals

k

How to Make Money from your Website

A list of ways that you can make money from your website.