|
|
Firmware Engineer Career Guide and Counseling
We can help you connect with ministry contacts who can provide more information about firmware engineer career streams, and who are knowledgeable about current and future hiring needs and firmware engineer career development in these areas.
Contact us to find out more about firmware engineer career path, firmware engineer career planning, firmware engineer career assessment and firmware engineer career choices. what firmware engineer career opportunities may be just around the corner and how you can build a satisfying future.
Question: What does a firmware engineer do? I know they write sw that controls hw.. but does anyone have any examples/sample c++ code?
Answer: since you already know what firmware engineer do, I will spare you the mambo jambo crap definition. Anyways here is a code sample written in C by Michael Pearce to control Heater controller. click the link below to find other firmware example for IBM and other companies
Good luck
.........................................................................................................
#define VERSION "\r\nV1.2.4.B\r\n"
//*************************************************************************
// Heater Controller
// Version 1.2.4.B
// 11 December 2000
//
// Info: A PIC12c6xx Based Heater Controller that uses a single DS1820
// temperature probe and a simple P.I.D calculation and Full Wave
// Pulsed output via Triac.
// Control can hold to +/- 1 degree in optimum situation, but is very
// situation dependant so expect no better than +/- 2 degrees after
// settling time.
//
// Author: Michael Pearce
// Chemistry Department, University Of Canterbury
//
// Started: 3 November 2000
//
//*************************************************************************
// VERSION INFORMATION
//*************************************************************************
// Version 1.2.4.B - 11 December 2000
// Added Error Number Display for debugging Purposes
//*************************************************************************
// Version 1.2.3.B - 8 December 2000
// Lengthend time out a little, decreased Error Size in CRC Check
// Changed the reseting of error counter, so that it only minuses values
// rather than resetting to zero, this should hopefully speed up the
// response when water is drained out of the system
// Also set Error check power level to 70% cause when at temperature it
// seems to settle at around 40-50% with target of 80 degrees.
//*************************************************************************
// Version 1.2.2.A - 7 December 2000
// Changed Temperature Limits to 80degrees MAX
// POT Range 20 - 80 Degrees
//*************************************************************************
// Version 1.2.1.A - 7 December 2000
// Changed Error Checking when Bad Checksum
//*************************************************************************
// Version 1.2.0.A - 6 December 2000
// Added OSCCAL Calibration - hopefully will fix timing probs
// Added titles to Functions - Looking at Setting up timer Correction.
//*************************************************************************
// Version 1.1.1 - 7 November 2000
// Added Extra 10 seconds delay on Power up before error checking occurs
//*************************************************************************
// Version 1.1.0 - 6 November 2000
// Added WDT and Sensor Checking.
// Re-arranged the RS232 Sending routines to handle Constants
//*************************************************************************
// Version 1.0.0 - 3 November 2000
// Got the Basics working, operates quite well, when settles has a
// +/- 1 degree swing (or less).
//*************************************************************************
#define XTAL_FREQ 4MHZ
#define LOOP_SEC 2 //-- Approx Main Loops per second
#define ERROR_COUNT_MAX 38 * LOOP_SEC //-- Max time For Temp Increase
#define ERROR_START_DELAY 20 * LOOP_SEC //-- An additional delay Pwr Up
#define ERROR_TRIGGER_PWR 70 //-- 70% power is area for error chk
#define CRC_ERR_ADD 4 //-- Amount to add to Error counter if CRC Error
#include
#include
#define P_GAIN 4
#define D_GAIN 4
#define I_GAIN 2
#define I_COUNT_MAX 2 //-- # of intervals before increasing I
#define I_COUNT_DEC 4 //-- # times longer to wait b4 decrementing
#define I_VALUE_MAX 40 //-- Max Integral Value - Limits overshoot
#define CONTROLED_BAND 15 //-- Temperature band around Target that
// is controlled (2 units per degree!!)
#define MAX_TEMP (80 * 2) //-- Max Temperature of 80 Degrees
#define MAX_POT_TEMP MAX_TEMP //-- Max Target Temperature
#define POT_DIVIDER 4 //-- Divide the Pots Value to get temp range
#define POT_SHIFT 20 //-- Shift up by this num of degrees
//-- Note: Value is multiplied by 2 in the
// function to get 1/2 Degree resolution.
#define BURST_TOTAL_RELOAD 100 //-- Number of cycles per Run
#define BURST_PERCENT_DIVIDER 1 //-- Amount to div POWER to get count
#define BURST_TIMER_RELOAD (-2) //-- 2 counts per Full Wave
#define BURST_POWER_ON 100 //-- MAX POWER SETTING
#define BURST_POWER_OFF 0 //-- MIN POWER SETTING
#define OUTPUT_ON 0
#define OUTPUT_OFF 1
#ifndef BITNUM
#define BITNUM(adr, bit) ((unsigned)(&adr)*8+(bit))
#endif
//*********************** Ports ******************************
static bit POTINPUT @ BITNUM(GPIO,0); // POT input to ADC
static bit T_POTINPUT @ BITNUM(TRIS,0); // The tris for above
static bit PROBEINPUT @ BITNUM(GPIO,1); // PROBE INPUT - Dig &/or Analog
static bit T_PROBEINPUT @ BITNUM(TRIS,1); // The tris for above
#define D_PIN PROBEINPUT
#define D_TRIS T_PROBEINPUT
static bit ZEROCROSSIN @ BITNUM(GPIO,2); // INPUT to Timer 4 Zero Cross
static bit T_ZEROCROSSIN @ BITNUM(TRIS,2); // The tris for above
static bit RS232_RX @ BITNUM(GPIO,3); // RS232 Recieve Pin
static bit T_RS232_RX @ BITNUM(TRIS,3); // The tris for above
static bit OUTPUT_PIN @ BITNUM(GPIO,4); // OUTPUT to the TRIAC
static bit T_OUTPUT_PIN @ BITNUM(TRIS,4); // The tris for above
static bit RS232_TX @ BITNUM(GPIO,5); // RS232 Transmit Pin
static bit T_RS232_TX @ BITNUM(TRIS,5); // The tris for above
#include "delay.c"
#include "1wire.c"
#include "checksum.c"
// VARIABLES
bit OverFlow;
unsigned char BURST_ON_NEXT; //-- Reload value for _COUNT
unsigned char BURST_ON_COUNT; //-- Number of counts to be ON
unsigned char BURST_TOTAL_COUNT; //-- Total number of Counts to do
unsigned char BURST_PREVIOUS_SETTING; //-- the previous power setting
unsigned char Intergral;
unsigned char I_Counter;
unsigned char ErrorCounter;
unsigned char LastTemperature;
//******* FUNCTIONS ***********
unsigned char ReadADC(void);
void SendNum(unsigned char num);
void MM_ctoa(unsigned char val, char *str);
void RS232_Send(char *Data);
unsigned char Calculate(unsigned char TARGET,unsigned char CURRENT);
void Burst_Output (unsigned char Percentage);
unsigned char ReadProbe(unsigned char OldCurrent);
void CheckTimeOut(unsigned char target, unsigned char current,unsigned char power);
void SendData(unsigned char target, unsigned char current,unsigned char power);
void RS232_SendConst(const char *constr);
const char Str_Target[]="\rTarget:";
const char Str_Current[]="Current:";
const char Str_Power[]="Power%:";
const char Str_OverFlow[]="\r\nWDT\n";
const char Str_ErrorCount[]="ErrCnt:";
const char Str_Error[]=" ERROR!\n";
const char Str_Start[]=VERSION;
//*****************************************************************
// main
//*****************************************************************
void main (void)
{
unsigned char target,current,power;
unsigned char PwrUpDly;
OverFlow=0;
if(TO==0)
{
OverFlow=1;
}
else
{
PwrUpDly=ERROR_START_DELAY; //- Only Do on POWER UP -
}
CLRWDT();
OPTION=0x3F;
TRIS=0xFF;
GPIO=0xFF;
OSCCAL=_READ_OSCCAL_DATA(); //- Load Osccal
//****** Initialise ports **********
POTINPUT=1;
T_POTINPUT=1;
PROBEINPUT=1;
T_PROBEINPUT=1;
OUTPUT_PIN=1;
T_OUTPUT_PIN=1;
ZEROCROSSIN=1;
T_ZEROCROSSIN=1;
RS232_TX=1;
T_RS232_TX=1;
RS232_RX=1;
T_RS232_RX=1;
GPPU=1; //-- Disable pull ups - all pins that would use it don't need it!
ADCON1=0b00000110; //-- GPIO.0 is the only Analog Input by Default
ADCON0=0b00000001; //-- Fastest sample rate - Turn ADC ON
//****** Initialise Variables ***********
BURST_ON_NEXT=0; //-- Reload value for _COUNT
BURST_ON_COUNT=0; //-- Number of counts to be ON
BURST_TOTAL_COUNT=BURST_TOTAL_RELOAD; //-- Total number of Counts to do
BURST_PREVIOUS_SETTING=0; //-- the previous power setting
Intergral = 0;
//****** Enable Interrupts ********
INTCON=0x00;
T0IE=1;
GIE=1;
if(OverFlow)
{
OverFlow=0;
CLRWDT();
RS232_SendConst(Str_OverFlow);
}
RS232_SendConst(Str_Start);
ErrorCounter=0;
//******* MAIN LOOP ********
while(1)
{
CLRWDT();
target=ReadADC();
current=ReadProbe(current);
power=Calculate(target,current);
if(PwrUpDly > 0) //-- Do not check for Errors till after Power up delay
{
PwrUpDly--;
}
else
{
CheckTimeOut(target,current,power); //-- Check After successful power up
}
Burst_Output(power);
SendData(target,current,power);
}
}
//***************************************************************************
// ReadADC
//***************************************************************************
unsigned char ReadADC(void)
{
unsigned char temp;
CHS1=0; //-- Select Channel 0
CHS0=0;
ADON=1; //-- Turn the ADC on
CLRWDT(); //-- Clear the Watch Dog to allow time to convert b4 reset
GODONE=1; //-- Start the Conversion
while(GODONE); //-- Wait for Conversion to complete
temp=((ADRES/POT_DIVIDER)+POT_SHIFT) * 2; //-- Calculate the Range
if(temp > MAX_POT_TEMP)
{
temp=MAX_POT_TEMP;
}
return(temp);
}
//*******************************************
//***************************************************************************
// SendData
//***************************************************************************
void SendData(unsigned char target, unsigned char current,unsigned char power)
{
RS232_SendConst(Str_Target);
SendNum(target/2);
RS232_SendConst(Str_Current);
SendNum(current/2);
RS232_SendConst(Str_Power);
SendNum(power);
RS232_SendConst( Str_ErrorCount);
SendNum(ErrorCounter);
}
//***************************************************************************
// RS232_SendConst
//***************************************************************************
void RS232_SendConst(const char *constr)
{
char string[10];
strcpy(string,constr);
RS232_Send(string);
}
//***************************************************************************
// SendNum
//***************************************************************************
void SendNum(unsigned char num)
{
char string[5];
MM_ctoa(num, string);
RS232_Send(string);
}
//***************************************************************************
// MM_ctoa
//
// char to Ascii - Base 10 Conversion only
//***************************************************************************
void MM_ctoa(unsigned char val, char *str)
{
signed char tmp;
tmp=val/100;
*str=tmp+'0';
str++;
val-=(tmp*100);
tmp=val/10;
*str=tmp+'0';
str++;
val-=(tmp*10);
tmp=val;
*str=tmp+'0';
str++;
*str=' '; //-- Space
str++;
*str=0; //-- Null Pointer
}
//**********************************************************************
// ReadProbe
//**********************************************************************
unsigned char ReadProbe(unsigned char OldCurrent)
{
unsigned char DATA[8],CRC,count;
CLRWDT();
D_Reset(); //-- Reset Bus
D_Write(0xCC); //-- Skip Rom
D_Write(0x44); //-- Convert temperature
DelayMs(200); //-- Time To convert the temperature
DelayMs(200);
DelayMs(200);
D_Reset();
//-- Read in the data
D_Write(0xCC); //-- Skip Rom
D_Write(0xBE); //-- Read Scratch pad
CLRWDT();
for(count=0;count<8;count++)
{
DATA[count]=D_Read();
}
CRC=D_Read();
if( CRC == PROBE_CHECKSUM(DATA,sizeof(DATA)) )
{
if(DATA[1]==0) //-- Check for a negative Flag
{
return(DATA[0]); //-- If not Negative return the Value
}
else
{
return(0); //-- If negative then return 0
}
}
else
{
ErrorCounter+=CRC_ERR_ADD; //-- If Bad CRC - is possible bad probe so add error
}
return(OldCurrent);
}
//******************** End of Read Probe *********************
//***************************************************************
// RS-232 Defines
//***************************************************************
#defineXTAL4000000
#defineBRATE9600
#defineDLY3/* cycles per null loop */
#defineTX_OHEAD13/* overhead cycles per loop */
#defineRX_OHEAD12/* receiver overhead per loop */
#defineDELAY(ohead)(((XTAL/4/BRATE)-(ohead))/DLY)
//***************************************************************
// RS232_Send
//***************************************************************
void RS232_Send(char *Data)
{
unsigned chardly, bitno;
char c;
while(*Data !=0) //-- Send data till Null is found
{
CLRWDT();
c=*Data;
bitno = 11;
RS232_TX=1; //-- Ensure Data High to start with
T_RS232_TX=0; //-- Ensure data is in output mode
RS232_TX = 0;/* start bit */
bitno = 12;
do
{
dly = DELAY(TX_OHEAD);/* wait one bit time */
do
/* nix */ ;
while(--dly);
if(c & 1)
{
RS232_TX = 1;
}
else
{
RS232_TX = 0;
}
c = (c >> 1) | 0x80;
} while(--bitno);
Data++; //-- Point to next data byte
}
}
//****************************************************************
// Calculate
//****************************************************************
unsigned char Calculate(unsigned char TARGET,unsigned char CURRENT)
{
unsigned char POWER;
CLRWDT();
if(TARGET >= CURRENT)
{
if(CURRENT < (TARGET-CONTROLED_BAND))
{
POWER=100;
Intergral=0;
}
else
{
if(CURRENT != TARGET)
{
if(I_Counter++ > I_COUNT_MAX)
{
I_Counter=0; //-- Counter slows the response of I
Intergral++; //-- Only Increase Integral if less than target
if(Intergral > I_VALUE_MAX) Intergral=I_VALUE_MAX;
}
}
//-- P.I.D Proportional Integral Derivative
POWER=((TARGET / CURRENT) * P_GAIN) + (Intergral * I_GAIN) + ((TARGET - CURRENT) * D_GAIN) ;
}
}
else
{
POWER=0;
if(I_Counter++ > (I_COUNT_MAX*I_COUNT_DEC)) //-- Slower decrease of value
{
I_Counter=0; //-- Counter slows the response of I
if(Intergral !=0)Intergral--;
}
}
if(POWER > 100) POWER =100;
if(CURRENT > MAX_TEMP) POWER=0;
return(POWER);
}
//**********************************************************
void Burst_Output (unsigned char Percentage)
{
CLRWDT();
if(Percentage != BURST_PREVIOUS_SETTING) //-- Check if need to change
{
BURST_PREVIOUS_SETTING=Percentage; //-- Need to change so store
BURST_ON_NEXT=Percentage/BURST_PERCENT_DIVIDER; // All of the new settings
if(BURST_ON_NEXT > BURST_TOTAL_RELOAD) //-- Check if in limit
{
BURST_ON_NEXT = BURST_TOTAL_RELOAD; //-- else set to the limit
}
}
}
//**********************************************************
void interrupt MyInterruptRoutine(void)
{
GIE=0;
//-- Timer 0 Overflow -- Used for zero cross detection
if(T0IF)
{
T0IF=0;
TMR0=BURST_TIMER_RELOAD; //-- Reload timer for Net Wave Trigger
if(BURST_ON_COUNT!=0) //-- Check if need to Enable Output
{
BURST_ON_COUNT--; //-- If so Decrement count by one
T_OUTPUT_PIN=0; //-- Ensure TRIS set to OUTPUT
OUTPUT_PIN=OUTPUT_ON; //-- and enable the output
}
else
{
OUTPUT_PIN=OUTPUT_OFF; //-- Else disable the output
}
BURST_TOTAL_COUNT--; //-- Decrement the total count
if(BURST_TOTAL_COUNT==0) //-- Check if time is up
{
BURST_TOTAL_COUNT=BURST_TOTAL_RELOAD; //-- if so relead the total count
BURST_ON_COUNT=BURST_ON_NEXT; //-- and reload the NEXT ON count
}
}
GIE=1;
}
//************************************************************
void CheckTimeOut(unsigned char target, unsigned char current,unsigned char power)
{
if(power > ERROR_TRIGGER_PWR || ErrorCounter > ERROR_COUNT_MAX)
{
if(LastTemperature >= current || ErrorCounter >ERROR_COUNT_MAX)
{
ErrorCounter++;
if(ErrorCounter > ERROR_COUNT_MAX)
{
//***************** ERROR OCCURED ************************
power=0;
while(1)
{
CLRWDT();
Burst_Output(0); //-- Set Output Power to ZERO
RS232_SendConst(Str_Error); //-- Indicate Error
DelayMs(10); //-- Short delay between Messages
}
//********************************************************
}
}
else
{
LastTemperature = current;
if(ErrorCounter > 15)
{
ErrorCounter-=15; //-- Hopefully will help speed up response to
// Sensor out errors etc
}
else
{
ErrorCounter=0;
}
}
}
else
{
if(ErrorCounter > 10)
{
ErrorCounter-=10; //-- Hopefully will help speed up response to
// Sensor out errors etc
}
}
}
Question: What EXACTLY does a firmware engineer do? Please, provide some sample c or c++ code and explain what it does. I know it's sw that controls hw.. but I need an example.
Thanks
Answer: When they are not out in the parking lot doing doughnuts with their sports cars they spend most of their time avoiding fixing existing problems with the firmware.
Question: What does an embedded/firmware engineer do? Yes, they program hw using sw.. but does anyone have any sample code in c or c++? I would like to see an example..
Answer: I did this for many years and found it the most rewarding type of programming because you're writing code that touches the real world in an obvious way. The effect of your code is tangible - you can watch it work.
Years ago this work was done in assembly language but this is likely not the case any more. Even 8 bit processors have simple C compilers available for them. If you are writing device drivers, the minimum will probably be a good C compiler and there's a good chance it will be C++.
Question: How can I go about finding an entry level programming job more effectively? Well, I just graduated in Jan. and the job hunt has been slow...not stagnant, but not the most promising...Anyway, I am looking for an entry level applications/systems programming or firmware engineering position or even internship and I am having a very hard time finding companies that have jobs suitable for someone fresh out of college. My main job hunting resource is Dice.com (I use it almost exclusively), but I also have a few various other methods that I use occasionally. What can I do to make my job search more effective? It is a very frustrating situation and I don't want to be temping for the next year...Please help, thanks.
Answer: I just went through a Job Search Workshop. Perhaps you could locate one in your area, there are many place that offer them.
Question: Where can I search for expatriate software engineering jobs in Japan? Specifically, I'm looking for American companies that have expatriate embedded software engineering (firmware, RTOS, drivers, applications) positions available in Japan.
Answer: ♡You can try doing a search on these sites and see if there is something that meets your qualifications available:
http://www.daijob.com/dj4/en/searchjob.jsp?pl=1&ts=14&pg=4
http://japanesejobs.com/index5.html
Check out this site which may be helpful:
http://www2.gol.com/users/jpc/Japan/jobs.htm
Or you can go here and check out the list provided. You can try contacting any of them that may be in your field of interest to see if they are currently hiring.:
http://tokyo.asiaxpat.com/directory.htm
Wish I could have been more helpful in answering your question. I hope this little bit of info will help you get started on your search. Good luck and I hope you find the right job for you in Japan! (Have lived in Japan over 8 years.)♡
Question: Firmware updae for samsung m87/86 tv? I have a samsung m87 tv and need a firmware update. Are these provided over the telephone by samsung, does an engineer come out to do them or can i do it myself? thanks
Answer: Contact Samsung for your firmware update,
Question: I am in IC design industry and want to make a switch to business career. What should I do? I have 10 years of semiconductor industry experience in silicon and firmware design. I worked in industry leading organization. I am very hands-on. I still enjoy engineering but I feel like I will do even better on business side. I am highly strategic and have strong business acumen. I am looking for smoother (may not be that slick) transition to business side. So I want to collect ideas and advices in terms of what I can pursue in career at this multinational organization. I want to avoid doing MBA immediately. I have some management experience. Please advise.
Answer: The best thing is to let your manager know that this is the direction you want your career to take and obtain his/her advise and assistance. Your manager will know where the opportunities are and can introduce you to the probable hiring managers (talk to them BEFORE they have openings to find out what it would be like to work in their departments and what they are looking for). Your manager can also make sure you are enrolled in any in-house classes that might be useful to make you more qualified.
The next most useful thing to do is to enlarge your network of professional contacts, epecially outside your own department. You can do this by volunteering for committees (for example, special events committees or emergency reaction teams). Make sure to take the time to get to know the other committee members and stop by to see them once in awhile. Having contacts outside your own department will help you to expand your knowledge of the organization.
Question: Is it possible to make this into a wireless-g usb adaptor? I have a Hawkings wifi finder, and I was wondering if it would be possible to somehow backwards engineer or implement your own code into the thing to make it not only see wifi signals, but also read them and possibly connect to the internet with it. Does it not have the hardware required for that kind of thing or is it something to do with the manufacturers limitations? Could I make a chip reader to replace the firmware on it?
Answer: Not too sure if that would be worthwhile, the time you'd have to spend working out how to make the necessary modifications both hardware and firmware wouldn't really be worth it when you could buy
http://www.dabs.com/productview.aspx?quicklinx=4BYF
for about 35 pounds.
Question: Questions about how Windows uses your computer compared to Linux? My older friend, who used to be a firmware engineer is as very good at using EMACS, told me that Windows leaves junk behind in your RAM and that Linux basically recycles your RAM when it comes to use. Is Linux also "Greener" (Enviromentally) than Windows? I use Ubuntu 8.10 on my PC and it's super fast. I even installed Debian KDE 3.5 on an old desktop at school and it is quite possibly the fastest computer there. So, is Linux a much healthier "diet" for your PC and can it expand the computer's lifespan?
Answer: Linux and Mac use a different file system that doesn't suffer from fragmentation like NTFS. To top it off, every piece of software you install on Windows wants to add itself to the startup list; this slows down the system a lot.
Yes Linux can retain a computers usefulness for a longer period of time because it requires less resources to operate; while with Windows, each new addition requires more computing power.
Question: Are Java coders and users in denial, or am I just crazy? I am an embedded firmware engineer by trade, so I typically write code in C and assembly, and it's always has to be very fast.
I also have many years experience in higher level languages as well. I've written only a minimal amount of Java code as I never got past the 'slow' factor.
I always see people defending Java as just as fast as C++, and I don't doubt it can chug out computations as fast as any code. But when you're talking about any app that's used by an end user, that isn't just going to stay open for a year at a time, load time is important. Even the simplest little applications take an egregiously long time to load whether as a plugin, webstart or with java -jar. A top of the line system with 4GB of ram, 64-bit OS and latest version of Sun Java doesn't seem to even help much.
How has Java not died off yet because of this? Presumably most java applications are end-user ones, right?
G_Man: Compare to a similar/equivalent app written in Win32 API, or even .NET. Certainly some programs will load in a few seconds, or even faster, but they always seem to be exponentially slower in loading than any comparable native app. For example, compare jEdit, a text editor, to even the most bloated native editors out there. jEdit takes like 10 seconds to load, and needs a progress bar to track its progress loading.
I can understand some of the reasons it takes longer, I just don't understand how Java has made it this far with these shortcomings.
Answer: You can sum up there real value proposition of Java in four words.....
-----------------------
WRITE ONCE, RUN ANYWHERE
-----------------------
In the Java world we call it WORA. Those who have not experienced the WORA phenomenon first hand really cannot be expected to understand how powerful those four little words really are, but I will try my best to explain.
I spent the first 11 years of my career at the other end of this spectrum. I worked for a high-end supercomputer company. Needless to say supercomputers are very expensive to operate and thus, almost prohibitively expensive to use as a Fortran/C/C++ development environment. However, the architecture was so different than anything that someone would have on their desktop that there was often NO substitute for expensive supercomputer cycles dedicated to edit, compile, test, and debug. I spent countless hours, perhaps even a majority of my work hours, actually logged on remotely to the "big iron" because I had to do so in order to get my programs to work.
But when I left that company and entered the Java development world that whole approach changed utterly. For the past ten years I have been developing high-transaction-volume distributed web applications in Java. Applications that run on very expensive high-end multi-headed UNIX/Linux servers. And in those ten years I doubt that I have logged as much as 100 hours on those actual systems. Instead I have logged 10 work years of high-end software development on dirt-cheap PCs.
The reliability of WORA is such that if my application behaves differently in high-end distributed deployment than it did in my development sandbox, I would spend days looking for a configuration mistake before considering an actual runtime engine behavior difference. In fact, in ten years I have experienced a Java program failure to "run anywhere" exactly once, about seven years ago. It shocked me and everyone I worked with. If you know what you are doing, it basically NEVER HAPPENS.
I make a pretty comfortable living doing Java, and I expect to do so for a long time to come. I am producing good work at a great pace for very low overhead costs. My clients love the results and seem more than happy to pay me for it.
Yes, Java has its problems. The language is getting bloated and backward compatibility considerations are becoming a real anchor weight holding back progress. And Sun's response to some long-standing known problems seems glacial at best.
But you asked me if I am in DENIAL??? No, my friend, I am living the good life. It may not be your idea of the good life, but I like it just fine.
I also don't think you are crazy, but I do think that you live in a different world than me, with different requirements for what constitutes "GOOD" and "BAD". The things that drive you nuts about Java are non-issues for me. The things that I love about Java are a big "so what" to you. Neither of us is "wrong" or "crazy" or "in denial". We are just different, that's all.
--------------------
Response to ADDITIONAL DETAILS:
When your program "starts" once or twice a month, max (sometimes less than once a year when in production), then you really just don't care about startup time. At all.
Java's sweet spot is mostly in the server-side of 24-7 web apps. There is also a strong niche market for highly interactive applets (games, usually) that are small enough to start up in a reasonable time. You may have a couple on your cell phone right now. There are actually *very few* end-user apps written in Java, for most of the reasons you mentioned.
But, on the "end-user" application front, I *DO* use a Java application called Eclipse for development work. It takes about 1-2 minutes to start up, but I don't care. I typically start it up once on Monday and don't shut it down until Friday. Compiles are a nearly instantaneous part of file saves, so THAT part of my development cycle is much faster than when I used to work with Fortran, C, and C++. But as for other Java apps... jEdit and other similar Java apps have no attraction for me; for intelligent text editing I use VIM.
Question: I HAVE RECEIVED URGENT VACANCY REQUIREMENT FROM AIM GROUP ATLANTA.Is it OK OR JOB SCAM? AIM-GROUP
6000 Lake Forrest Drive
Suite: 400
Atlanta, GA 30328
Tell/Fax: 1-734-512-5533
Phone: +1- 206-339-3604
ATTNENTION
A. WHO WE ARE:
AIM GROUP, with the headquarters in
USA, a service oriented firm that spans over a
decade providing our clients mostly in the oil
and gas sector qualitative and quantitative
services/competencies across the globe is urgently
sourcing for competent (expatriates) to join our
clients (Totalfinalelf, Agip, and Oando multinationals)
in a four year contract agreement in USA,India,Austria, South
Africa, United Kingdom,Finland, Venezuela and Bahrain.
(1). VACANCIES.
1.Geophysicists (Ref#001/GE)
2.Geologists (Ref#002/G)
3.Chemical Analysts (Re#003/CA)
4.Drilling Engineers (Ref#004/DE)
5.Network/firmware Engineers
6.(Ref#005/NFE)
7.Mechanical Engineers (Ref#006/ME)
8.Systems Engineers/Analysts (Ref#007/SE)
9.Cartographers (Ref#008/CPS)
10.Petrochemical Engineers (Ref
Answer: Be more careful with this kind of emails. Did they interview you? Did you apply for a job opening?
To me it looks just like an employment scam - http://www.oil-offshore-marine.com/bewarejobscams.php#7
Question: If you were an EE undergrad.. which job would you choose?? a) Sys. Engineer
b) Firmware Eng.
One is a little more technical than the other.. but the other is actually kinda fun?!?!?
I'm a new graduate so I'm really confused and I don't know what I want.
Thanks!
Answer: Go for fun. You should do what you like doing the best, then you will have more passion for your job.
Question: Lost friend.? Mark is a friend of mind, he's working for a small software developing company in Ca. as a software engineer team leader. One day while he was on the computer trying to solve a glitch of the software that his team has developed and he heard a voice came from behind "That's not going to work!" as he turns around it was Jim, the shipping and receiving guy who earns a bit better than minimum wage walking away. When Mark run the test, sure enough it's not working Mark was dumb founded "How the hell did he know, he is just a shipping/receiving clerk?!". Mark decided to confront Jim…
Jim was a successful firmware and software consultant back in early 80's married to a very beautiful wife and he loved this woman dearly, after 3 years of marriage of his wife then filed for a divorce, everything split in half and she demanded high alimony pay in court of which she won. Jim realized that this woman is a gold digger, the anger set in, he vowed that this woman will never get another penny out of him for the rest of his life, Jim chose to be a homeless for 15 years.
Jim got the job as shipping/receiving clerk thru a friend he met at the park where he called home.
Mark promoted Jim to be a software developer working along side with Mark, Jim became more like Mark's teacher instead.
I was lucky enough to meet Jim several times and today I found out he just passed away and I'm feeling sad that's all, this is not a question..
Answer: I am sorry for your loss. Just remember certain things when faced with grief:
Don't expect to stop grieving after a certain amount of time. It takes as long as it takes.
Some people express their pain openly. Others don't show anything or don't even cry while alone. Whatever you are experiencing or doing / not doing - know that it is normal. Grieving takes on many different kinds of behaviors in all of us, and every single loss can be different as to how we react to it.
Remember the nice moments you had with that person - The person might be gone forever, but nothing and nobody can ever take the good memories away from you.
And what really helps me whenever I lose somebody I am close to: I do believe in an afterlife. There is tremendous hope in that belief, because you can hope to see the person again some day when you are crossing over to the other side. This has helped me tons.
Question: Help with an ethics assignment...need ideas? The Calcutta Chip Co. (CCC) located in Muncie, IN, has designed a chip for a new scientific calculator that features high-precision floating-point accuracy to 17 significant digits for all 250 mathematical functions provided with the unit. After one-and-a-half years in development, and after shipping over 5,000 beta units to key customers, the company discovers that there is a problem with certain calculations, as described below.
In order to expedite floating-point (ft.-pt.) operations (used in handling scientific notation in mathematical operations) in a computer or calculator, often certain tables of values are used to assist in the speed of execution of these ft.-pt. operations. (For example, a calculator requiring as long as 3 minutes to perform a tangent calculation would have no market appeal.) These tables can contain up to 100 integer entries. During beta testing, CCC discovers that several of these values were incorrectly entered before burning them into the firmware. Further testing concludes that because of the location and use of these table errors, the only mathematical results affected will occur in the 13th to the 17th significant digits for the double-precision fl.-pt. operations.
Some additional facts to consider:
1. CCC is staking its financial future on this chip.
2. Re-designing the chip will take at least a year, costing the company its competitive edge.
3. The typical user will encounter this problem once every 20,000 years.
Your task.
1.
As the senior engineer on this project for CCC, you are asked to propose a resolution for this situation. How serious is the problem? What should be done?
2.
You have called together a committee of your peers to propose as many different alternative solutions as you can think of within 10-15 minutes. (Do not assign any value or determine the implications of this proposed solution for now -- instead, just brainstorm potential solutions.)
3.
Now, try to project each option's impact on the company.
4.
Assign a weighted value (0-100 with 100 as best) to each of the suggestions and resulting actions proposed above, based on your personal assessment of the quality of the action.
5.
Determine the best possible course of action and explain the reasons for your choice, based on the weightings given above or other criteria you create and document.
6.
Write this up in a detailed memo with explanations and recommendations to the senior manager(s) who will decide what action(s) to take.
Answer: Recall the product, research the adjustment, and re-release it a year later - 60: you lose your competitive edge from early market entry, early research, and secure reputation.
Leave it out there and continue to produce the same product with no contingency research - 85: the product will not be upgraded, but the likelihood of a catastrophe is so slim that you shouldn't be blamed for anything going wrong.
Leave it out there, reduce production, and research the repair - 90: the product will not be immediately upgraded, but the lower supply (since capital will be dedicated to R+D) should allow you to charge more per calculator for now as long as the marketing strategy stirs up demand and brand loyalty. When the new model comes out, you can charge a lower price for the newer model and produce more at the same time, reinforcing brand loyalty and pressuring your competitors out of the market.
Question: Can this be done? Developing a story and need tech advice.? I am developing a story idea, and a lot hinges on whether or not something is technologically possible today. I don't need a lot of detail if it is possible, but any referrals to articles or other information would be appreciated so I can continue researching.
Essentially, within the firmware code on a chip, is it possible to have a routine that is a backdoor, but doesn't look like one, and if the routine is removed or bypassed, the chip ceases to function as originally designed?
Or, perhaps some lines of code embedded within others that don't really do anything unless certain conditions occur, but again the chip won't function properly if they are removed?
I do have some literary license with this but would like to be credible as much as possible. The concept is that a device is stolen and reverse engineered, but the existence of this code allows the original owner to retake control of the device remotely. The thief should not be able to see that this feature exists, even with a very detailed examination because they suspect that something like this is in the device or a component.
Thanks for your thoughts, and any referrals to more reading I can do in this vein.
Answer: The code to allow remote access to anything, much less a firmware chip, is fairly complex and would probably be extremely difficult to hide. As far as a storyline would go, it wouldn't be terribly offbase to say it was hidden in update code or the like.
As far as the chip ceasing to function if the code is removed, that definitely is possible, using a hash of the firmware which would change if the firmware is modified (realistically to prevent further damage if the chip is corrupted).
Question: which area of electrical engineering pay more for....? an entry level position?
controls, electronics, hardware design, embedded software design, firmware....?
Answer: depends on the company, the locale, and current economic conditions. unless you plan to remain in an entry level position, it shouldn't be a concern. more important is what you enjoy and are competent at doing.
Firmware Engineer Career Information and Opportunities
|
|
|
|
ElectronicsWeekly.com
Due to continued growth and new product development this growing technology company is now seeking a Firmware Engineer to join their growing Research and Development team working on their wireless, communications and telemetry products.
|
| |
Electric Imp Will Connect (Almost) Everything You Own to the Internet
PCWorld
|
| |
Virtual-Strategy Magazine
Patent '783 is the third that Martin, a retired Lockheed Martin Firmware Engineer, has received for his game system, which he designed, built and field tested in his garage. As a next step on his journey to revolutionize the world of table tennis, ...
|
| |
Rob Galbraith DPI
Once the product is received at PocketWizard headquarters in Vermont, it is then thoroughly tested, reversed engineered by our firmware engineers, tested again and then tested yet again for compatibility. In order to expedite the process, ...
|
| |
New Companies at DAC: Esencia Technologies
EE Times (blog)
|
| |
ElectronicsWeekly.com
A leading smart metering technology organisation is looking for an embedded software engineer who has firmware experience writing on electronics platforms. This global business leads the way in metering products for the gas, electricity and water ...
|
| |
Buying an SSD - The Top 10 Brands That Matter
StorageReview.com
|
| |
New Electronics
A software engineer might want to test firmware before a new release, whilst a compliance engineer might want to examine the regulatory hurdles to a product release in a target country. It could be argued that it is important to have an overall picture ...
|
| |
ElectronicsWeekly.com
We have an exciting new opportunity for an experienced software engineer/ team lead or hands on development manager to join an exiting and innovative Cambridge start-up company working within new imaging and display technologies.
|
| |
MarketWatch (press release)
Control engineers, maintenance personnel, instrumentation technicians, and panel builders can use Opto aPAC to discover SNAP PAC controllers and I/O systems and then view, debug, and fine-tune them, saving time and money during commissioning and ...
|
| |
|
|