AWG Blogs

Friday, June 21, 2013

Disabling Siblings of Selected Radio Button

I couldn't find a "contains" selector that applied to html elements, hence the following hack less elegent (more verbose than it should be) method that functionally and stylistically disables all li containers that don't contain the radio button that's selected:
var enableOnlySelectedListItem = function(parentId, radioItemName) {
     $('#' + parentId + ' input:radio[name=' + radioItemName + ']')
         .on('click', null,"",function (event) {
            $(this).closest('ul')
                .find('input[name=' + radioItemName + ']')
                .not(this)
                .parent()
                .find(':input')
                .not('input[name=' + radioItemName + ']')
                .prop('disabled', true)
            .end()
            .end()
            .addClass('disabledtext');    
                
            $(this).closest('li')
                .find(':input')
                .prop('disabled', false)
            .end()
            .removeClass('disabledtext');    
                
             event.stopPropagation();
     });
};

Sunday, May 19, 2013

Installing Stunnel on CenOS 5

Download tar.gz file from http://www.stunnel.org/downloads.html?extra=/source.html
to ~/temp
did: 
gzip -dc stunnel-4.56.tar.gz | tar xvf -
cd stunnel-4.56
./configure
make
make install

vi /usr/local/etc/stunnel/stunnel.conf-sample
add the line
fips = no
change cert = line to read
cert = /usr/local/etc/stunnel/stunnel.pem
adjust service section, e.g. for forwarding smtp securely

cp /usr/local/etc/stunnel/stunnel.conf-sample /etc/stunnel/stunnel.conf
cp /etc/stunnel/stunnel.conf /usr/local/etc/stunnel/stunnel.conf
#this last one to satisfy stunnel from cmd line, the prior for the service
#perhaps should make them hard linked

cp /usr/local/share/doc/stunnel/examples/stunnel.init /etc/init.d/stunnel
cd /etc/init.d
chmod 755 stunnel

vi stunnel
modify top of file to read:
#! /bin/sh -e
# description: stunnel Start Stop Restart
# processname: stunnel
# chkconfig: 234 20 80

then in startdeamons() change the install line to read:
install -d -o nobody -g nobody /var/run/stunnel

save file
do:
echo "ENABLED=1" > /etc/default/stunnel

Disable sendmail
chkconfig sendmail off; service sendmail stop

Enable stunnel
chkconfig --add stunnel
In case tests are running:
pkill stunnel 
service stunnel start

References:


Sunday, May 5, 2013

Using vb2js

This is one of the only tools I've found to automatically convert VBA files to .js files. YMMV.

- Download via svn. see https://code.google.com/p/vb2js/source/checkout

- Download Guava (currently guava-14.0.1.jar)  - https://code.google.com/p/guava-libraries/; place downloaded file in 'src' folder of vb2js download

- Open a text editor and insert this code
package com.google.vb2js;
import java.util.*;
import java.io.*;

public class MyVbaJsConverter {
  public static void main(String[] args) throws FileNotFoundException, IOException {
    if (args.length == 2) {
   String entireFileText = new Scanner(new File(args[0]))
  .useDelimiter("\\A").next();
   FileWriter fstream = new FileWriter(args[1]);
   BufferedWriter out = new BufferedWriter(fstream);
   out.write(VbaJsConverter.convert(entireFileText));
   out.close();

    }
  }
}
- Save the file as "MyVbaJsConverter.java" in the same directory as the unpacked vb2js java files (e.g. in D:\temp\vb2js-read-only\src\com\google\vb2js) - Create a text file with the following content. Save it as ...\src\testInput.bas
Dim MyList As String
Dim MyNum As Integer
- Make sure JDK is installed and JDK bin folder is in path environment variable - Open a command prompt and change to src folder. - Execute the following commands:
d:\temp\vb2js-read-only\src>javac -cp guava-14.0.1.jar com\google\vb2js\*.java
D:\temp\vb2js-read-only\src>java -cp .;guava-14.0.1.jar com.google.vb2js.MyVbaJsConverter testInput.bas testOutput.js
- Open testOutput.js and verify that VBA was converted.

refs: http://abhinandanmk.blogspot.com/2012/05/java-how-to-read-complete-text-file.html
http://www.roseindia.net/java/beginners/java-write-to-file.shtml

Thursday, April 18, 2013

Tomcat Hello World Servlet

Here's a no-IDE quick-start how-to. Create the following directories:

c:\users\John Smith\Documents\scratch\helloTomcat\src
c:\users\John Smith\Documents\scratch\helloTomcat\dist\WEB-INF

open NotePad++ and create the following two files.

c:\users\John Smith\Documents\scratch\helloTomcat\dist\WEB-INF\web.xml

<!DOCTYPE web-app PUBLIC
  '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
  'http://java.sun.com/dtd/web-app_2_3.dtd'>
<web-app>
  <servlet>
    <servlet-name>mihello</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>mihello</servlet-name>
    <url-pattern>/mihello</url-pattern>
  </servlet-mapping>
</web-app>
c:\users\John Smith\Documents\scratch\helloTomcat\src\HelloServlet.java
import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {
  public void doGet (HttpServletRequest req,
                                         HttpServletResponse res)
        throws ServletException, IOException
  {
        PrintWriter out = res.getWriter();
        out.println("Hello, You!");
        out.close();
  }
}
Open a command prompt
C:\Users\John Smith\Documents\scratch\helloTomcat\src>javac -cp "C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar" HelloServlet.java
C:\Users\John Smith\Documents\scratch\helloTomcat\src>mkdir ..\dist\WEB-INF\classes
C:\Users\John Smith\Documents\scratch\helloTomcat\src>copy *.class ..\dist\WEB-INF\classes
C:\Users\John Smith\Documents\scratch\helloTomcat\src>cd ..\dist
C:\Users\John Smith\Documents\scratch\helloTomcat\dist>jar cvf web-arc-test.war
Open a command prompt as Administrator
C:\Users\John Smith\Documents\scratch\helloTomcat\dist>copy web-arc-test.war "C
:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps"
open browser and browse to http://localhost:8085/web-arc-test/mihello
Note: change port to whatever tomcat is running on.
Refs:
http://keyboardsamurais.de/2004/01/15/tomcat_tutorial_helloworld_for_complete_fools_-_english/
http://stackoverflow.com/questions/7924687/compiling-a-simple-hello-world-servlet-into-a-war-for-tomcat
http://www.avajava.com/tutorials/lessons/how-do-i-create-a-war-file-using-the-jar-command.html

Friday, April 5, 2013

Get Property by an Attribute Property Value using LINQ

//look up the attribute matching the listid using Reflection and LINQ
                Type dtoType = typeof(AppInitParamsDTO);
                PropertyInfo pi = dtoType.GetProperties(BindingFlags.Instance | BindingFlags.Public)
                            .Where(
                            x => typeof(AppInitParamsSettingsListNameAttribute)
                                .GetProperty("ListName")
                                .GetValue(Attribute.GetCustomAttribute(
x, typeof(AppInitParamsSettingsListNameAttribute)), null).ToString()
                                == listId).First();

Tuesday, March 26, 2013

JSONSelect Usage

For the simple use case of verifying the existence of a "record" in a JavaScript object, you typically need to iterate through all items. There is a one-liner approach though, thankfully.

Say you want to verify that an ID exists in
 "Body": {
  "GetListCollectionResponse": {
   "GetListCollectionResult": {
    "Lists": {
     "List": [
      {
       "ID": "{B8B000CC-EB90-4B3D-9A44-79B8A9CFCAAC}",
       "RequireCheckout": "False",
       "EnableMinorVersion": "False",
...
Verify existence with the following function:
ListExists = function(listGuid) { //search spsvcListColXmlJson for match
  var arr = JSONSelect.match(":has(:root > .ID:val(\""+listGuid+"\"))", 
   spsvcListColXmlJson.Body.GetListCollectionResponse.GetListCollectionResult.Lists);
  var retval = arr.length>0;
  return retval; 
 };
Test:
test('List Guid found in Lists collection', function() {
 ok(ListExists("{B8B000CC-EB90-4B3D-9A44-79B8A9CFCAAC}"),"list should exist");
});

Thursday, February 28, 2013

DB Access Account error when Adding WFE

If you get this error when attempting to add a WFE to a farm:

"SharePoint Products and Technologies Configuration Wizard"
"The username entered must be the same as the database access account for the server farm you wish to join. Either choose NT AUTHORITY\NETWORK SERVICE as the username or choose a different database name"

try changing the user account used for the Timer service and Central Admin app pool. Supposedly this is the account specified at installation AKA server farm account or AKA Database Access Account (as in the error message).

Confusing, I know.

This does the trick:

stsadm -o updatefarmcredentials -userlogin -password

iisreset /noforce

 http://technet.microsoft.com/en-us/library/cc288991(v=office.12).aspx

Note: you may also need to enable the SQL Server Browser service on the CA server.