# LeetCode problem 167

Back online after quite some time. Lately I’ve been playing with leetcode, so below is solution to problem 167. This problem is an easy one and no complex structures are needed in order to solve it.

```#!/usr/bin/env python

''' LeetCode problem 167
Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order,
find two numbers such that they add up to a specific target number.
Let these two numbers be numbers[index1] and numbers[index2] where 1 <= first < second <= numbers.length.
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers is sorted in non-decreasing order.
-1000 <= target <= 1000
The tests are generated such that there is exactly one solution. '''

def twoSum(numbers, target):
for i in numbers:
if (target - i) in numbers[numbers.index(i)+1:]:
return [numbers.index(i), numbers.index(i) + numbers[numbers.index(i)+1:].index(target - i)+1]

#twoSum([-5, -3, -1, 0, 10], -1)
print(f"{twoSum([-5, -3, -1, 0, 10], -1)}")
#twoSum([2, 7, 11, 15], 9)
print(f"{twoSum([2,7,11,15], 9)}")
#twoSum([2, 3, 4], 6)
print(f"{twoSum([2, 3, 4], 6)}")
#twoSum([5, 25, 75], 100)
print(f"{twoSum([5, 25,75], 100)}")
#twoSum([0, 0, 3, 4], 0)
print(f"{twoSum([0, 0, 3, 4], 0)}")
```

I'll try to post more often from now on. I'll try to make it at least once a week.

# Script to place in DMZ

So I had to place a small server in my home DMZ leaving it opened to the whole world with the corresponding risks this has. Wondering how to allow access from my home LAN I came up with the following iptables script.

```#!/bin/bash

IPTABLES=/sbin/iptables
INT=eth0

startiptables() {
if [ \${UID} -eq 0 ]; then
\${IPTABLES} -A INPUT -i \${INT} -s 192.168.1.0/24 -j ACCEPT
\${IPTABLES} -A INPUT -i \${INT} -m state --state RELATED,ESTABLISHED -j ACCEPT
\${IPTABLES} -A INPUT -i \${INT} -j REJECT
else
fi
}

stopiptables() {
if [ \${UID} -eq 0 ]; then
\${IPTABLES} -F
\${IPTABLES} -L
else
fi
}

statusiptables() {
if [ \${UID} -eq 0 ]; then
\${IPTABLES} -L
else
fi
}

case "\$1" in
start)	startiptables ;;
stop)	stopiptables ;;
status) statusiptables ;;
*) echo "usage: \$0 start|stop|status" >&2
exit 1
;;
esac
```

Pretty simple as you can see. It will allow all connections from inside home LAN and block all unrelated traffic coming from the public, except the related and established ones. Substitute the classic class C on script for your corresponding home/work network.

# Run httpd with docker

So below is the script:

```#!/bin/bash

echo "Running httpd with docker."

docker run   --rm -v "\$PWD":/usr/local/apache2/htdocs  httpd
```

We use the following options:
-v, –volume list Bind mount a volume
–rm Automatically remove the container when it exits

Quite simple, right? Execution below.

``` bash ~/docker/run_httpd.sh
Running httpd with docker.
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
[Thu Aug 17 22:22:55.249981 2017] [mpm_event:notice] [pid 1:tid 140029488904064] AH00489: Apache/2.4.27 (Unix) configured -- resuming normal operations
[Thu Aug 17 22:22:55.250079 2017] [core:notice] [pid 1:tid 140029488904064] AH00094: Command line: 'httpd -D FOREGROUND'
```

And we proceed to test.

``` curl   http://172.17.0.6
<HTML>
First page
<BODY>
Testing docker httpd

```

We are getting below index.html because we are mapping /tmp/httpd (current \$PWD) to /usr/local/apache2/htdocs. In /tmp/httpd we created an example index.html as shown above.

# Run python script with docker

So I started playing with docker and asked myself whether it would be possible to run a python script with docker. Well, answer is yes. Example of the script below.

```#!/usr/bin/python

import sys
print "Running script!!"
print sys.version_info
```

Execution below:

```docker run -it --rm --name pythonscript -v "\$PWD":/usr/src/myapp -w /usr/src/myapp python:2 python script.py
Running script!!
sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0)
```

References:
Docker documentation

# Apache Flume to write web server logs to Hadoop

In this post we will use flume to dump Apache webserver logs into HDFS. We already have a web server running and flume installed, but we need to configure a target and a source.

We use the following file as target.

```## TARGET AGENT ##
## configuration file location:  /etc/flume-ng/conf
## START Agent: flume-ng agent -c conf -f /etc/flume-ng/conf/flume-trg-agent.conf -n collector

#http://flume.apache.org/FlumeUserGuide.html#avro-source
collector.sources = AvroIn
collector.sources.AvroIn.type = avro
collector.sources.AvroIn.bind = 0.0.0.0
collector.sources.AvroIn.port = 4545
collector.sources.AvroIn.channels = mc1 mc2

## Channels ##
## Source writes to 2 channels, one for each sink
collector.channels = mc1 mc2

#http://flume.apache.org/FlumeUserGuide.html#memory-channel

collector.channels.mc1.type = memory
collector.channels.mc1.capacity = 100

collector.channels.mc2.type = memory
collector.channels.mc2.capacity = 100

## Sinks ##

## Write copy to Local Filesystem
#http://flume.apache.org/FlumeUserGuide.html#file-roll-sink
collector.sinks.LocalOut.type = file_roll
collector.sinks.LocalOut.sink.directory = /var/log/flume-ng
collector.sinks.LocalOut.sink.rollInterval = 0
collector.sinks.LocalOut.channel = mc1

## Write to HDFS
#http://flume.apache.org/FlumeUserGuide.html#hdfs-sink